123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657 |
- .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
|