cpHLDE and writeHLinDE improvements (#33)

Pretty major improvements to both of these, cpHLDE is now 5 bytes shorter and between 9 and 12 cycles faster due to branching, and writeHLinDE is now 2 bytes shorter and 21 cycles faster.
This commit is contained in:
Clanmaster21 2019-10-17 01:39:38 +01:00 committed by Virgil Dupras
parent 5460f28cfb
commit 9fb1467ee5
1 changed files with 11 additions and 22 deletions

View File

@ -79,33 +79,22 @@ subHL:
; Compare HL with DE and sets Z and C in the same way as a regular cp X where ; Compare HL with DE and sets Z and C in the same way as a regular cp X where
; HL is A and DE is X. ; HL is A and DE is X.
; A is preserved through some register hocus pocus: having cpHLDE destroying
; A bit me too many times.
cpHLDE: cpHLDE:
push bc push hl
ld b, a ; preserve A or a ;reset carry flag
ld a, h sbc hl, de ;There is no 'sub hl, de', so we must use sbc
cp d pop hl
jr nz, .end ; if not equal, flags are correct
ld a, l
cp e
; flags are correct
.end:
; restore A but don't touch flags
ld a, b
pop bc
ret ret
; Write the contents of HL in (DE) ; Write the contents of HL in (DE)
; de and hl are preserved, so no pushing/popping necessary
writeHLinDE: writeHLinDE:
push af ex de, hl
ld a, l ld (hl), e
ld (de), a inc hl
inc de ld (hl), d
ld a, h dec hl
ld (de), a ex de, hl
dec de
pop af
ret ret
; Call the method (IX) is a pointer to. In other words, call intoIX before ; Call the method (IX) is a pointer to. In other words, call intoIX before