12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455 |
- .define .loi
- .sect .text
- .sect .rom
- .sect .data
- .sect .bss
- .sect .text
- ! 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
|