Pouzil bych tento algoritmus (nikdy jsem nepouzival asm BOBO, tak jsem pouzil mnemoniku Z80). Rekl bych, ze o moc rychleji uz to udelat s timto CPU nejde.
MEMCLR LD SP,MEMTOP ;KONEC RAM + 1
LD HL,0
LD DE,27*1024/2/8 ;POCET CYKLU
LOOP PUSH HL
PUSH HL
PUSH HL
PUSH HL
PUSH HL
PUSH HL
PUSH HL
PUSH HL
DEC E
JP NZ,LOOP
DEC D
JP NZ,LOOP
LD SP,STACKTOP ;VRCHOL ZASOBNIKU
…
Bohuzel nemam po ruce tabulku delky jednotlivych instrukci BOBO v T-cyklech, toz budu vsechny povazovat za 8 T dlouhe, vice to nebude. Je jich v cyklu 12, takze cas bude 27(kB)*1024/2(push dela 2 byty naraz)/8(8 PUSHu v cyklu)*8(delka instrukce v T)*12(pocet inst. v cyklu)/2048000(frekv) = 0.081s. Inicializacni instrukce zanedbany.
Zdravi Pavel
To vypada dobre, akorat si nejsem jisty, jestli se nema SP nastavit na MEMTOP-1, kdyztak me opravte (procesory se chovaji ruzne v tom, zda nejdrive snizuji SP a potom ukladaji nebo naopak). Skoda ze 8080 nenastavuje pri DCX instrukci ZF, potom by se i spodni cast smycky dala zmenit (wtf to 8080 nema???)
1) Ne, SP se nastavuje na konec +1, protoze PUSH je na teto architekture s predekrementem.
2) DEC dd (16bit dvojregistru) na 8080 ani Z80 nenastavuje flagy, takze se musi budto postupem uvedenym vyse v puvodnim altoritmu, nebo
DEC DE
LD A,D
OR E
JP NZ,LOOP
coz ma nevyhodu v tom, ze nici obsah A.
Zdravi Pavel
Ale tady se bavime o 8080, takze ten kod musi byt pro ni, ikdyz pouziva mnemo Z80. Nadto tyhle LD*R byly tak silene pomale, ze kazdy slusny programator je nahrazoval pro time-critical presuny vlastnimi konstrukcemi (kdyby nic jineho, napr. 16* LDI ve smycce bylo uz podstatne rychlejsi) a pro memory fill uz se to vubec nehodilo, tam byla varianta s pushem asi uplne nejrychlejsi. Tech 16 hodin trval jeden elementarni presun, nikoliv cela instrukce (trik byl v tom, ze ta instrukce se dokonce sama nacitala stale dokola, takze pokud ten LDIR sam sebe smazal, ani se nedokoncil, jak mel :-) ).
Zdravi Pavel.