034
18.07.2024, 18:35 Uhr
kaiOr
|
Zitat: | Bert schrieb LDIR sollte auch unproblematisch sein; laut der Seite hier https://www.jnz.dk/z80/ldir.html werden bei LDIR zwei Refreshs pro transferiertem Byte gemacht. Klingt nicht ganz unlogisch, der Opcode besteht aus ED B0 und wird m.E. immer wieder eingelesen. |
Auf den Refresh bezogen scheint ein EX (SP),HL mit der längste Befehl zu sein (19T). Käme noch eine Interruptannahme dazu sind es nochmal 3T mehr. Aber ich denke nicht, dass man das effektiv zur Ausdünnung nutzen könnte, da zwangsweise wieder kürzere Befehle (ISR) folgen.
Packen wir einen Großteil in den IRM können aber noch WAIT-States dazu kommen.
Quellcode: | ;WEAK REFRESH: ;************ KASS EQU 0B700h ;Kassettenpuffer (IRM)
ORG 200h DEFW 7F7Fh DEFM 'WKRFSH' DEFB 1 JR WTWEAK
SPOS DEFW 0 ;Merker SP
WTWEAK LD HL,KASS LD DE,KASS+1 LD BC,80h-5 LD (HL),0E3h ;ex (sp),hl -> 19T + ~3 WAIT-States -> 22T LDIR INC HL LD (HL),0C9h ;ret -> 10T + ~2 WAIT-States -> 12T INC HL LD (HL),0 ;*256 ;IRM Schleife DI LD (SPOS),SP LD SP,KASS+80h LD B,23 ;HAUPTZAEHLER EXCH CALL KASS ;17T + ~1 WAIT-State DEC (HL) ;11T + ~1 WAIT-State JR NZ,EXCH ;12/7T DJNZ EXCH ;13/8T LD SP,(SPOS) EI
RET |
Damit sind es knapp 22T pro Befehl. Dauer: ca. 10s (8s wenn es im normalen RAM wäre)
MfG Dieser Beitrag wurde am 18.07.2024 um 19:27 Uhr von kaiOr editiert. |