нужно uInt32.toString() на асме

Programs, sources, embedded, demomaking, whatsoever related to subj :)

Postby jdigreze » 26 Dec 2011, 17:26

DimkaM wrote:По моему дохера циклов выходит
Для 32 бита десять циклов деления, по кол-ву десятичных разрядов.
Сколько меня не корми, волк всё равно в лес смотреть будет
jdigreze
 
Posts: 1478
Joined: 01 Aug 2008, 06:49
Location: Агбан
Group: Registered users

Postby DimkaM » 26 Dec 2011, 18:58

При спековых файлах до 1мб, в среднем выходит 30-40 циклов, терпимо.
Время покажет, на днях запихаю.
N>"Идите нахуй" со своей политикой...
DimkaM
 
Posts: 1011
Joined: 24 Mar 2010, 12:42
Location: г.Щёлково М.О.
Group: Registered users

Postby Budder » 26 Dec 2011, 22:21

DimkaM, у меня в процедуре при самом неудачном раскладе будет ~10*9 циклов (это когда все цифры 9ки).
В тактах оная ест 2-8к (в зависимости от числа).
http://forum.tslabs.info
MGN Group
User avatar
Budder
 
Posts: 462
Joined: 20 Jul 2007, 14:05
Group: Registered users

Postby DimkaM » 27 Dec 2011, 05:36

Budder wrote:В тактах оная ест 2-8к

При 20 итемах в листе 1-2 инта скушает, не критично. Но у мну принудительно 7мгц, так што шоколад.

Расскажи лучше про сортировку. сейчас впилил двусвязный список, выделил по 512к на на каждую панельку, 32 байта на итем. При каталоге в 100 файлов невооружонным глазом тормозов не заметно, но скорость сортировки падает в геометрической прогрессии. При 1к файлов чую тормоз.
LVD подкинул процедурку, но она мне совсем неподходит.
N>"Идите нахуй" со своей политикой...
DimkaM
 
Posts: 1011
Joined: 24 Mar 2010, 12:42
Location: г.Щёлково М.О.
Group: Registered users

Postby lvd » 27 Dec 2011, 08:51

DimkaM wrote:Но у мну принудительно 7мгц, так што шоколад.

Почему не 14?

DimkaM wrote:LVD подкинул процедурку, но она мне совсем неподходит.

C чего бы?
F̞͖̭̿̔ͯu̐̅cͬ̑ͩk̨̤̳͇̮̭̪̠̽̿̓̆ͭͩ ̷̩̰͎̩͓̘̾̀ͬ̊ͭ͛ͅda̝̺͙̬͎̝̾͟ ̰̜̝̯͉̯̖̓̎́ͨ̽ͫ͟f̟͇̭̀ͬͨͭ̐̚u̹̼̹̗̞͑̔͂͐̚cͭ̅̊̆̒̆ǩ̝̩̯́ͥ̔̍̑ḭ͓͍̳̬ͦ̽͂n͍͎͈̈̅ͩͬ ̊ͫ̂̾̑̈́f̲͚͉͓͗̋́ͧͦ̅ȗ͇̲̻͈̲̅̎͗͒ͭ͡c̬̟̠̹̯̈́ͩ͘ͅk̫̠̻̋͜a̲͒̾̇!͙͕̺͉̗̩̲̂̏̄̀
User avatar
lvd
 
Posts: 7262
Joined: 07 Apr 2007, 21:28
Group: Registered users

Postby DimkaM » 27 Dec 2011, 09:39

lvd wrote:Почему не 14?

хз. Щёлкать не охота, незнаю как драйвера Savelij'я на 14мгц отреагируют.
Будут тормоза, то на время сортировки буду включать 14мгц.
lvd wrote:C чего бы?

мне стринги надо сортировать по 13 символов(а общая длинна записи 32байта), да ещё и в куче банок сидящих.
Но я ужо этот вопрос решил, больше переделывать нету желания.
N>"Идите нахуй" со своей политикой...
DimkaM
 
Posts: 1011
Joined: 24 Mar 2010, 12:42
Location: г.Щёлково М.О.
Group: Registered users

Postby DimkaM » 27 Dec 2011, 11:53

LVD Ага. Это я не про твой исходник написал, опять попутал в памяти. Твой в пределах адресов Z80 работает, в 3 свободные банки 2к записей влазит, шо в принципе достаточно(маньякам В.). Но на тот момент я ужо исходники покоцал под двусвязный список. Монстр ещё тот получился, но интересно было до уссачки, раз десять уже хотел забить на это дело. Даже для разнообразия полез в дебри ретрейсинга, но тама всё намного хуже.
Надо всё причёсывать и комментировать, но пока сил ужо нету:
Code: Select all
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
N>"Идите нахуй" со своей политикой...
DimkaM
 
Posts: 1011
Joined: 24 Mar 2010, 12:42
Location: г.Щёлково М.О.
Group: Registered users

Postby lvd » 27 Dec 2011, 12:42

DimkaM wrote:Твой в пределах адресов Z80 работает, в 3 свободные банки 2к записей влазит, шо в принципе достаточно

Ничто не запрещает сделать записи только для сортировки, со ссылками на строчки и прочую дату в странички. Тогда оно ещё больше отсортирует. И ещё. На пентеве, опять же ничто не запрещает тупо все записи раскласть по страничкам. В моём алго (точнее в сортировке в куче) юзаецо за раз токо 2 записи == 2 паги в 2 разных очках. Так что можно без особого гемора сортировать хоть 4 мегабайта.
F̞͖̭̿̔ͯu̐̅cͬ̑ͩk̨̤̳͇̮̭̪̠̽̿̓̆ͭͩ ̷̩̰͎̩͓̘̾̀ͬ̊ͭ͛ͅda̝̺͙̬͎̝̾͟ ̰̜̝̯͉̯̖̓̎́ͨ̽ͫ͟f̟͇̭̀ͬͨͭ̐̚u̹̼̹̗̞͑̔͂͐̚cͭ̅̊̆̒̆ǩ̝̩̯́ͥ̔̍̑ḭ͓͍̳̬ͦ̽͂n͍͎͈̈̅ͩͬ ̊ͫ̂̾̑̈́f̲͚͉͓͗̋́ͧͦ̅ȗ͇̲̻͈̲̅̎͗͒ͭ͡c̬̟̠̹̯̈́ͩ͘ͅk̫̠̻̋͜a̲͒̾̇!͙͕̺͉̗̩̲̂̏̄̀
User avatar
lvd
 
Posts: 7262
Joined: 07 Apr 2007, 21:28
Group: Registered users

Postby DimkaM » 27 Dec 2011, 12:58

lvd wrote: На пентеве, опять же ничто не запрещает тупо все записи раскласть по страничкам.
Я и не стеснялся, мегабайт под записи юзаю.
lvd wrote:В моём алго (точнее в сортировке в куче)
Теорию про твой алго почитал, довольно интересная вешь, но сортирует уже созданный список. Но в моём случае проще, я сортирую при создании списка.
N>"Идите нахуй" со своей политикой...
DimkaM
 
Posts: 1011
Joined: 24 Mar 2010, 12:42
Location: г.Щёлково М.О.
Group: Registered users

Postby jdigreze » 27 Dec 2011, 14:01

DimkaM wrote:я сортирую при создании списка.

Имхо, наилучший вариант.
Сколько меня не корми, волк всё равно в лес смотреть будет
jdigreze
 
Posts: 1478
Joined: 01 Aug 2008, 06:49
Location: Агбан
Group: Registered users

PreviousNext

Return to Coding

Who is online

Users browsing this forum: No registered users and 0 guests