ack/mach/z80/libem/lar.s
1987-02-02 13:30:20 +00:00

55 lines
693 B
ArmAsm

.define .lar
.sect .text
.sect .rom
.sect .data
.sect .bss
.sect .text
! use .mli2
! 2-byte descriptor elements
! any size array elements
! parameters:
! on stack
! uses .mli2
! no range checking
! adapted from .aar and .los
.lar:
pop hl
pop ix
ex (sp),hl
ld c,(ix+0)
ld b,(ix+1)
xor a
sbc hl,bc
ld c,(ix+4)
ld b,(ix+5)
ex de,hl
call .mli2
pop ix
pop de
add hl,de ! address of array element
add hl,bc
dec hl ! pointer to highest byte of element
srl b
rr c
jr nc,1f
ld a,c ! skip check to save runtime
or b
jr nz,.trp.z ! size was odd but <> 1
ld c,(hl)
push bc
jp (ix)
1: ld d,(hl)
dec hl
ld e,(hl)
dec hl
push de
dec bc
ld a,b
or c
jr nz,1b
jp (ix)