1
0
mirror of https://github.com/hsoft/collapseos.git synced 2024-11-30 20:48:06 +11:00

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:
Clanmaster21 2019-10-10 19:44:23 +01:00 committed by Virgil Dupras
parent e259e3d02e
commit 6281e2036f

View File

@ -27,34 +27,29 @@ addDE:
noop: ; piggy backing on the first "ret" we have noop: ; piggy backing on the first "ret" we have
ret ret
; copy (DE) into DE, little endian style (addresses in z80 are always have ; copy (HL) into DE, then exchange the two, utilising the optimised HL instructions.
; their LSB before their MSB) ; ld must be done little endian, so least significant byte first.
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
intoHL: intoHL:
push de push de
ex de, hl ld e, (hl)
call intoDE inc hl
ld d, (hl)
ex de, hl ex de, hl
pop de pop de
ret ret
intoDE:
ex de, hl
call intoHL
ex de, hl ; de preserved by intoHL, so no push/pop needed
ret
intoIX: intoIX:
push de push ix
push ix \ pop de ex (sp), hl ;swap hl with ix, on the stack
call intoDE call intoHL
push de \ pop ix ex (sp), hl ;restore hl from stack
pop de pop ix
ret ret
; add the value of A into HL ; add the value of A into HL