45 lines
505 B
ArmAsm
45 lines
505 B
ArmAsm
.define .csa
|
|
|
|
! this is not a subroutine, but just a
|
|
! piece of code that computes the jump-
|
|
! address and jumps to it.
|
|
! traps if resulting address is zero
|
|
|
|
|
|
|
|
.csa:
|
|
pop ix
|
|
pop hl
|
|
push bc
|
|
ld c,(ix)
|
|
ld b,(ix+1)
|
|
ld e,(ix+2)
|
|
ld d,(ix+3)
|
|
xor a
|
|
sbc hl,de
|
|
jp m,1f
|
|
ex de,hl
|
|
ld l,(ix+4)
|
|
ld h,(ix+5)
|
|
xor a
|
|
sbc hl,de
|
|
jp m,1f
|
|
ex de,hl
|
|
add hl,hl
|
|
ld de,6
|
|
add hl,de
|
|
ex de,hl
|
|
add ix,de
|
|
ld l,(ix)
|
|
ld h,(ix+1)
|
|
ld a,h
|
|
or l
|
|
jr nz,2f
|
|
1: ld a,b
|
|
or c
|
|
jr z,.trp.z
|
|
ld l,c
|
|
ld h,b
|
|
2: pop bc
|
|
jp (hl)
|