66 lines
637 B
ArmAsm
66 lines
637 B
ArmAsm
.define .cmu4
|
|
.sect .text
|
|
.sect .rom
|
|
.sect .data
|
|
.sect .bss
|
|
.sect .text
|
|
|
|
! 4 byte cmu and cmi routine
|
|
! parameters:
|
|
! a: 0 for cmu, 1 for cmi
|
|
! stack: operands
|
|
! de: result (out)
|
|
|
|
|
|
|
|
.cmu4:
|
|
pop ix
|
|
ld de,4
|
|
ld b,d
|
|
ld c,e
|
|
ld hl,0
|
|
add hl,sp
|
|
add hl,bc
|
|
dec hl
|
|
ld d,h
|
|
ld e,l
|
|
add hl,bc
|
|
ld (savesp),hl ! save new sp-1
|
|
or a
|
|
jr z,1f
|
|
ld a,(de)
|
|
cp (hl)
|
|
dec hl
|
|
dec de
|
|
dec bc
|
|
jr z,1f
|
|
jp p,4f
|
|
jr 6f
|
|
1:
|
|
ld a,(de)
|
|
cp (hl)
|
|
dec de
|
|
dec hl
|
|
dec bc
|
|
jr nz,2f
|
|
ld a,b
|
|
or c
|
|
jr nz,1b
|
|
ld d,a
|
|
ld e,a
|
|
jr 3f
|
|
2:
|
|
jr nc,4f
|
|
6:
|
|
ld de,1
|
|
jr 3f
|
|
4:
|
|
ld de,-1
|
|
3:
|
|
ld hl,(savesp)
|
|
inc hl
|
|
ld sp,hl
|
|
jp (ix)
|
|
.sect .data
|
|
savesp: .data2 0
|