Added ret.s
This commit is contained in:
parent
7fadcacc26
commit
3aec06a088
|
@ -40,3 +40,4 @@ xor.s
|
||||||
nop.s
|
nop.s
|
||||||
outdec.s
|
outdec.s
|
||||||
pstrng.s
|
pstrng.s
|
||||||
|
ret.s
|
||||||
|
|
57
mach/z80/libem/ret.s
Normal file
57
mach/z80/libem/ret.s
Normal file
|
@ -0,0 +1,57 @@
|
||||||
|
.define .ret
|
||||||
|
.define .lfr
|
||||||
|
|
||||||
|
.sect .text
|
||||||
|
.sect .rom
|
||||||
|
.sect .data
|
||||||
|
.sect .bss
|
||||||
|
|
||||||
|
! 'ret' and 'lfr' for sizes > 4 (and <= 8)
|
||||||
|
|
||||||
|
retarea: .space 8
|
||||||
|
|
||||||
|
.sect .text
|
||||||
|
|
||||||
|
.ret:
|
||||||
|
! parameters:
|
||||||
|
! de: size in bytes
|
||||||
|
! stack: return value
|
||||||
|
|
||||||
|
pop ix ! save return address
|
||||||
|
ld hl,retarea
|
||||||
|
srl d
|
||||||
|
rr e ! divide size by 2
|
||||||
|
1:
|
||||||
|
pop bc
|
||||||
|
ld (hl), c
|
||||||
|
inc hl
|
||||||
|
ld (hl), b
|
||||||
|
inc hl
|
||||||
|
dec de
|
||||||
|
ld a,d
|
||||||
|
or e
|
||||||
|
jr nz,1b ! done?
|
||||||
|
jp (ix) ! yes, return
|
||||||
|
|
||||||
|
.lfr:
|
||||||
|
! parameters:
|
||||||
|
! de: size in bytes
|
||||||
|
! result on stack: return value
|
||||||
|
|
||||||
|
pop ix ! save return address
|
||||||
|
ld hl,retarea
|
||||||
|
add hl,de
|
||||||
|
srl d
|
||||||
|
rr e ! divide size by 2
|
||||||
|
1:
|
||||||
|
dec hl
|
||||||
|
ld b,(hl)
|
||||||
|
dec hl
|
||||||
|
ld c,(hl)
|
||||||
|
push bc
|
||||||
|
dec de
|
||||||
|
ld a,d
|
||||||
|
or e
|
||||||
|
jr nz,1b ! done?
|
||||||
|
jp (ix) ! yes, return
|
||||||
|
|
Loading…
Reference in a new issue