Optimised intoXX functions (#19)
* Optimised intoXX functions Rewrote intoXX functions to mainly rely on intoHL, as the HL instructions are smaller and faster. Also removed some redundant push and pop instructions. I edited the given unit tests to test these, and they seem to work as expected. * Doesn't use self-modifying code The number of bytes is the same as my previous attempt, with 11 more cycles in intoHL, so although I don't feel as clever this time it's still a good optimisation. I found an equivalent method for intoDE, however relying on intoHL still allows for `ex (sp), hl` to be used in intoIX, which is smaller and faster. * Update core.asm * Tried harder to follow coding convention Added tabs between mnemonics and operands, and replaced a new line I accidentally removed.
This commit is contained in:
parent
e259e3d02e
commit
6281e2036f
@ -27,34 +27,29 @@ addDE:
|
||||
noop: ; piggy backing on the first "ret" we have
|
||||
ret
|
||||
|
||||
; copy (DE) into DE, little endian style (addresses in z80 are always have
|
||||
; their LSB before their MSB)
|
||||
intoDE:
|
||||
push af
|
||||
ld a, (de)
|
||||
inc de
|
||||
ex af, af'
|
||||
ld a, (de)
|
||||
ld d, a
|
||||
ex af, af'
|
||||
ld e, a
|
||||
pop af
|
||||
ret
|
||||
|
||||
; copy (HL) into DE, then exchange the two, utilising the optimised HL instructions.
|
||||
; ld must be done little endian, so least significant byte first.
|
||||
intoHL:
|
||||
push de
|
||||
ex de, hl
|
||||
call intoDE
|
||||
ld e, (hl)
|
||||
inc hl
|
||||
ld d, (hl)
|
||||
ex de, hl
|
||||
pop de
|
||||
ret
|
||||
|
||||
intoDE:
|
||||
ex de, hl
|
||||
call intoHL
|
||||
ex de, hl ; de preserved by intoHL, so no push/pop needed
|
||||
ret
|
||||
|
||||
intoIX:
|
||||
push de
|
||||
push ix \ pop de
|
||||
call intoDE
|
||||
push de \ pop ix
|
||||
pop de
|
||||
push ix
|
||||
ex (sp), hl ;swap hl with ix, on the stack
|
||||
call intoHL
|
||||
ex (sp), hl ;restore hl from stack
|
||||
pop ix
|
||||
ret
|
||||
|
||||
; add the value of A into HL
|
||||
|
Loading…
Reference in New Issue
Block a user