.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