replace restart { ld a,%1(%2) bit %3,a jp %4,%5 } by { bit %3,%1(%2) jp %4,%5 } replace { ld %1,%2 ld a,%2 } by { ld %1,%2 ld a,%1 } replace { ld %1,a xor a,a or a,%1 jp z,%2 } by { ld %1,a or a,a jp z,%2 } replace { rlca ld a,#0x00 rla } by { rlca and a,#0x01 } replace { ld %3,a ld l,%1 ld h,%2 ld l,(hl) ld a,%3 } by { ld %3,a ld l,%1 ld h,%2 ld l,(hl) } if notVolatile %3 ; ;-------------------------- ; replace restart { pop %1 push %1 ld %1,%2 } by { ; z80 removed redundant pop/push ld %1,%2 } ; ;replace restart { ld a,%1 add a,#0x01 ld l,a } by { ; z80 improved usage of 'inc' ld l,%1 inc l ld a,l } replace restart { ld a,%1 add a,#0xFF ld l,a } by { ; z80 improved usage of 'dec' ld l,%1 dec l ld a,l } replace restart { ld l,a ld c,%1 ld a,l } by { ld l,a ld c,%1 } replace restart { ld c,l ld a,c and a,#%1 ld c,a or a,a } by { ; z80 stream lining 'and' logic ld a,#%1 and a,l ld c,a } replace restart { ld a,c and a,#%1 ld c,a or a,a } by { ; z80 stream lining 'and' logic ld a,#%1 and a,c ld c,a } replace restart { ld a,c or a,#%1 ld c,a } by { ; z80 stream lining 'or' logic ld a,#%1 or a,c ld c,a } ; I don't think this works. neg does a unary minus of A, not HL -- EEP ; ;replace { ; ld a,c ; sub a,%1 ; ld l,a ; ld a,b ; sbc a,%2 ; ld h,a ;} by { ; ; z80/z180 peephole byte pointer subtraction ; xor a ; ld h,%1 ; ld l,%2 ; sbc hl,bc ; neg ;} replace { %1: in0 a,(%2) and a,#%3 jp z,%4 %5: jp %6 %4: call %7 jp %1 %6: ret } by { %1: in0 a,(%2) and a,#%3 jp nz,%5 %4: call %7 jp %1 %5: %6: ret }