Added ret.s
authorceriel <none@none>
Wed, 28 Jun 1989 12:40:22 +0000 (12:40 +0000)
committerceriel <none@none>
Wed, 28 Jun 1989 12:40:22 +0000 (12:40 +0000)
mach/z80/libem/LIST
mach/z80/libem/ret.s [new file with mode: 0644]

index b61d8d8..cc081f7 100644 (file)
@@ -40,3 +40,4 @@ xor.s
 nop.s
 outdec.s
 pstrng.s
+ret.s
diff --git a/mach/z80/libem/ret.s b/mach/z80/libem/ret.s
new file mode 100644 (file)
index 0000000..bbc145b
--- /dev/null
@@ -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
+