Для 32 бита десять циклов деления, по кол-ву десятичных разрядов.DimkaM wrote:По моему дохера циклов выходит
Budder wrote:В тактах оная ест 2-8к
DimkaM wrote:Но у мну принудительно 7мгц, так што шоколад.
DimkaM wrote:LVD подкинул процедурку, но она мне совсем неподходит.
lvd wrote:Почему не 14?
lvd wrote:C чего бы?
readfnos ;de=dir
MEM_SHADOW
ld a,mem.fat_p
ld bc,mem.b1
out (c),a
ld a,(ix+txt.FWIN.pages)
ld b,high mem.b2
out (c),a
MEM_NOSHADOW
ld a,(ix+txt.FWIN.drive):add a,0x30:ld (curdir),a
WIN_GETPAGES a
ld (.num),a
ld de,dir
ld bc,curdir
F_OPENDIR
.l2 ld bc,0x8000
.l1 ld de,dir
F_READDIR
ld a,FILINFO.FNAME:add c:ld c,a
LD A,(BC)
or a
ret z
dec c:ld a,(bc):and 0x10:jr nz,.cat
ld a,0x20
.cat ld (bc),a
ld d,b,e,c
push bc
MEM_SHADOW
ld iy,0xfff8:add iy,bc ;-8+bc
call fno_sort
MEM_NOSHADOW
pop bc
ADDBC8 0x18
bit 6,b:jr z,.l1
ld hl,.num:inc (hl)
MEM_SHADOW
ld bc,mem.b2:ld a,(hl)
out (c),a
MEM_NOSHADOW
ld bc,0x8000
jr .l1
.num word 0
fno_sort
xor a:ld hl,#8008:sbc hl,de:jp z,.first
ld a,(ix+txt.FWIN.p_fno_1)
ld bc,mem.b3
out (c),a
ld (.num),a
ld a,(ix+txt.FWIN.fno_1):ld h,(ix+txt.FWIN.fno_1+1)
add FILINFO.FATTRIB:ld l,a
.l3 ld a,(de):cp (hl):jr .cat
.l2 inc l,e
ld a,(de):or (hl):jr z,.prev
ld a,(de):cp (hl)
.cat jr z,.l2
jr c,.prev
ld a,l
and %11100000:or FILINFO.NEXT:ld l,a ;get fno
ld c,(hl):inc hl:ld b,(hl):inc hl:ld a,(hl)
or a:jr z,.new
ld hl,FILINFO.FATTRIB ; +9
add hl,bc
ld bc,mem.b3:out (c),a
ld (.num),a
ld a,e:and %11100000
or FILINFO.FATTRIB:ld e,a ;взад на имя
jr .l3
.new ;добавим после текущего
ld a,l:and %11100000:ld l,a ;смещение в ноль
push hl:ex (sp),ix ;в индексный
push iy:pop de:set 6,d
xor a
ld (iy+FILINFO.NEXTP),a ;устанавливаем следующий фно zero
ld a,(.num)
ld (iy+FILINFO.PREVP),a ;устанавливаем предыдущий
ld (iy+FILINFO.PREV),hl
ld (ix+FILINFO.NEXT),de ;устанавливаем следующий
ld a,(readfnos.num)
ld (ix+FILINFO.NEXTP),a
pop ix:ret
.prev ;вставим перед текущим
ld a,l:and %11100000:ld l,a ;смещение в ноль
push hl:ex (sp),ix ;в индексный
push iy:pop de:set 6,d
ld a,(.num)
ld (iy+FILINFO.NEXTP),a
ld (iy+FILINFO.NEXT),hl ;устанавливаем следующий фно
ld hl,(ix+FILINFO.PREV) ;берём предыдущий фно
ld (iy+FILINFO.PREV),hl ;устанавливаем предыдущий
ld (ix+FILINFO.PREV),de ;устанавливаем предыдущий
ld a,(readfnos.num):ld b,a
ld a,(ix+FILINFO.PREVP)
ld (ix+FILINFO.PREVP),b
ld (iy+FILINFO.PREVP),a
pop ix
or a:jr z,.firstfno ;если ноль то первый элемент списка
ld bc,mem.b3:out (c),a
push hl:pop iy
ld (iy+FILINFO.NEXT),de ;установим следующим
ld a,(readfnos.num)
ld (iy+FILINFO.NEXTP),a
ret
.first
push iy:pop de:set 6,d
xor a
ld (iy+FILINFO.PREVP),a
ld (iy+FILINFO.NEXTP),a
.firstfno
ld (ix+txt.FWIN.fno_1),de ;запомним первый элемент списка
ld a,(readfnos.num)
ld (ix+txt.FWIN.p_fno_1),a
ret
.num db 0
DimkaM wrote:Твой в пределах адресов Z80 работает, в 3 свободные банки 2к записей влазит, шо в принципе достаточно
Я и не стеснялся, мегабайт под записи юзаю.lvd wrote: На пентеве, опять же ничто не запрещает тупо все записи раскласть по страничкам.
Теорию про твой алго почитал, довольно интересная вешь, но сортирует уже созданный список. Но в моём случае проще, я сортирую при создании списка.lvd wrote:В моём алго (точнее в сортировке в куче)
Users browsing this forum: No registered users and 0 guests