.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
