Komputery z Z80 > AMSTRAD

Tricki na Amstradzie

<< < (3/29) > >>

matofesi:
Wiem - dlatego napisałem choćby :P

RafalM:

--- Cytuj ---PS.: Najszybszą znaną mi metodą przenoszenia bloku pamięci jest rozkaz ldir w asemblerze Z80.
--- Koniec cytatu ---

Jedna z wolniejszych :)

Kilka metod :

LD A,(DE)
LD (HL),A
INC HL
INC DE - 25 taktów na bajt

LDIR - 21 taktów na bajt

LDI - 16 taktów na bajt
LDI
LDI
LDI
...

kopiowanie przez stos - można zejść do jakichś 12,5 takta na bajt, ale  o wiele trudniejsze do zrozumienia i napisania niż poprzednie metody

No i pamiętajmy że w programowaniu mamy coś za coś - albo krótki kod kopiujący i mniejsza szybkość, albo dłuższy kod i większa szybkość.

W skrajnym najszybszym przypadku aby skopiować dajmy 5 kB danych potrzebny jest kod długości... jakieś 7 kB :)

Dobrym kompromisowym rozwiązaniem jest wspomniana pętla a w niej dajmy na to 16,32 itp. instrukcje LDI

ZbyniuR:
Ja pisywałem tylko w Basicu a

LD HL
LD DE
LD BC
LDIR
RET

to najbardziej zaawansowany kawałek kodu jaki zdarzało mi się używać świadomym znaczenia każdego bajta. :)
Czy potraficie tak zmodyfikować powyższą metodę bym mógł ją wywoływać w Basicu podając jednocześnie parametry?
czyli CALL adrprocedury,adrźródła,adrdocelowy,ileprzesłać 
a nie jak teraz, że muszę POKE-ami ją modyfikować i wywołać prostym CALL adrprocedury

I skoro trafiłem na takich speców to zapytam, ile by zajął kod do przeniesienia 16KB tą metodą LDI?

Tygrys:
to zależy od tego ile razy to LDI byłoby powtórzone:


--- Kod: ---LD HL,zrodlo ; 3b
LD DE,del ; 3b
LD A,0 ;2b <-- 256 powtorzen
petla:
rept 64 ; 64x powtorzone to co jest miedzy rept i endm
  LDI ; 64 * 2bajty
endm
DEC A ; 1b
jp NZ,petla ; 2b
ret

--- Koniec kodu ---

co da 13+128 = 141 bajtow

pear:
Najszybsza metoda wymaga drobnej przeróbki http://velesoft.speccy.cz/data-gear/zxdma-interface2.jpg :)
Ile wtedy będzie bajtów/takt ? (Max. speed of data transfer on ZX128+ is 17.3 kB(17727 bytes) / frame = 865.6 kB(886350 bytes) / second) :)

Nawigacja

[0] Indeks wiadomości

[#] Następna strona

[*] Poprzednia strona

Idź do wersji pełnej