Nejkratsi varianta pro 16 bitovou smycku by byla s instrukci testu bitu.
0x59 = 0101 1001
0x58 = 0101 1000
0x57 = 0101 0111
0x57 se lisi u trech bitu.
Smycka je pomalejsi uz o 7 taktu na pruchod.
Puvodni - 13 (djnz) + 8 (bit) + 12 (jr)
org 0x8000
ld hl, 0x59FF ; adresa pro zápis
ld (HL),L ; zápis hodnoty na adresu (HL)
dec HL ; snížní adresy i zapisované hodnoty
bit 3,H ; test bitu 3
jr nz, $-4 ; skok pokud nejsme pod atributovou pamětí
ret
ORG 8000
8000:21FF59 LD HL, 59FF
8003:75 LD (HL), L
8004:2B DEC HL
8005:CB5C BIT 3, H
8007:20FA JR NZ, 8003
8009:C9 RET
PS: Jak se tu vlastne spravne vklada kod, aby zachoval odsazeni a neskoncil pri prvnim zalomeni?
Myslim ze spravna odpoved je ti rici ze absolutni skok je rychlejsi ale o bajt delsi, protoze musi uchovavat celou adresu cile, tedy 2 bajty.
Pokud to vis, tak bych mel otazku zase ja, proc bys pouzival JP kdyz muzes pouzit kod stejne delky s tou variantou co jsem psal nad timhle kde je konec testovan pres
CP H
JR nz,$-$
co trva 4+12 = 16 taktu oproti
BIT 3,H
JP $-4
ktery trva 8+10 = 18 taktu? A kod je stejne dlouhy? Duvod by totiz stale nejaky byt asi mohl protoze je to Z80... .)