ack/mach/i80/libem/loi.s
1985-03-18 12:46:51 +00:00

51 lines
716 B
ArmAsm

.define .loi
! Load indirect
! Expects in de-registers: number of bytes to be loaded
! (this number should be 1 or even )
! Expects on stack: base address
! Yields on stack: result
.loi: pop h
shld .retadr
mov l,c ! free bc for scratch
mov h,b
shld .bcreg
pop h ! hl = base address
dad d ! hl = load pointer
xra a ! clear carry bit
mov a,d ! divide d by 2
rar
mov d,a
mov a,e
rar
mov e,a
jnc 1f
! if 1 byte has to be loaded only:
mov a,d
ora e
cnz eoddz ! trap if number is odd and <> 1
dcx h
mov c,m
mvi b,0
push b
jmp 2f
1: dcx h
mov b,m
dcx h
mov c,m
push b
dcx d ! is count exhausted?
mov a,d
ora e
jnz 1b
2: lhld .bcreg
mov c,l
mov b,h
lhld .retadr
pchl