
;HRTmon Amiga system monitor
;Copyright (C) 1991-1998 Alain Malek Alain.Malek@cryogen.com
;
;This program is free software; you can redistribute it and/or
;modify it under the terms of the GNU General Public License
;as published by the Free Software Foundation; either version 2
;of the License, or (at your option) any later version.
;
;This program is distributed in the hope that it will be useful,
;but WITHOUT ANY WARRANTY; without even the implied warranty of
;MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
;GNU General Public License for more details.
;
;You can find the full GNU GPL online at: http://www.gnu.org


* Beermon Disassembler modified for HRTmon
* 68000-68040/FPU/MMU

HRTeval equ -1		;use evaluate routine from HRTmon ? (for assemble)

;s
;	lea.l	$f800d2,a4
;	lea.l	destbuf(pc),a0
;	bsr	disassemble
;	rts
;
;destbuf		dcb.b 80,0
;		dc.b 0
;		even
;
;evaluate
*****************************************************************************
;-> a4=address to dis
;-> a0=ptr on dest string
;-> d0=%00000RAU
;	U=1 upper case
;	A=1 print 'd $address'
;	R=1 print indirect address
;<- d0=len of instr.

baseBMON

xcharsBMON equ 80



failBMON:	sf d7
	rts


disassemble:
	movem.l d1-d7/a0-a3/a5-a6,-(a7)	;yo, funky again...
	lea.l	baseBMON(pc),a6
	move.b	d0,modeBMON
	move.l	a4,a5
	move.l	a5,disaddrBMON
	move.l	a0,linebufBMON

	lea instrBMON(pc),a4	;a5:pc
	move.l a5,d6
dis2BMON:	moveq #xcharsBMON/4-1-1,d0		;redisBMON
	move.l	linebufBMON,a0
	move.l #"    ",d1	;fill linebufBMON
dis3BMON:	move.l d1,(a0)+
	dbf d0,dis3BMON
	move.b	#$a,(a0)+
	clr.b	(a0)+

	sf ea2ndBMON			;begin with 1st eaposBMON
	move.l d6,a5
	move.w (a5)+,d1		;instrBMON.w
dis0BMON:	move.w d1,d0
	and.w (a4)+,d0		;mask
	cmp.w (a4),d0		;instrframe
	lea 14-2(a4),a4
	bne.b dis0BMON		;scan instrBMON
	move.w 4-14(a4),d2		;info.w
	move.l d6,d0
	move.l	linebufBMON,a0
	btst	#1,modeBMON
	beq.b	.noaddress
	move.w #"d ",(a0)+
	move.b	#"$",(a0)+
	bsr.w longtoaBMON
	addq.w #1,a0
.noaddress

	lea -14+6(a4),a1
dis1BMON:	move.b (a1)+,(a0)+
	bpl.b dis1BMON
	bclr #7,-1(a0)		;end

	st d7
	move.w d2,d4
	and.w #$ff00,d4		;sizeopt
	cmp.w #s67BMON,d4
	bne.b nos67BMON
	bsr.w size67BMON
nos67BMON:	cmp.w #s9a_BMON,d4
	bne.b nos9a_BMON
	bsr.w size9a_BMON
nos9a_BMON:	cmp.w #s9aBMON,d4
	bne.b nos9aBMON
	bsr.w size9aBMON
nos9aBMON:	cmp.w #s6BMON,d4
	bne.b nos6BMON
	bsr.w size6BMON
nos6BMON:	cmp.w #s8BMON,d4
	bne.b nos8BMON
	bsr.w size8BMON
nos8BMON:	cmp.w #stabBMON,d4
	bne.b nostabBMON
	bsr.w opsposBMON
nostabBMON:	;cmp.w #snopBMON,d4
	;bne.b nosnopBMON
nosnopBMON:
	lea disoffsBMON(pc),a1
	ext.w d2		;clr sizeopt
	add.w d2,d2
	move.w (a1,d2.w),d2
	move.l d6,-(a7)
	jsr dissubsBMON(pc,d2.w)		;no d7,a4
	move.l (a7)+,d6
	tst.b d7
	beq.w dis2BMON

	move.l	a5,a4				;next instr. addr in a4
	sub.l	disaddrBMON,a5
	move.l	a5,d0				;d0=len of instr.

	btst	#0,modeBMON		;upper case ?
	beq.b	.end
	move.l	linebufBMON,a0
.up	move.b	(a0)+,d1
	beq.b	.end
	cmp.b	#'a',d1
	blt.b	.up
	cmp.b	#'z',d1
	bgt.b	.up
	sub.b	#'a'-'A',d1
	move.b	d1,-1(a0)
	bra.b	.up
.end	movem.l (a7)+,d1-d7/a0-a3/a5-a6
	rts

dissubsBMON:
opfailBMON=*-dissubsBMON
	moveq #-1,d0
opf0BMON:	move.w d0,$dff180
	dbf d0,opf0BMON
noopsBMON=*-dissubsBMON
	rts

dcwopBMON=*-dissubsBMON
	move.w d1,d0
	bra.w wordtoa_BMON

eatoccrBMON=*-dissubsBMON
	sf imsizeBMON
	bsr.w doeaBMON
	bra.w optoccrBMON

eatosrBMON=*-dissubsBMON
	move.b #1,imsizeBMON
	bsr.w doeaBMON
	bra.w optosrBMON

ccrtoeaBMON=*-dissubsBMON
	bsr.w opccrBMON
	bra.b dissreaBMON
srtoeaBMON=*-dissubsBMON
	bsr.w opsrBMON
dissreaBMON:bra.w dotoeaBMON

fpufmt2BMON:dc.b "lsxpwdbp"
dfmvmemBMON:lea movetxtBMON+1(pc),a1	;fmove
	bsr txttobufBMON
	move.b #".",(a0)+
	move.w d6,d0
	rol.w #6,d0
	and.w #%111,d0
	move.b (fpufmt2BMON,pc,d0.w),(a0)+
	bsr opsposBMON
	moveq #%111000,d2
	and.w d1,d2
	bne.b no2dregBMON		;dn ?
	tst.b d0	;%000.l
	beq.b no2dregBMON
	subq.b #1,d0	;%001.sBMON
	beq.b no2dregBMON	
	subq.b #3,d0	;%100.w
	beq.b no2dregBMON
	subq.b #2,d0	;%110.b
	bne.b dmvfailBMON
no2dregBMON:cmp.b #%001000,d2	;an ?
	beq.b dmvfailBMON
	moveq #%01111111,d5
	and.w d6,d5		;k factor
	moveq #1,d3		;static k
	subq.b #%011,d0		;p{#k}
	beq.b dfmvk0BMON
	moveq #2,d3		;dynamic k
	subq.b #%111-%011,d0	;p{dn}
	beq.b dfmvk0BMON
	tst.b d5
	bne.b dmvfailBMON		;k factor>0 ?
	moveq #0,d3		;no k factor
dfmvk0BMON:	move.w d6,d0
	lsr.w #7,d0
	and.w #%111,d0
	bsr.w dfp5BMON		;fpn
	bsr dotoeaBMON
	subq.b #1,d3		;k factor ?
	bmi.b dfmvk1BMON
	move.b #"{",(a0)+
	tst.b d3		;static ?
	beq.b dfmvkp0BMON
	moveq #%1111,d0
	and.b d5,d0
	bne.b dmvfailBMON		;unused bitsBMON
	move.b #"d",(a0)+
	lsr.b #4,d5 
	bra.b dfmvkpBMON
dfmvkp0BMON:move.b #"#",(a0)+
	btst #6,d5
	beq.b dfmvkpBMON
	bset #7,d5
	neg.b d5
	move.b #"-",(a0)+
dfmvkpBMON:	move.l d5,d0
	bsr.w hextodBMON
	move.b #"}",(a0)+
dfmvk1BMON:	rts
dmvfailBMON:bra failBMON

dfpuBMON=*-dissubsBMON
	move.w (a5)+,d6		;fpu extension word
	move.w #$e000,d0
	and.w d6,d0
	cmp.w #$6000,d0
	beq.w dfmvmemBMON
	move.w #$a000,d0
	and.w d6,d0
	bne.b dffailBMON
	btst #14,d6		;r/m
	bne.b dfp0BMON
	tst.b d1		;ea field=0?
	bne.b dffailBMON
dfp0BMON:	lea fpuinstBMON(pc),a1
	moveq #%01111111,d0
	and.w d6,d0
dfp2BMON:	move.b (a1)+,d2
	bclr #7,d2
	sne d3		;0:fp0,ff:fp0,fp0
	moveq #%01111000,d4
	and.b d6,d4
	cmp.b #%00110000,d4	;sincosBMON
	seq d4
	beq.b dfp1BMON
	cmp.b d2,d0
	beq.b dfp1BMON
	addq.w #6,a1
	tst.b (a1)
	bne.b dfp2BMON
dffailBMON:	sf d7
	rts
fpufmtBMON:	dc.b "lsxpwdb*"
fpuimsBMON:	dc.b %010,%010,%110,%110,%001,%100,%000,-1
dfp1BMON:	bsr.w txttobufBMON
	move.b #".",(a0)+
	move.w d6,d0
	rol.w #6,d0
	and.w #%111,d0
	btst #14,d6
	beq.b dfp3BMON
	cmp.w #%111,d0
	beq.b dffailBMON
	move.b (fpufmtBMON,pc,d0),(a0)+
	move.b (fpuimsBMON,pc,d0.w),imsizeBMON
	bsr.w opsposBMON
	moveq #%111000,d2
	and.w d1,d2	;src:datareg?
	bne.b dfp8BMON
	tst.b d0	;%000.l
	beq.b dfp8BMON
	subq.b #1,d0	;%001.sBMON
	beq.b dfp8BMON	
	subq.b #3,d0	;%100.w
	beq.b dfp8BMON
	subq.b #2,d0	;%110.b
	bne.b dffailBMON
dfp8BMON:	cmp.b #%001000,d2	;an
	beq.b dffailBMON
	bsr.w doeaBMON	;imsizeBMON!!!
	st d0		;dest fpureg
	sf d3
	bra.b dfp6BMON
dfp3BMON:	move.b #"x",(a0)+
	bsr.w opsposBMON
	bsr.b dfp5BMON
dfp6BMON:	moveq #%01111111,d2
	and.w d6,d2
	cmp.b #%00111010,d2
	bne.b dftstBMON
	and.w #$0380,d6		;ftst:dst=0
	bne.w failBMON
	rts
dftstBMON:	tst.b d4
	beq.b dsncsBMON
	moveq #%111,d2
	and.w d6,d2
	bsr.b dfp7BMON
	move.b #":",(a0)+
	move.w d6,d0
	lsr.w #7,d0
	and.w #%111,d0
	bra.b dfp5BMON
dsncsBMON:	move.w d6,d2
	lsr.w #7,d2
	and.w #%111,d2
	tst.b d3
	bne.b dfp7BMON	;show fp0,fp0
	cmp.b d0,d2
	beq.b dfp4BMON
dfp7BMON:	move.w d2,d0
	move.b #",",(a0)+
dfp5BMON:	move.b #"f",(a0)+
	move.b #"p",(a0)+
	moveq #"0",d2
	add.b d0,d2
	move.b d2,(a0)+	
dfp4BMON:	rts			

dfmovemxBMON=*-dissubsBMON
	move.w #$c700,d0
	and.w (a5),d0
	cmp.w #$c000,d0		;fmovem fpx?
	bne.w failBMON
	move.w (a5)+,d3
	btst #13,d3
	bne.b dfmovm1BMON
	bsr doeaBMON
	move.b #",",(a0)+
	bra dofprxBMON
dfmovm1BMON:bsr dofprxBMON
	bra dotoeaBMON
dfmovemlBMON=*-dissubsBMON
	st d5
	bra.b dfmovemBMON

dfmovelBMON=*-dissubsBMON
	sf d5			;no fmovem
dfmovemBMON:move.w #$c3ff,d0
	and.w (a5),d0
	cmp.w #$8000,d0
	bne.w failBMON
	move.b #%010,imsizeBMON	;long
	move.w (a5)+,d6
	eor.w d0,d6
	btst #10,d6
	sne d4
	btst #11,d6
	sne d0
	add.b d0,d4
	btst #12,d6
	sne d0
	add.b d0,d4		;singleflag:0:0,-1:1,-2:2,-3:3
	beq.w failBMON		;0 fpcrBMON
	moveq #%111000,d0
	and.w d1,d0		;Dn?
	bne.b nofdregBMON
	cmp.b #-1,d4		;1 fpcrBMON?
	bne.w failBMON
nofdregBMON:subq.w #%001000,d0	;An?
	bne.b nofaregBMON
	cmp.b #-1,d4		;1 fpcrBMON?
	bne.w failBMON	
	btst #10,d6		;fpcrBMON=fpiarBMON?
	beq.w failBMON
nofaregBMON:bclr #13,d6
	beq.b tofpcrBMON
	bsr.b dofpcrBMON
	bra dotoeaBMON		
tofpcrBMON:	bsr doeaBMON
	move.b #",",(a0)+
dofpcrBMON:	move.b #"f",(a0)+
	move.b #"p",(a0)+
	moveq #"c",d0
	bclr #12,d6
	bne.b fpcr0BMON
	moveq #"s",d0
	bclr #11,d6
	bne.b fpcr0BMON
	move.b #"i",(a0)+
	moveq #"a",d0
	bclr #10,d6
	beq.w failBMON
fpcr0BMON:	move.b d0,(a0)+
	move.b #"r",(a0)+
	tst.w d6
	beq.b fpsinglBMON
	tst.b d5		;fmovem?
	beq.w failBMON
	move.b #"/",(a0)+
	bra.b dofpcrBMON
fpsinglBMON:rts

dfmovecrBMON=*-dissubsBMON
	move.w (a5),d0
	and.w #$fc40,d0
	cmp.w #$5c00,d0	
	bne.w failBMON
	moveq #$003f,d0
	and.w (a5),d0
	move.w d0,d1
	beq.b dfmk1xBMON
	cmp.b #$30,d0
	bcc.w dfmk3xBMON
	cmp.b #$0f,d0
	bhi.w failBMON
	cmp.b #$0b,d0
	bcs.w failBMON
	sub.b #$0b-1,d1
	bra.b dfmk1xBMON
dfmk3xBMON:	sub.b #$30-($0f-$0b)-2,d1
dfmk1xBMON:	move.b #"#",(a0)+
	bsr.w hextoa_BMON
	move.w (a5)+,d0
	bsr.w optofpx79BMON
	move.l	linebufBMON,a0
	lea.l	40(a0),a0
	move.b #";",(a0)+
	lea fmconstBMON(pc),a1
	cmp.b #10,d1	;Pi..100
	bls.b skipcrBMON
	bsr.b dfmk0BMON
	moveq #0,d0
	sub.b #9,d1	;1E4..1E4096
	bset d1,d0
	bra.w hextodBMON
skipcrBMON:	tst.b (a1)+
	bpl.b skipcrBMON
	dbf d1,skipcrBMON
dfmk0BMON:	bra.w txttobufBMON
	
dpccodewordrelBMON=*-dissubsBMON
	moveq #-16,d0		;$fff0 16 mmu ccodesBMON
	and.w (a5),d0
	bne.w failBMON
	move.w (a5)+,d0
	bsr.w dopccBMON
	bra.b dfcc0BMON
dfccodewordrelBMON=*-dissubsBMON
	moveq #-32,d0		;$ffe0 32 fpu ccodesBMON
	and.w (a5),d0
	bne.w failBMON
	move.w (a5)+,d0
	bsr.w dofccBMON
dfcc0BMON:	bsr.w opsposBMON
	bsr.w opdx02BMON
	move.b #",",(a0)+
	move.w (a5)+,d0
	lea -2(a5,d0.w),a1	;instrlen:4bytesBMON (oma bug)
	bra.b wbx2BMON
ccodewordrelBMON=*-dissubsBMON
	move.w d1,d0
	bsr.w doccBMON
wbx4BMON:	bsr.w opsposBMON
	bsr.w opdx02BMON
	move.b #",",(a0)+
	bra.b wbx3BMON
wordccBMON=*-dissubsBMON
	move.w d1,d0
	bsr.w doccBMON
wordcc0BMON:bsr.w chr2bufBMON
	dc.w ".w"		;bxx.w
	bsr.w opsposBMON
wordbxxBMON=*-dissubsBMON
wbx3BMON:	move.w (a5)+,d0
	lea -2(a5,d0.w),a1
wbx2BMON:	move.l a1,d0
	bra.w hextoa_BMON			;bra.w longtoa_BMON
longccBMON=*-dissubsBMON
	move.w d1,d0
	bsr.w doccBMON
longcc0BMON:bsr.w chr2bufBMON
	dc.w ".l"		;bxx.l
	bsr.w opsposBMON
longbxxBMON=*-dissubsBMON
	move.l (a5)+,d0
	lea -4(a5,d0.l),a1
	bra.b wbx2BMON
	
shortccBMON=*-dissubsBMON
	move.w d1,d0
	bsr.w doccBMON
	bsr.w chr2bufBMON
	dc.w ".b"
	bsr.w opsposBMON
shortbxxBMON=*-dissubsBMON
	move.b d1,d0
	ext.w d0
	lea (a5,d0.w),a1
	bra.b wbx2BMON

dbrapccBMON=*-dissubsBMON
	move.w d1,d0
	bsr.w dopccBMON
	bra.b dbra0BMON
dbrafccBMON=*-dissubsBMON
	move.w d1,d0
	bsr.w dofccBMON
dbra0BMON:	btst #6,d1
	beq.b wordcc0BMON
	bra.b longcc0BMON
		
eatoaxBMON=*-dissubsBMON
	bsr.w doeaBMON
	bra.w optoax9bBMON

ea2todxBMON=*-dissubsBMON
	move.b #2,imsizeBMON	;68020:chk.l #i.l,<ea>
	bra.b ea2dxBMON
eatodxBMON=*-dissubsBMON
	move.b #1,imsizeBMON
ea2dxBMON:
size67eatodxBMON=*-dissubsBMON
	bsr.w doeaBMON
	bra.w optodx9bBMON

dxtoeaBMON=*-dissubsBMON		;no im possible
	bsr.w opdx9bBMON
	move.w #$f1c0,d0
	and.w d1,d0
	cmp.w #$0100,d0		;btst: pcrel allowed
	beq.b dxtea0BMON
	bra.w dotoeaBMON

dxtea0BMON:	move.b #",",(a0)+
	bra.w doeaBMON

iwordtoccrBMON=*-dissubsBMON
	move.b #"#",(a0)+		;8/16?
	moveq #0,d0
	move.b (a5)+,d0
	bne.w failBMON
	move.b (a5)+,d0
	bsr.w hextoa_BMON			;bsr.w bytetoa_BMON
	bra.w optoccrBMON

iwordtosrBMON=*-dissubsBMON
	bsr.b iwrdBMON
	bra.w optosrBMON

toiwordBMON:move.b #",",(a0)+
iwordBMON=*-dissubsBMON
iwrdBMON:	move.b #"#",(a0)+
	moveq #0,d0
	move.w (a5)+,d0
	bra.w hextoa_BMON			;bra.w wordtoa_BMON

dlpstopBMON=*-dissubsBMON
	cmp.w #$01c0,(a5)+
	beq.b iwrdBMON
	bra.w failBMON  	
dtblBMON=*-dissubsBMON
	move.w (a5),d0
	and.w #$8238,d0
	bne.w failBMON
	move.w (a5),d0
	moveq #"s",d3
	btst #11,d0
	bne.b dtblsBMON
	moveq #"u",d3
dtblsBMON:	move.b d3,(a0)+
	btst #10,d0
	beq.b dtblrBMON
	move.b #"n",(a0)+
dtblrBMON:	bsr.w siz67d0BMON		;setsBMON imsizeBMON,del:d0
	move.w (a5)+,d3
	btst #8,d3		;datareg|eamode
	beq.b dtbldatBMON
	moveq #%111111,d0	
	and.w d3,d0
	bne.w failBMON	
	bsr.w doeaBMON
	bra.b dtblregBMON	
dtbldatBMON:bsr.w opdx02BMON
	move.b #":",(a0)+
	move.b #"d",(a0)+
	move.w d3,d0
	bsr.w op0xx02BMON	
dtblregBMON:move.w d3,d0
	rol.w #4,d0
	move.b #",",(a0)+
	move.b #"d",(a0)+
	bra.w op0xx02BMON

inibtoeaBMON=*-dissubsBMON
	move.b #"#",(a0)+
	move.w (a5)+,d0
	and.l #%11111,d0		;#0-31(7)
	bsr.w hextodBMON
	move.w #$ffc0,d0
	and.w d1,d0
	cmp.w #$0800,d0		;btst: pcrel allowed
	beq.b inibea0BMON
	bra.w dotoeaBMON

inibea0BMON:move.b #",",(a0)+
	bra.w doeaBMON
dpccodeeaBMON=*-dissubsBMON
	moveq #-16,d0
	and.w (a5),d0
	bne.w failBMON
	move.w (a5)+,d0
	bsr.w dopccBMON
	bra.b ccode0BMON
fccodeeaBMON=*-dissubsBMON
	moveq #-32,d0
	and.w (a5),d0
	bne.w failBMON
	move.w (a5)+,d0
	bsr.w dofccBMON
	bra.b ccode0BMON
ccodeeaBMON=*-dissubsBMON
	move.w d1,d0
	bsr.w doccBMON
ccode0BMON:	bsr.w opsposBMON
srceaBMON=*-dissubsBMON
	bra.w doeaBMON
imovesBMON=*-dissubsBMON
	move.w (a5)+,d3
	move.w #$07ff,d0
	and.w d3,d0
	bne.w failBMON
	bclr #11,d3
	bne.b mvsrxBMON
	bsr.w doeaBMON
	move.b #",",(a0)+
	bra.w mvcrxcfBMON
mvsrxBMON:	bsr.w mvcrxcfBMON
	bra.w dotoeaBMON		

size67ixtoeaBMON=*-dissubsBMON
	bsr.w immediateBMON
	bra.w dotoeaBMON

size67i9btoeaBMON=*-dissubsBMON
	bsr.w opi9bBMON
	bra.w dotoeaBMON

size67x9btodx02BMON=*-dissubsBMON
	btst #5,d1
	beq.b shi9bBMON
	bsr.w opdx9bBMON
	bra.b shdx9bBMON
shi9bBMON:	bsr.w opi9bBMON
shdx9bBMON:	bra.w optodx02BMON

itrapBMON=*-dissubsBMON
	move.b #"#",(a0)+
	move.w d1,d0
	bra.w nibtodBMON

srcdx02BMON=*-dissubsBMON
	bra.w opdx02BMON

imuspBMON=*-dissubsBMON
	btst #3,d1
	beq.b imusp0BMON
	bsr.w opuspBMON
	bra.w optoax02BMON
imusp0BMON:	bsr.w opax02BMON
	bra.w optouspBMON

dpmovefdBMON=*-dissubsBMON			;68030mmu only
	move.w (a5),d0
	cmp.w #$4100,d0			;40:tc
	beq.w dpmvfdBMON
	eor.w #%0000100100000000,d0	;08:tt0,0c:tt1,48:srp,4c:crp
	and.w #%1011101111111111,d0
	bne.w failBMON
	bra.b dpmvfdBMON	;bit9=0
dpmoveBMON=*-dissubsBMON
	move.w #$01ff,d0
	and.w (a5),d0
	bne.w failBMON
dpmvfdBMON:	move.w (a5)+,d3
	bclr #8,d3	;pmovefd bit
	bclr #9,d3
	bne.b pmvtoeaBMON
	bsr.w doeaBMON
	move.b #",",(a0)+
	bra.b pmvregBMON
pmvtoeaBMON:bsr.b pmvregBMON
	bra.w dotoeaBMON
pmvregBMON:	lea pregsBMON(pc),a1
	lsr.w #8,d3
pmvlpBMON:	move.b (a1)+,d0
	beq.w failBMON
	cmp.b d3,d0
	beq.b pmvfndBMON
pmvscanBMON:btst #7,(a1)+
	beq.b pmvscanBMON
	bra.b pmvlpBMON
pmvfndBMON:	bra.w txttobufBMON
didbcacBMON=*-dissubsBMON	;68040
didb0BMON:	lsr.w #6,d1
	moveq #3,d0
	and.w d1,d0
	move.b idctxBMON(pc,d0.w),(a0)+
	move.b #"c",(a0)+
	rts	
idctxBMON:	dc.l "ndib"	;nc,dc,ic,bc
didbindBMON=*-dissubsBMON
	move.w d1,-(a7)
	bsr.b didb0BMON
	move.w (a7)+,d1
	bra.w toaindirectBMON
dpflush40BMON=*-dissubsBMON		;pflush,ptestr,ptestw
	bra.w aindirectBMON

imovecBMON=*-dissubsBMON
	move.w (a5)+,d3
	btst #0,d1
	bne.b toctrlBMON
	bsr.b mvcregsBMON
	move.b #",",(a0)+
	bra.b mvcrxcfBMON
toctrlBMON:	bsr.b mvcrxcfBMON
	move.b #",",(a0)+
mvcregsBMON:lea cregsBMON(pc),a1
	move.w d3,d1
	and.w #$0fff,d1
nxtctrlBMON:cmp.w (a1),d1
	beq.b mvcctrlBMON
	tst.w (a1)
	addq.w #6,a1
	bne.b nxtctrlBMON	
	bra.w failBMON
mvcctrlBMON:addq.w #2,a1
	move.b (a1)+,(a0)+
	move.b (a1)+,(a0)+
	tst.b (a1)
	beq.b ctrl3chBMON
	move.b (a1)+,(a0)+
	tst.b (a1)
	beq.b ctrl3chBMON
	move.b (a1),(a0)+
ctrl3chBMON:rts
mvcrxcfBMON:move.w d3,d0		;movec,movesBMON
dbfiregBMON:and.w #$f000,d0		;bitfield
	rol.w #4,d0
dbytregBMON:add.b #"0",d0
	move.b #"a",(a0)+
	bclr #3,d0
	bne.b mvcaxBMON 
	addq.b #"d"-"a",-1(a0)
mvcaxBMON:	move.b d0,(a0)+
	rts
dbfieldtodxBMON=*-dissubsBMON
	move.w (a5)+,d2
	btst #15,d2
	bne.w failBMON
	bsr.b dbfi3BMON
	move.b #",",(a0)+
	move.w d2,d0
	bra.b dbfiregBMON
ddxtobfieldBMON=*-dissubsBMON
	move.w (a5),d0
	btst #15,d0
	bne.w failBMON
	bsr.b dbfiregBMON
	move.b #",",(a0)+
	move.w (a5)+,d2
	bra.b dbfi3BMON
dbfieldBMON=*-dissubsBMON
	move.w (a5)+,d2
	move.w d2,d0
	and.w #$f000,d0
	bne.w failBMON
dbfi3BMON:	bsr.w doeaBMON
	move.b #"{",(a0)+
	move.w d2,d0
	lsr.w #6,d0
	bsr.b dbfi2BMON
	move.b #":",(a0)+
	move.w d2,d0
	bsr.b dbfi2BMON
	move.b #"}",(a0)+
	rts
dbfi2BMON:	btst #11-6,d0
	bne.b dbfi1BMON
	and.b #%11111,d0
	bne.b no32BMON
	moveq #32,d0
no32BMON:	bra.w bytetodBMON	
dbfi1BMON:	btst #10-6,d0		;y00xxxy00xxx
	bne.w failBMON
	btst #9-6,d0
	bne.w failBMON
	move.b #"d",(a0)+
	and.b #%111,d0
	add.b #"0",d0
	move.b d0,(a0)+
	rts
dbkptBMON=*-dissubsBMON
	move.b #"#",(a0)+
	bra.w opxx02BMON
dpackBMON=*-dissubsBMON
	btst #3,d1
	beq.b dpadxBMON
	bsr.w chr2bufBMON
	dc.w "-("
	bsr.w opax02BMON
	bsr.w chr4bufBMON
	dc.l "),-("
	bsr.w opax9bBMON
	move.b #")",(a0)+
	bra.b dpad0BMON
dpadxBMON:	bsr.w opdx02BMON
	bsr.w optodx9bBMON
dpad0BMON:	bra.w toiwordBMON
dmov16BMON=*-dissubsBMON
	move.w (a5),d2
	and.w #$8fff,d2	
	cmp.w #$8000,d2
	bne.w failBMON
	bsr.w aindirectpostBMON
	move.w (a5)+,d1
	rol.w #4,d1
	bra.w toaindirectpostBMON
dmov162BMON=*-dissubsBMON
	moveq #%010000,d2	;(ax)
	bclr #4,d1
	bne.b dmov1BMON
	moveq #%011000,d2	;(ax)+
dmov1BMON:	bclr #3,d1
	beq.b dmov0BMON
	bsr.b dmov2BMON
	or.w d2,d1
	bra.w dotoeaBMON
dmov0BMON:	or.w d2,d1
	bsr.w doeaBMON
	move.b #",",(a0)+
dmov2BMON:	bra.w abslongBMON
	
imoveBMON=*-dissubsBMON
	move.w d1,d0
	and.w #%0011000000000000,d0
	rol.w #4,d0
	bne.b imo0BMON
	sf d7
	rts
imo0BMON:	lea sizemovBMON(pc),a1
	move.b (a1,d0.w),(a0)+
	move.b 4(a1,d0.w),imsizeBMON

	bsr.w opsposBMON
	bsr.w doeaBMON

	move.w d1,d0
	rol.w #7,d0
	and.w #%111,d0
	move.w d1,d3
	lsr.w #3,d3
	and.w #%111000,d3
	or.w d3,d0

	move.w d0,d1
	bra.w dotoeaBMON

imoveqBMON=*-dissubsBMON
	move.b #"#",(a0)+
	moveq #0,d0
	move.b d1,d0
	bsr.w hextoa_BMON			;bsr.w bytetoa_BMON
	bra.w optodx9bBMON	

icallmBMON=*-dissubsBMON
	tst.b (a5)
	bne.w failBMON
	move.w d1,-(a7)
	move.b #"#",(a0)+
	moveq #0,d0
	move.b (a5)+,d0
	bne.w failBMON
	move.b (a5)+,d0
	bsr.w hextoa_BMON			;bsr.w bytetoa_BMON
	move.w (a7)+,d1
	bra.w dotoeaBMON

dcasBMON=*-dissubsBMON
	bsr.w opsposBMON
	move.w (a5),d0
	and.w #$0e38,d0
	bne.w failBMON
	move.w (a5),d0
	move.b #"d",(a0)+
	bsr.w op0xx02BMON
	move.b #",",(a0)+
	move.w (a5)+,d0
	lsr.w #6,d0
	move.b #"d",(a0)+
	bsr.w op0xx02BMON
	bra.w dotoeaBMON

dcas2BMON=*-dissubsBMON
	moveq #"w",d2
	btst #9,d1
	beq.b dca0BMON
	moveq #"l",d2
dca0BMON:	move.b d2,(a0)+
	bsr.w opsposBMON
	move.l (a5),d2
	and.l #$0e380e38,d2
	bne.w failBMON
	move.l (a5),d2
	bsr.b casopBMON
	move.b #",",(a0)+
	lsr.l #6,d2
	bsr.b casopBMON
	bsr.w chr2bufBMON
	dc.w ",("
	move.w (a5)+,d0
	bsr.w dbfiregBMON
	bsr.w chr3bufBMON
	dc.l "):("<<8
	move.w (a5)+,d0
	bsr.w dbfiregBMON
	move.b #")",(a0)+
	rts	
casopBMON:	move.l d2,d0
	swap d0
	move.b #"d",(a0)+
	bsr.w op0xx02BMON
	move.w d2,d0
	bsr.w chr2bufBMON
	dc.w ":d"
	bra.w op0xx02BMON

dchk2BMON=*-dissubsBMON
	move.w (a5)+,d2
	btst #11,d2
	beq.w failBMON
	bra.b dchkcmpBMON
dcmp2BMON=*-dissubsBMON
	move.w (a5)+,d2
	btst #11,d2
	bne.w failBMON
dchkcmpBMON:bsr.w doeaBMON
	move.b #",",(a0)+
	move.w d2,d0
	bra.w dbfiregBMON

drtmBMON=*-dissubsBMON
	moveq #$0f,d0
	and.w d1,d0
	bra.w dbytregBMON

dtpccsizeBMON=*-dissubsBMON
	move.w d1,d0
	bsr.w doccBMON
dtpc2BMON:	move.b #".",(a0)+
	moveq #"w",d0
	btst #0,d1
	beq.b dtpc1BMON
	moveq #"l",d0
dtpc1BMON:	move.b d0,(a0)+
	bsr.w opsposBMON
	move.b #"#",(a0)+
	moveq #0,d0
	btst d0,d1
	bne.b dtpc0BMON
	move.w (a5)+,d0
	bra.w hextoa_BMON			;bra.w wordtoa_BMON
dtpc0BMON:	move.l (a5)+,d0
	bra.w hextoa_BMON			;bra.w longtoa_BMON
dtpccBMON=*-dissubsBMON
	move.w d1,d0
	bra.w doccBMON
dtpfccsizeBMON=*-dissubsBMON
	bsr.b dtpfcc0BMON
	bra.b dtpc2BMON
dtpfccBMON=*-dissubsBMON
dtpfcc0BMON:moveq #-32,d0		;$ffe0	;32 fpu ccodesBMON
	and.w (a5),d0
	bne.w failBMON
	move.w (a5)+,d0
	bra.w dofccBMON
dtppccsizeBMON=*-dissubsBMON
	bsr.b dtppcc0BMON
	bra.b dtpc2BMON
dtppccBMON=*-dissubsBMON
dtppcc0BMON:moveq #-16,d0		;$fff0 ;16 mmu ccodesBMON
	and.w (a5),d0
	bne.w failBMON
	move.w (a5)+,d0
	bra.w dopccBMON

dfnopBMON=*-dissubsBMON
	tst.w (a5)+		;4byte command
	seq d7
	rts
dpvalidBMON=*-dissubsBMON
	moveq #-8,d0
	and.w (a5),d0
	cmp.w #$2c00,d0
	bne.w failBMON
	move.w (a5)+,d0
	move.b #"a",(a0)+
	bsr.w op0xx02BMON
	bra.w dotoeaBMON

dpflushaBMON=*-dissubsBMON
	cmp.w #$2400,(a5)+
	seq d7
	rts
dpflushrBMON=*-dissubsBMON
	cmp.w #$a000,(a5)+
	bne.w failBMON
	bra.w doeaBMON
dpflushsBMON=*-dissubsBMON
	cmp.b #$34,(a5)
	beq.b dpfl4BMON
dpfl5BMON:	bra.w failBMON
dpflushBMON=*-dissubsBMON
	cmp.b #$30,(a5)
	bne.b dpfl5BMON
dpfl4BMON:	move.w (a5)+,d0
	moveq #%00011000,d1
	and.w d0,d1
	bne.b dpfl1BMON
	moveq #%00000111,d1
	moveq #"s",d2
	and.w d0,d1
	beq.b dpfl2BMON
	moveq #"d",d2
	subq.b #1,d1
	bne.w failBMON
dpfl2BMON:	move.b d2,(a0)+
	bsr.w chr2bufBMON
	dc.w "fc"
	bra.b dpfl3BMON
dpfl1BMON:	cmp.w #%00011000,d1	;illegal
	beq.w failBMON
	moveq #"#",d1
	bclr #3,d0	
	beq.b dpfl0BMON
	moveq #"d",d1
dpfl0BMON:	move.b d1,(a0)+
	bsr.w nibtoaBMON
dpfl3BMON:	bsr.w chr2bufBMON
	dc.w ",#"
	lsr.w #5,d0
	bra.w op0xx02BMON
dploadBMON=*-dissubsBMON
	move.w (a5),d0
	and.w #$fdf8,d0
	cmp.w #$2010,d0
	bne.w failBMON
dpte0BMON:	move.w (a5)+,d0
	move.b #"r",(a0)
	btst #9,d0
	bne.b dplo0BMON
	addq.b #"w"-"r",(a0)
dplo0BMON:	bsr.w opsposBMON
	move.b #"#",(a0)+
	bsr.w nibtoaBMON
	bra.w dotoeaBMON
dptestBMON=*-dissubsBMON
	move.w (a5),d0
	and.w #$e118,d0
	cmp.w #$8110,d0
	bne.w failBMON
	move.w (a5),d2
	bsr.b dpte0BMON
	bsr.w chr2bufBMON
	dc.w ",#"
	move.w d2,d0
	rol.w #6,d0
	moveq #%111,d2
	and.b d0,d2
	beq.w failBMON	;level 0
	bsr.w nibtoaBMON
	bsr.w chr2bufBMON
	dc.w ",a"
	rol.w #5,d0
	bclr #3,d0
	bra.w nibtoaBMON

ddivsllBMON=*-dissubsBMON
	move.w (a5)+,d2
	bchg #10,d2		;dn:dm mode,set g=1
	bne.w failBMON	
	bsr.b dmul5BMON
	bra.b ddivlBMON
ddivullBMON=*-dissubsBMON
	move.w (a5)+,d2
	bchg #10,d2		;dn:dm mode,set g=1
	bne.w failBMON	
	bsr.b dmul4BMON
ddivlBMON:	sub.b d2,d1
	and.b #%111,d1		;dm=dn
	beq.w failBMON
	rts
dmulslBMON=*-dissubsBMON
dmul3BMON:	move.w (a5)+,d2
dmul5BMON:	btst #11,d2
	beq.w failBMON
	bra.b dmul1BMON
dmululBMON=*-dissubsBMON
dmul2BMON:	move.w (a5)+,d2
dmul4BMON:	btst #11,d2
	bne.w failBMON
dmul1BMON:	move.w #$83f8,d0
	and.w d2,d0
	bne.w failBMON
	move.b #%10,imsizeBMON	;longwordsBMON
	bsr.w doeaBMON
	move.b #",",(a0)+
	move.w d2,d1
	btst #10,d2
	beq.b dmul0BMON
	bsr.w opdx02BMON
	move.b #":",(a0)+
	rol.w #4,d1
	bra.w opdx02BMON

dmul0BMON:	rol.w #4,d1
	bsr.w opdx02BMON
	sub.b d2,d1
	and.b #%111,d1		;mulxl ea,dn:dm=dn	
	bne.w failBMON
	rts

icmpmBMON=*-dissubsBMON
	bsr.w aindirectpostBMON
	rol.w #7,d1		;(ax)+
	bra.w toaindirectpostBMON

xbcdBMON=*-dissubsBMON
	bclr #14,d1
	bclr #3,d1		;dx
	beq.b xbcdxBMON	
	bset #5,d1		;-(ax)
	bset #14,d1
xbcdxBMON:	bsr.w doeaBMON		;no im possible
	rol.w #7,d1
	bra.w dotoeaBMON

size67adsbxBMON=*-dissubsBMON
	bclr #14,d1
	bclr #12,d1
	bclr #3,d1		;dx
	beq.b adsbxdxBMON
	bset #14,d1		;-(ax)
	bset #5,d1
adsbxdxBMON:bsr.w doeaBMON
	rol.w #7,d1
	bra.w dotoeaBMON	

size6movepBMON=*-dissubsBMON
	bset #5,d1		;d(ax)
	btst #7,d1
	beq.b mptodxBMON
	bsr.w opdx9bBMON
	bra.w dotoeaBMON
mptodxBMON:	bsr.w doeaBMON
	bra.w optodx9bBMON

imovemBMON=*-dissubsBMON
	move.w (a5)+,d3		;regbitsBMON
	btst #10,d1		;dir
	bne.b torxBMON
	bsr.w dorxBMON
	bra.w dotoeaBMON
torxBMON:	bsr.w doeaBMON
	move.b #",",(a0)+
	bra.w dorxBMON

dx9btodx02BMON=*-dissubsBMON
	bsr.w opdx9bBMON
	bra.w optodx02BMON
ax9btoax02BMON=*-dissubsBMON
	bsr.w opax9bBMON
	bra.w optoax02BMON
dx9btoax02BMON=*-dissubsBMON
	bsr.w opdx9bBMON
	bra.w optoax02BMON

dlinklgBMON=*-dissubsBMON
	bsr.b iunl0BMON
	bsr.w chr2bufBMON
	dc.w ",#"
	bra.w dtpc0BMON
ilinkBMON=*-dissubsBMON
	bsr.b iunl0BMON
	bra.w toiwordBMON
iunlkBMON=*-dissubsBMON
iunl0BMON:	bra.w opax02BMON

size8eatoax9bBMON=*-dissubsBMON
	bsr.w doeaBMON
	bra.w optoax9bBMON

size8BMON:	btst #8,d1
	beq.b siz60BMON
	bra.b siz61BMON
size6BMON:	btst #6,d1
	bne.b siz61BMON
siz60BMON:	moveq #"w",d0
	move.b #1,imsizeBMON
	bra.b siz62BMON
siz61BMON:	moveq #"l",d0
	move.b #2,imsizeBMON
siz62BMON:	move.b #".",(a0)+
	move.b d0,(a0)+
	bra.b opsposBMON
size9a_BMON:move.w d1,d0			;01.b,10.w,11.l,00.*
	lsr.w #3,d0
	sub.w #%01000000,d0	
	bra.b si9aBMON
size9aBMON:	move.w d1,d0			;00.b,01.w,10.l,11.*
	lsr.w #3,d0
	bra.b si9aBMON
size67BMON:	move.w d1,d0
siz67d0BMON:
si9aBMON:	and.w #%11000000,d0
	cmp.w #%11000000,d0
	beq.w failBMON
	lsr.w #6,d0
	move.b d0,imsizeBMON	;00.b,01.w,10.l,11.*
	move.b #".",(a0)+
	move.b sizetxtBMON(pc,d0.w),(a0)+
opsposBMON:
	move.b	#' ',(a0)+
	btst	#1,modeBMON
	beq.b	.notab
	move.l	linebufBMON,a0
	lea.l	23(a0),a0			;ftrapngle.l
.notab	rts
sizetxtBMON:dc.l "bwl*"

opi9bBMON:	move.b #"#",(a0)+
	move.w d1,d0
	and.w #%111000000000,d0
	rol.w #7,d0
	bne.b i9b0BMON
	moveq #8,d0
i9b0BMON:	bra.w nibtodBMON
optoax9bBMON:move.b #",",(a0)+
opax9bBMON:	move.b #"a",(a0)+
	bra.b opxxBMON
optodx9bBMON:move.b #",",(a0)+
opdx9bBMON:	move.b #"d",(a0)+
opxxBMON:	move.w d1,d0
	and.w #%111000000000,d0
	rol.w #7,d0
	add.b #"0",d0
	move.b d0,(a0)+
	rts
optoax02BMON:move.b #",",(a0)+
opax02BMON:	move.b #"a",(a0)+
	bra.b opxx02BMON
optodx02BMON:move.b #",",(a0)+
opdx02BMON:	move.b #"d",(a0)+
opxx02BMON:	move.w d1,d0
op0xx02BMON:and.w #%111,d0
	add.b #"0",d0
	move.b d0,(a0)+
	rts
optofpx79BMON:move.b #",",(a0)+
opfpx79BMON:bsr.b chr2bufBMON
	dc.w "fp"
	lsr.w #7,d0
	bra.b op0xx02BMON
optouspBMON:move.b #",",(a0)+
opuspBMON:	lea usptxtBMON(pc),a1
	bra.b txttobufBMON
optoccrBMON:move.b #",",(a0)+
opccrBMON:	lea ccrtxtBMON(pc),a1
	bra.b txttobufBMON
optosrBMON:	move.b #",",(a0)+
opsrBMON:	lea srtxtBMON(pc),a1
txttobufBMON:
	move.b (a1)+,(a0)
	bclr #7,(a0)+
	beq.b txttobufBMON
txtqBMON:	rts	
chr2bufBMON:move.l a1,-(a7)		;copiesBMON 2 chrsBMON below bsr chr2bufBMON
	move.l 4(a7),a1
	move.b (a1)+,(a0)+
	move.b (a1)+,(a0)+
	move.l (a7)+,a1
	addq.l #2,(a7)
	rts
chr3bufBMON:			;copiesBMON 3 chrsBMON below bsr chr3bufBMON
chr4bufBMON:move.l a1,-(a7)		;copiesBMON 4 chrsBMON below bsr chr4bufBMON
	move.l 4(a7),a1
	move.b (a1)+,(a0)+
	move.b (a1)+,(a0)+
	move.b (a1)+,(a0)+
	tst.b (a1)
	beq.b chr0BMON
	move.b (a1)+,(a0)+
chr0BMON:	move.l (a7)+,a1
	addq.l #4,(a7)
	rts

bcpltobufBMON:move.b (a1)+,d0
bcpl0BMON:	subq.b #1,d0
	bmi.b bcpl1BMON
	move.b (a1)+,(a0)+
	bra.b bcpl0BMON		
bcpl1BMON:	rts

dorxBMON:	move.w d1,d0
	and.w #%111000,d0
	cmp.w #%100000,d0	;-(ax)
	bne.b drx8BMON
	moveq #16-1,d2
drx9BMON:	lsr.w #1,d3
	roxl.w #1,d0
	dbf d2,drx9BMON	
	move.w d0,d3
drx8BMON:	sf d5
	clr.w d2
	moveq #"d",d0
	bsr.b drx0BMON
	moveq #"a",d0
drx0BMON:	moveq #8,d4
drx1BMON:	tst.w d4
	beq.b drx5BMON
	btst d2,d3
	bne.b drx2BMON
	addq.w #1,d2
	subq.w #1,d4
	bra.b drx1BMON
drx2BMON:	tas d5
	beq.b drx3BMON
	move.b #"/",(a0)+
drx3BMON:	move.b d0,(a0)+
	move.b d2,(a0)
	add.b #"0",(a0)
	bclr #3,(a0)+
	sf d6
drx4BMON:	addq.w #1,d2
	subq.w #1,d4
	beq.b drx6BMON
	btst d2,d3
	beq.b drx6BMON
	st d6
	bra.b drx4BMON
drx6BMON:	tst.b d6
	beq.b drx7BMON
	move.b #"-",(a0)+
	move.b d0,(a0)+
	move.b d2,(a0)
	add.b #"0"-1,(a0)
	bclr #3,(a0)+
drx7BMON:	tst.w d4
	beq.b drx5BMON
	subq.w #1,d4
	addq.w #1,d2
	bra.b drx1BMON
drx5BMON:	rts

dofprxBMON:	move.w d1,d0
	and.w #%111000,d0
	beq.w failBMON		;Dn
	cmp.w #%001000,d0	;An
	beq.w failBMON
	moveq #%01110000,d6
	and.l d3,d6		;posBMON
	cmp.b d3,d6
	beq.b dfprxaBMON
	moveq #-1,d6		;neg:bad dynamic mask
dfprxaBMON:	lsr.b #4,d6
	add.b #"0",d6		;dynamic mask
	cmp.w #%100000,d0	;-(ax)
	bne.b dfprx8BMON
	btst #13,d3	;dr field
	beq.w failBMON	;to FPx?
	btst #12,d3	;mode
	bne.w failBMON	;no predec mode?
	moveq #8-1,d2
dfprx9BMON:	lsr.b #1,d3
	roxl.b #1,d0
	dbf d2,dfprx9BMON	
	move.b d0,d3
	bra.b dfprx0BMON
dfprx8BMON:	btst #12,d3	;mode
	beq.w failBMON	;predec mode?
dfprx0BMON:	btst #11,d3
	beq.b dfpstatBMON
	tst.l d6
	bmi.w failBMON	;bad dynamic mask
	move.b #"d",(a0)+
	move.b d6,(a0)+
dfprx5BMON:	rts
dfpstatBMON:sf d0
	moveq #8-1,d2
dfprx1BMON:	tst.w d2
	bmi.b dfprx5BMON
	btst d2,d3
	bne.b dfprx2BMON
	subq.w #1,d2
	bra.b dfprx1BMON
dfprx2BMON:	tas d0
	beq.b dfprx3BMON
	move.b #"/",(a0)+
dfprx3BMON:	move.b #"f",(a0)+
	move.b #"p",(a0)+
	move.b #"7",(a0)
	sub.b d2,(a0)+
	sf d6
dfprx4BMON:	subq.w #1,d2
	bmi.b dfprx6BMON
	btst d2,d3
	beq.b dfprx6BMON
	st d6
	bra.b dfprx4BMON
dfprx6BMON:	tst.b d6
	beq.b dfprx7BMON
	move.b #"-",(a0)+
	move.b #"f",(a0)+
	move.b #"p",(a0)+
	move.b #"7"-1,(a0)
	sub.b d2,(a0)+
dfprx7BMON:	tst.w d2
	bmi.b dfprx5BMON
	subq.w #1,d2
	bra.b dfprx1BMON

doccBMON:	lea ccodetxtBMON(pc),a1
	and.w #%111100000000,d0
	lsr.w #7,d0
	lea (a1,d0.w),a1
	move.b (a1)+,(a0)+
	tst.b (a1)
	beq.b docc0BMON
	move.b (a1)+,(a0)+
docc0BMON:	rts
dopccBMON:	lea pccodetxtBMON(pc),a1
	and.w #%001111,d0
	add.w d0,d0
	lea (a1,d0.w),a1
	move.b (a1)+,(a0)+
	move.b (a1)+,(a0)+
	rts
dofccBMON:	lea fccodetxtBMON(pc),a1
	and.w #%011111,d0
	add.w d0,d0
	add.w d0,d0
	lea (a1,d0.w),a1
	move.b (a1)+,(a0)+	;1..4 charsBMON
	tst.b (a1)
	beq.b dofcc0BMON
	move.b (a1)+,(a0)+
	tst.b (a1)
	beq.b dofcc0BMON
	move.b (a1)+,(a0)+
	tst.b (a1)
	beq.b dofcc0BMON
	move.b (a1)+,(a0)+
dofcc0BMON:	rts



dotoeaBMON:	move.w d1,d0
	and.w #%111111,d0
	cmp.w #%111001,d0	;dest:(pc),d(pc),#xx invalid
	bls.b doto0BMON
	sf d7 
	rts
doto0BMON:	move.b #",",(a0)+

doeaBMON:	moveq #%111000,d0
	and.w d1,d0
	lsr.w #2,d0
	pea eatabBMON(pc)
	move.w eatabBMON(pc,d0.w),d0	;ext.l obsolete
	add.l d0,(a7)
	rts

eatabBMON:	dc.w ddirectBMON-eatabBMON
	dc.w adirectBMON-eatabBMON
	dc.w aindirectBMON-eatabBMON
	dc.w aindirectpostBMON-eatabBMON
	dc.w aindirectpreBMON-eatabBMON
	dc.w aindirectdispBMON-eatabBMON
	dc.w aindirectindexBMON-eatabBMON
	dc.w mode7BMON-eatabBMON
ddirectBMON:move.b #"d",(a0)+
	moveq #%000111,d0
	and.w d1,d0
	add.b #"0",d0
	move.b d0,(a0)+
	rts
adirectBMON:move.b #"a",(a0)+
	moveq #%000111,d0
	and.w d1,d0
	add.b #"0",d0
	move.b d0,(a0)+
	rts
toaindirectBMON:
	move.b #",",(a0)+
aindirectBMON:
	move.b #"(",(a0)+
	move.b #"a",(a0)+
	moveq #%000111,d0
	and.w d1,d0
	add.b #"0",d0
	move.b d0,(a0)+
	move.b #")",(a0)+
	bsr.w setbaseBMON
	bra.w eavalBMON
toaindirectpostBMON:
	move.b #",",(a0)+
aindirectpostBMON:
	move.b #"(",(a0)+
	move.b #"a",(a0)+
	moveq #%000111,d0
	and.w d1,d0
	add.b #"0",d0
	move.b d0,(a0)+
	move.b #")",(a0)+
	move.b #"+",(a0)+
	bsr.w setbaseBMON
	bra.w eavalBMON
aindirectpreBMON:
	move.b #"-",(a0)+
	move.b #"(",(a0)+
	moveq #%000111,d0
	and.w d1,d0
	add.b #"0",d0
	move.b #"a",(a0)+
	move.b d0,(a0)+
	move.b #")",(a0)+
	bsr.w setbaseBMON
	bra.w eavalBMON
aindirectdispBMON:
	move.b #"(",(a0)+
	move.w (a5),d0
	bsr.w swordtoa_BMON
	move.b #",",(a0)+
	move.b #"a",(a0)+
	moveq #%000111,d0
	and.w d1,d0
	add.b #"0",d0
	move.b d0,(a0)+
	move.b #")",(a0)+
	bsr.w setbaseBMON
	move.w (a5)+,d0
	ext.l d0
	add.l d0,baseregBMON
	bra.w eavalBMON
aindirectindexBMON:
	btst #0,(a5)
	bne.w indfullBMON
	bsr.w setbaseBMON
	move.b #"(",(a0)+
	move.w (a5),d0
	bsr.w sbytetoa_BMON
	ext.w d0
	ext.l d0
	add.l d0,baseregBMON
	move.b #",",(a0)+
	move.b #"a",(a0)+
	moveq #%000111,d0
	and.w d1,d0
	add.b #"0",d0
	move.b d0,(a0)+
	move.b #",",(a0)+
	moveq #"d",d0
	btst #7,(a5)
	beq.b ind0BMON
	moveq #"a",d0
ind0BMON:	move.b d0,(a0)+
	moveq #%01110000,d0
	and.b (a5),d0
	lsr.b #4,d0
	add.b #"0",d0
	move.b d0,(a0)+
	movem.l d1/a1,-(a7)
	move.w #%11110000,d0
	and.b (a5),d0
	lsr.b #2,d0
	lea regsBMON,a1
	move.l (a1,d0.w),d1
	move.b #".",(a0)+
	moveq #"l",d0
	btst #3,(a5)
	bne.b ind1BMON
	moveq #"w",d0
	ext.l d1
ind1BMON:	move.b d0,(a0)+
	moveq #%00000110,d0
	and.b (a5),d0
	beq.b ind2BMON
	lsr.b #1,d0
	move.b #"*",(a0)+
	move.b scaleBMON(pc,d0.w),(a0)+
ind2BMON:	lsl.l d0,d1
	add.l d1,baseregBMON
	move.b #")",(a0)+
	movem.l (a7)+,d1/a1
	addq.w #2,a5
	bra.w eavalBMON
scaleBMON:	dc.l "1248"
pcindfullBMON:
indfullBMON:moveq #%00001000,d0
	and.w (a5),d0
	bne.w reservedBMON		;failBMON
	moveq #%01000111,d0
	and.w (a5),d0
	cmp.b #%01000100,d0
	bcc.w reservedBMON
	cmp.b #%00000100,d0
	beq.w reservedBMON
	moveq #%00110000,d0
	and.w (a5),d0
	beq.w reservedBMON

	move.w d2,-(a7)
	move.w (a5)+,d2		;full format extension
	move.b #"(",(a0)+
	moveq #%00000111,d0
	and.w d2,d0
	beq.b nomemindBMON
	move.b #"[",(a0)+
nomemindBMON:		

	moveq #%111111,d0
	and.w d1,d0
	cmp.w #%111011,d0	;pc indirect?
	bne.b nopcindBMON

	moveq #%00110000,d0
	and.w d2,d0
	lsr.w #4,d0
	btst #7,d2
	beq.b nozpcBMON
	bsr.w displaceBMON
	cmp.b #"[",-1(a0)
	beq.b noidispBMON
	move.b #",",(a0)+
noidispBMON:move.b #"z",(a0)+
	bra.b dozpcBMON
nozpcBMON:	subq.b #1,d0
	beq.b dozpcBMON
	subq.b #1,d0
	beq.b nozpc1BMON
	move.l a5,d0
	add.l (a5)+,d0
	subq.l #2,d0
	bsr.w hextoa_BMON
;	move.b #".",(a0)+
;	move.b #"l",(a0)+
	bra.b nozpc0BMON
nozpc1BMON:	move.w (a5)+,d0
	ext.l d0
	add.l a5,d0
	subq.l #4,d0
	bsr.w hextoa_BMON
	move.b #".",(a0)+
	move.b #"w",(a0)+
nozpc0BMON:	move.b #",",(a0)+
dozpcBMON:	move.b #"p",(a0)+
	move.b #"c",(a0)+
	bra.b baseokBMON
nopcindBMON:moveq #%00110000,d0	;baseBMON displacement
	and.w d2,d0
	lsr.w #4,d0
	bsr.w displaceBMON
	moveq #%000111,d0
	and.w d1,d0
	btst #7,d2		;bsBMON
	bne.b basesuprBMON
	cmp.b #"[",-1(a0)
	beq.b noidis2BMON
	cmp.b #"(",-1(a0)
	beq.b noidis2BMON
	move.b #",",(a0)+
noidis2BMON:move.b #"a",(a0)+
	add.b #"0",d0
	move.b d0,(a0)+
	bra.b baseokBMON	
basesuprBMON:
	tst.b d0
	bne.w basfailBMON
baseokBMON:	
	btst #2,d2		;postindex?
	beq.b nopostBMON
	move.b #"]",(a0)+
nopostBMON:	btst #6,d2
	bne.b indsuprBMON
	cmp.b #"[",-1(a0)
	beq.b indpreBMON
	cmp.b #"(",-1(a0)
	beq.b indpreBMON
	move.b #",",(a0)+
indpreBMON:	moveq #"d",d0
	tst.w d2
	bpl.b dindxBMON
	moveq #"a",d0
dindxBMON:	move.b d0,(a0)+
	move.w #%0111000000000000,d0
	and.w d2,d0
	rol.w #4,d0
	add.b #"0",d0
	move.b d0,(a0)+
	move.b #".",(a0)+
	moveq #"l",d0
	btst #11,d2
	bne.b dind1BMON
	moveq #"w",d0
dind1BMON:	move.b d0,(a0)+
	move.w #%0000011000000000,d0
	and.w d2,d0
	beq.b dind2BMON
	rol.w #7,d0
	move.b #"*",(a0)+
	move.b scale3BMON(pc,d0.w),(a0)+
dind2BMON:	bra.b indokBMON
scale3BMON:	dc.l "1248"
indsuprBMON:move.w #%1111111000000000,d0
	and.w d2,d0
	bne.b indfailBMON
indokBMON:	moveq #%00000111,d0
	and.w d2,d0
	beq.b nopreBMON
	btst #2,d2
	bne.b nopreBMON 
	move.b #"]",(a0)+
nopreBMON:
	moveq #%00000011,d0	;outer displacement
	and.w d2,d0
	beq.b nomemind2BMON
	cmp.b #1,d0
	beq.b nokomaBMON
	move.b #",",(a0)+
nokomaBMON:	bsr.b displaceBMON
nomemind2BMON:	
	move.b #")",(a0)+
indquitBMON:move.w (a7)+,d2
	rts
indfailBMON:
basfailBMON:sf d7
	bra.b indquitBMON

displaceBMON:
	subq.b #1,d0
	beq.b nullouterBMON
	subq.b #1,d0
	beq.b wordouterBMON
	move.l (a5)+,d0
	bsr.w hextoa_BMON
;	move.b #".",(a0)+
;	move.b #"l",(a0)+
	rts
wordouterBMON:
	move.w (a5)+,d0		;upper word=0
	bsr.w hextoa_BMON
	move.b #".",(a0)+
	move.b #"w",(a0)+
nullouterBMON:
	rts

mode7BMON:	moveq #%000111,d0
	and.w d1,d0
	add.w d0,d0
	pea mod7tabBMON(pc)
	move.w mod7tabBMON(pc,d0.w),d0
	add.l d0,(a7)
	rts
mod7tabBMON:dc.w absshortBMON-mod7tabBMON
	dc.w abslongBMON-mod7tabBMON
	dc.w pcindirectBMON-mod7tabBMON
	dc.w pcindexBMON-mod7tabBMON
	dc.w immediateBMON-mod7tabBMON
	dc.w reservedBMON-mod7tabBMON
	dc.w reservedBMON-mod7tabBMON
	dc.w reservedBMON-mod7tabBMON

absshortBMON:
	move.b #"(",(a0)+
	moveq #0,d0
	move.w (a5)+,d0
	bsr.w hextoa_BMON
	move.b #")",(a0)+
	move.b #".",(a0)+
	move.b #"w",(a0)+
	rts
abslongBMON:move.b #"(",(a0)+
	move.l (a5)+,d0
	bsr.w hextoa_BMON
	move.b #")",(a0)+
	rts
pcindirectBMON:
	move.b #"(",(a0)+
	moveq #-2,d0
	add.w (a5)+,d0
	ext.l d0
	add.l a5,d0
	bsr.w hextoa_BMON
	move.b #",",(a0)+
	move.b #"p",(a0)+
	move.b #"c",(a0)+
	move.b #")",(a0)+
	rts
pcindexBMON:btst #0,(a5)
	bne.w pcindfullBMON
	move.b #"(",(a0)+
	move.w (a5),d0
	ext.w d0
	ext.l d0
	add.l a5,d0
	move.l d0,baseregBMON
	bsr.w hextoa_BMON
	move.b #",",(a0)+
	move.b #"p",(a0)+
	move.b #"c",(a0)+
	move.b #",",(a0)+
	moveq #"d",d0
	btst #7,(a5)
	beq.b pcind0BMON
	moveq #"a",d0
pcind0BMON:	move.b d0,(a0)+
	moveq #%01110000,d0
	and.b (a5),d0
	lsr.b #4,d0
	add.b #"0",d0
	move.b d0,(a0)+
	movem.l d1/a1,-(a7)
	move.w #%11110000,d0
	and.b (a5),d0
	lsr.b #2,d0
	lea regsBMON,a1
	move.l (a1,d0.w),d1
	move.b #".",(a0)+
	moveq #"l",d0
	btst #3,(a5)
	bne.b pcind1BMON
	moveq #"w",d0
	ext.l d1
pcind1BMON:	move.b d0,(a0)+
	moveq #%00000110,d0
	and.b (a5),d0
	beq.b pcind2BMON
	lsr.b #1,d0
	move.b #"*",(a0)+
	move.b scale2BMON(pc,d0.w),(a0)+
pcind2BMON:	lsl.l d0,d1
	add.l d1,baseregBMON
	move.b #")",(a0)+
	movem.l (a7)+,d1/a1
	addq.w #2,a5
	bra.w eavalBMON
scale2BMON:	dc.l "1248"

immediateBMON:
	move.b #"#",(a0)+
	moveq #0,d0
	move.w (a5)+,d0
	tst.b imsizeBMON
	bne.b imwordBMON
	cmp.w #$ff,d0
	bhi.b reservedBMON		;failBMON
	bra.w hextoa_BMON
imwordBMON:	cmp.b #%001,imsizeBMON
	bne.b imlongBMON
	bra.w hextoa_BMON
imlongBMON:	cmp.b #%010,imsizeBMON
	bne.b fpu4wrdBMON
	swap d0
	move.w (a5)+,d0
	bra.w hextoa_BMON
imresvdBMON:cmp.b #%011,imsizeBMON
	beq.b reservedBMON
fpu4wrdBMON:cmp.b #%100,imsizeBMON	;%1xx fpu imsizeBMON
	bne.b fpu5wrdBMON
fpu4w0BMON:	swap d0
	move.w (a5)+,d0
	bsr.w longtoa_BMON
fpu2w0BMON:	move.l (a5)+,d0
	bra.w longtoaBMON
fpu5wrdBMON:cmp.b #%101,imsizeBMON
	beq.b reservedBMON
fpu6wrdBMON:cmp.b #%110,imsizeBMON
	bne.b reservedBMON
	bsr.b fpu4w0BMON
	bra.b fpu2w0BMON

reservedBMON:
	sf d7
	rts

setbaseBMON:move.l a1,-(a7)
	lea regsBMON,a1
	moveq #%000111,d0
	and.w d1,d0
	lsl.w #2,d0
	move.l 8*4(a1,d0.w),baseregBMON	;contentsBMON An
	move.l (a7)+,a1
	rts

eavalBMON:
	btst	#2,modeBMON
	beq.b	eaval1BMON
	btst #2,dissignBMON
	beq.b eaval1BMON
	move.l a0,-(a7)
	move.l baseregBMON,d0
	move.l	linebufBMON,a0
	lea.l	54(a0),a0				;longest movem.l .... !
	move.b #";",(a0)+
	tst.b ea2ndBMON
	beq.b eaval0BMON
	lea 10(a0),a0
eaval0BMON:	bsr.w longtoa_BMON
	st ea2ndBMON
	move.l (a7)+,a0
eaval1BMON:	rts

sbytetoa_BMON:move.l d0,-(a7)
	btst #0,dissignBMON
	beq.b sby0BMON
	tst.b d0
	bpl.b sby0BMON
	neg.b d0	
	move.b #"-",(a0)+
sby0BMON:	and.l #$ff,d0
	btst #1,dissignBMON
	beq.b sby1BMON
	bsr.w hextodBMON
	bra.b sby2BMON
sby1BMON:	bsr.w hextoa_BMON			;bsr.w bytetoa_BMON
sby2BMON:	move.l (a7)+,d0
	rts

swordtoa_BMON:move.l d0,-(a7)
	btst #0,dissignBMON
	beq.b swo0BMON
	tst.w d0
	bpl.b swo0BMON
	neg.w d0
	move.b #"-",(a0)+	
swo0BMON:	and.l #$ffff,d0
	btst #1,dissignBMON
	beq.b swo1BMON
	bsr.w hextodBMON
	bra.b swo2BMON
swo1BMON:	bsr.w hextoa_BMON			;bsr.w wordtoa_BMON
swo2BMON:	move.l (a7)+,d0
	rts

;----------------------------------------------------------

xopfailBMON=0			;dummy
xnoopsBMON=1
xdcwopBMON=2
xeatoccrBMON=3
xeatosrBMON=4
xsrtoeaBMON=5
xwordbxxBMON=6
xwordccBMON=7
xshortbxxBMON=8
xshortccBMON=9
xeatoaxBMON=10
xeatodxBMON=11
xdxtoeaBMON=12
xiwordtoccrBMON=13
xiwordtosrBMON=14
xiwordBMON=15
xccodewordrelBMON=16
xinibtoeaBMON=17
xccodeeaBMON=18
xsrceaBMON=19
xsize67eatodxBMON=20
xsize8eatoax9bBMON=21
xsize67adsbxBMON=22
xsize67ixtoeaBMON=23
xsize67i9btoeaBMON=24
xsize67x9btodx02BMON=25
xitrapBMON=26
xsrcdx02BMON=27
ximuspBMON=28
ximoveBMON=29
ximoveqBMON=30
xicmpmBMON=31
xxbcdBMON=32
xsize6movepBMON=33
ximovemBMON=34
xdx9btodx02BMON=35
xax9btoax02BMON=36
xdx9btoax02BMON=37
xiunlkBMON=38
xilinkBMON=39
ximovecBMON=40
xccrtoeaBMON=41
xmovesBMON=42
xbfieldBMON=43
xbfieldtodxBMON=44
xdxtobfieldBMON=45
xbkptBMON=46
xlongbxxBMON=47
xlongccBMON=48
xcallmBMON=49
xcasBMON=50
xcas2BMON=51
xchk2BMON=52
xcmp2BMON=53
xrx03BMON=54
xccodeBMON=55
xccodesizeBMON=56
xilinklgBMON=57
xmululBMON=58
xmulslBMON=59
xdivullBMON=60
xdivsllBMON=61
xpackBMON=62
xea2todxBMON=63	;chk.l
xfccodeBMON=64
xfccodesizeBMON=65
xfccodewordrelBMON=66
xfccodeeaBMON=67
xfnopBMON=68
xfmovecrBMON=69
xpmoveBMON=70
xpmovefdBMON=71
xpflushaBMON=72
xpflushBMON=73
xploadBMON=74
xptestBMON=75
xidbcacBMON=76
xidbindBMON=77
xmov16BMON=78
xpccodeeaBMON=79
xpccodewordrelBMON=80
xpccodeBMON=81
xpccodesizeBMON=82
xbrapccBMON=83
xbrafccBMON=84
xpflushsBMON=85
xpflushrBMON=86
xpvalidBMON=87
xpflush40BMON=88
xmov162BMON=89
xlpstopBMON=90
xtblBMON=91
xfpuBMON=92
xfmovelBMON=93
xfmovemlBMON=94
xfmovemxBMON=95

	even
disoffsBMON:dc.w opfailBMON,noopsBMON,dcwopBMON,eatoccrBMON,eatosrBMON,srtoeaBMON,wordbxxBMON,wordccBMON
	dc.w shortbxxBMON,shortccBMON,eatoaxBMON,eatodxBMON,dxtoeaBMON,iwordtoccrBMON
	dc.w iwordtosrBMON,iwordBMON,ccodewordrelBMON,inibtoeaBMON,ccodeeaBMON,srceaBMON
	dc.w size67eatodxBMON,size8eatoax9bBMON,size67adsbxBMON,size67ixtoeaBMON
	dc.w size67i9btoeaBMON,size67x9btodx02BMON,itrapBMON,srcdx02BMON,imuspBMON
	dc.w imoveBMON,imoveqBMON,icmpmBMON,xbcdBMON,size6movepBMON
	dc.w imovemBMON,dx9btodx02BMON,ax9btoax02BMON,dx9btoax02BMON
	dc.w iunlkBMON,ilinkBMON,imovecBMON,ccrtoeaBMON,imovesBMON,dbfieldBMON,dbfieldtodxBMON
	dc.w ddxtobfieldBMON,dbkptBMON,longbxxBMON,longccBMON,icallmBMON,dcasBMON,dcas2BMON
	dc.w dchk2BMON,dcmp2BMON,drtmBMON,dtpccBMON,dtpccsizeBMON,dlinklgBMON,dmululBMON,dmulslBMON
	dc.w ddivullBMON,ddivsllBMON,dpackBMON,ea2todxBMON,dtpfccBMON,dtpfccsizeBMON
	dc.w dfccodewordrelBMON,fccodeeaBMON,dfnopBMON,dfmovecrBMON,dpmoveBMON,dpmovefdBMON
	dc.w dpflushaBMON,dpflushBMON,dploadBMON,dptestBMON,didbcacBMON,didbindBMON,dmov16BMON
	dc.w dpccodeeaBMON,dpccodewordrelBMON,dtppccBMON,dtppccsizeBMON,dbrapccBMON,dbrafccBMON
	dc.w dpflushsBMON,dpflushrBMON,dpvalidBMON,dpflush40BMON,dmov162BMON,dlpstopBMON
	dc.w dtblBMON,dfpuBMON,dfmovelBMON,dfmovemlBMON,dfmovemxBMON


;----------------------------------------------------------

instrBMON:	dc.w $ffff,$4afc,snopBMON!xnoopsBMON
	dc.b "illega","l"+128,0
	dc.w $ffff,$4e70,snopBMON!xnoopsBMON
	dc.b "rese","t"+128,0,0,0
	dc.w $ffff,$4e71,snopBMON!xnoopsBMON
	dc.b "no","p"+128,0,0,0,0,0
	dc.w $ffff,$4e73,snopBMON!xnoopsBMON
	dc.b "rt","e"+128,0,0,0,0,0
	dc.w $ffff,$4e75,snopBMON!xnoopsBMON
	dc.b "rt","s"+128,0,0,0,0,0
	dc.w $ffff,$4e77,snopBMON!xnoopsBMON
	dc.b "rt","r"+128,0,0,0,0,0
	dc.w $ffff,$4afa,snopBMON!xnoopsBMON		;cpu32 only
	dc.b "bgn","d"+128,0,0,0,0

	dc.w $ffc0,$f200,snopBMON!xfpuBMON		;68881
	dc.b "f"+128,0,0,0,0,0,0,0
	dc.w $ffc0,$f200,stabBMON!xfmovelBMON		;68881
	dc.b "fmove.","l"+128,0
	dc.w $ffc0,$f200,stabBMON!xfmovemlBMON		;68881
	dc.b "fmovem.","l"+128
	dc.w $ffc0,$f200,stabBMON!xfmovemxBMON		;68881
	dc.b "fmovem.","x"+128
	dc.w $ffff,$f200,stabBMON!xfmovecrBMON		;68881
	dc.b "fmovec","r"+128,0
	dc.w $ffff,$f280,snopBMON!xfnopBMON		;68881
	dc.b "fno","p"+128,0,0,0,0
	dc.w $ffff,$f510,snopBMON!xnoopsBMON		;68040 only!
	dc.b "pflusha","n"+128
	dc.w $ffff,$f518,snopBMON!xnoopsBMON		;68040 only!
	dc.b "pflusha","!"+128
	dc.w $ffff,$f000,snopBMON!xpflushaBMON		;68020 order!
	dc.b "pflush","a"+128,0
	dc.w $ffff,$f000,stabBMON!xpflushsBMON		;68851 only order!
	dc.b "pflush","s"+128,0
	dc.w $ffc0,$f000,stabBMON!xpflushrBMON		;68851 only order!
	dc.b "pflush","r"+128,0
	dc.w $fff8,$f500,stabBMON!xpflush40BMON		;68040 only!
	dc.b "pflush","n"+128,0
	dc.w $fff8,$f508,stabBMON!xpflush40BMON		;68040 only!
	dc.b "pflus","h"+128,0,0
	dc.w $fff8,$f548,stabBMON!xpflush40BMON		;68040 only!
	dc.b "ptest","w"+128,0,0
	dc.w $fff8,$f568,stabBMON!xpflush40BMON		;68040 only!
	dc.b "ptest","r"+128,0,0

	dc.w $ffff,$f000,stabBMON!xpflushBMON		;68020 order!
	dc.b "pflus","h"+128,0,0
	dc.w $ffc0,$f000,stabBMON!xpvalidBMON		;68851 only
	dc.b "pvali","d"+128,0,0
		
	dc.w $ffff,$003c,stabBMON!xiwordtoccrBMON
	dc.b "or","i"+128,0,0,0,0,0
	dc.w $ffff,$023c,stabBMON!xiwordtoccrBMON
	dc.b "and","i"+128,0,0,0,0
	dc.w $ffff,$0a3c,stabBMON!xiwordtoccrBMON
	dc.b "eor","i"+128,0,0,0,0

	dc.w $ffff,$007c,stabBMON!xiwordtosrBMON
	dc.b "or","i"+128,0,0,0,0,0
	dc.w $ffff,$027c,stabBMON!xiwordtosrBMON
	dc.b "and","i"+128,0,0,0,0
	dc.w $ffff,$0a7c,stabBMON!xiwordtosrBMON
	dc.b "eor","i"+128,0,0,0,0

	dc.w $f1f8,$c140,stabBMON!xdx9btodx02BMON
	dc.b "ex","g"+128,0,0,0,0,0
	dc.w $f1f8,$c148,stabBMON!xax9btoax02BMON
	dc.b "ex","g"+128,0,0,0,0,0
	dc.w $f1f8,$c188,stabBMON!xdx9btoax02BMON
	dc.b "ex","g"+128,0,0,0,0,0

	dc.w $fff8,$4e58,stabBMON!xiunlkBMON
	dc.b "unl","k"+128,0,0,0,0
	dc.w $fff8,$4808,stabBMON!xilinklgBMON		;68020
	dc.b "link.","l"+128,0,0
	dc.w $fff8,$4e50,stabBMON!xilinkBMON
	dc.b "lin","k"+128,0,0,0,0

	dc.w $fff8,$4848,stabBMON!xbkptBMON		;68020
	dc.b "bkp","t"+128,0,0,0,0

	dc.w $f1f0,$8140,stabBMON!xpackBMON		;68020
	dc.b "pac","k"+128,0,0,0,0
	dc.w $f1f0,$8180,stabBMON!xpackBMON		;68020
	dc.b "unp","k"+128,0,0,0,0

	dc.w $fff0,$4e40,stabBMON!xitrapBMON
	dc.b "tra","p"+128,0,0,0,0

	dc.w $f100,$7000,stabBMON!ximoveqBMON
	dc.b "move","q"+128,0,0,0

	dc.w $ffff,$f800,stabBMON!xlpstopBMON		;cpu32 only
	dc.b "lpsto","p"+128,0,0	
	dc.w $ffff,$4e72,stabBMON!xiwordBMON
	dc.b "sto","p"+128,0,0,0,0
	dc.w $ffff,$4e74,stabBMON!xiwordBMON		;68010
	dc.b "rt","d"+128,0,0,0,0,0

	dc.w $fdff,$0cfc,snopBMON!xcas2BMON		;68020
	dc.b "cas2","."+128,0,0,0

	dc.w $fff8,$4840,stabBMON!xsrcdx02BMON
	dc.b "swa","p"+128,0,0,0,0
	dc.w $fff8,$49c0,stabBMON!xsrcdx02BMON		;68020
	dc.b "ext","b"+128,0,0,0,0
	dc.w $ffb8,$4880,s6BMON!xsrcdx02BMON
	dc.b "ex","t"+128,0,0,0,0,0

	dc.w $fff0,$06c0,stabBMON!xrx03BMON		;68020
	dc.b "rt","m"+128,0,0,0,0,0
;????
	dc.w $fffe,$f07a,snopBMON!xpccodesizeBMON	;68851 only order!
	dc.b "ptra","p"+128,0,0,0
	dc.w $ffff,$f07c,snopBMON!xpccodeBMON		;68851 only order!
	dc.b "ptra","p"+128,0,0,0
	dc.w $fffe,$f27a,snopBMON!xfccodesizeBMON	;68881 order!
	dc.b "ftra","p"+128,0,0,0
	dc.w $ffff,$f27c,snopBMON!xfccodeBMON		;68881 order!
	dc.b "ftra","p"+128,0,0,0
	dc.w $f0fe,$50fa,snopBMON!xccodesizeBMON	;68020 order!
	dc.b "tra","p"+128,0,0,0,0
	dc.w $f0ff,$50fc,snopBMON!xccodeBMON		;68020 order!
	dc.b "tra","p"+128,0,0,0,0
	dc.w $ffff,$4e76,snopBMON!xnoopsBMON		;order!
	dc.b "trap","v"+128,0,0,0
;????
	dc.w $ff3f,$f418,stabBMON!xidbcacBMON		;68040
	dc.b "cinv","a"+128,0,0,0
	dc.w $ff38,$f408,stabBMON!xidbindBMON		;68040
	dc.b "cinv","l"+128,0,0,0
	dc.w $ff38,$f410,stabBMON!xidbindBMON		;68040
	dc.b "cinv","p"+128,0,0,0
	dc.w $ff3f,$f438,stabBMON!xidbcacBMON		;68040
	dc.b "cpush","a"+128,0,0
	dc.w $ff38,$f428,stabBMON!xidbindBMON		;68040
	dc.b "cpush","l"+128,0,0
	dc.w $ff38,$f430,stabBMON!xidbindBMON		;68040
	dc.b "cpush","p"+128,0,0
	dc.w $fff8,$f620,stabBMON!xmov16BMON		;68040 order!
	dc.b "move1","6"+128,0,0
	dc.w $ffe0,$f600,stabBMON!xmov162BMON		;68040
	dc.b "move1","6"+128,0,0

	dc.w $f138,$b108,s67BMON!xicmpmBMON
	dc.b "cmp","m"+128,0,0,0,0

	dc.w $f1f0,$c100,stabBMON!xxbcdBMON
	dc.b "abc","d"+128,0,0,0,0
	dc.w $f1f0,$8100,stabBMON!xxbcdBMON
	dc.b "sbc","d"+128,0,0,0,0

	dc.w $f130,$d100,s67BMON!xsize67adsbxBMON
	dc.b "add","x"+128,0,0,0,0
	dc.w $f130,$9100,s67BMON!xsize67adsbxBMON
	dc.b "sub","x"+128,0,0,0,0

	dc.w $ffc0,$f000,stabBMON!xpmovefdBMON		;68030 only
	dc.b "pmovef","d"+128,0
	dc.w $ffc0,$f000,stabBMON!xpmoveBMON		;68020
	dc.b "pmov","e"+128,0,0,0
	dc.w $ffc0,$f000,snopBMON!xploadBMON		;68020
	dc.b "ploa","d"+128,0,0,0
	dc.w $ffc0,$f000,snopBMON!xptestBMON		;68020
	dc.b "ptes","t"+128,0,0,0

	dc.w $ffc0,$e8c0,stabBMON!xbfieldBMON		;68020
	dc.b "bfts","t"+128,0,0,0
	dc.w $ffc0,$eac0,stabBMON!xbfieldBMON		;68020
	dc.b "bfch","g"+128,0,0,0
	dc.w $ffc0,$ecc0,stabBMON!xbfieldBMON		;68020
	dc.b "bfcl","r"+128,0,0,0
	dc.w $ffc0,$eec0,stabBMON!xbfieldBMON		;68020
	dc.b "bfse","t"+128,0,0,0
	dc.w $ffc0,$e9c0,stabBMON!xbfieldtodxBMON	;68020
	dc.b "bfext","u"+128,0,0
	dc.w $ffc0,$ebc0,stabBMON!xbfieldtodxBMON	;68020
	dc.b "bfext","s"+128,0,0
	dc.w $ffc0,$edc0,stabBMON!xbfieldtodxBMON	;68020
	dc.b "bfff","o"+128,0,0,0
	dc.w $ffc0,$efc0,stabBMON!xdxtobfieldBMON	;68020
	dc.b "bfin","s"+128,0,0,0

	dc.w $ffc0,$06c0,stabBMON!xcallmBMON		;68020
	dc.b "call","m"+128,0,0,0
	
	dc.w $ffc0,$40c0,stabBMON!xsrtoeaBMON
	dc.b "mov","e"+128,0,0,0,0
	dc.w $ffc0,$42c0,stabBMON!xccrtoeaBMON		;68010
	dc.b "mov","e"+128,0,0,0,0
	dc.w $ffc0,$44c0,stabBMON!xeatoccrBMON
	dc.b "mov","e"+128,0,0,0,0
	dc.w $ffc0,$46c0,stabBMON!xeatosrBMON
	dc.b "mov","e"+128,0,0,0,0

	dc.w $fff0,$4e60,stabBMON!ximuspBMON
	dc.b "mov","e"+128,0,0,0,0

	dc.w $fffe,$4e7a,stabBMON!ximovecBMON		;68010
	dc.b "move","c"+128,0,0,0

	dc.w $fb80,$4880,s6BMON!ximovemBMON
	dc.b "move","m"+128,0,0,0

	dc.w $f138,$0108,s6BMON!xsize6movepBMON
	dc.b "move","p"+128,0,0,0

	dc.w $ffc0,$f800,snopBMON!xtblBMON		;cpu32 only
	dc.b "tb","l"+128,0,0,0,0,0

	dc.w $f1c0,$41c0,stabBMON!xeatoaxBMON
	dc.b "le","a"+128,0,0,0,0,0

	dc.w $ffff,$60ff,stabBMON!xlongbxxBMON		;68020
	dc.b "bra.","l"+128,0,0,0
	dc.w $ffff,$61ff,stabBMON!xlongbxxBMON		;68020
	dc.b "bsr.","l"+128,0,0,0
	dc.w $ffff,$6000,stabBMON!xwordbxxBMON
	dc.b "bra.","w"+128,0,0,0
	dc.w $ffff,$6100,stabBMON!xwordbxxBMON
	dc.b "bsr.","w"+128,0,0,0
	dc.w $ff00,$6000,stabBMON!xshortbxxBMON		;order !
	dc.b "bra.","b"+128,0,0,0
	dc.w $ff00,$6000,stabBMON!xshortbxxBMON		;order !
	dc.b "bra.","s"+128,0,0,0				;clone
	dc.w $ff00,$6100,stabBMON!xshortbxxBMON
	dc.b "bsr.","b"+128,0,0,0
	dc.w $ff00,$6100,stabBMON!xshortbxxBMON
	dc.b "bsr.","s"+128,0,0,0				;clone
	dc.w $ffb0,$f080,snopBMON!xbrapccBMON		;68851 only
	dc.b "p","b"+128,0,0,0,0,0,0
	dc.w $ffa0,$f280,snopBMON!xbrafccBMON		;68881
	dc.b "f","b"+128,0,0,0,0,0,0
	dc.w $f0ff,$60ff,snopBMON!xlongccBMON		;68020
	dc.b "b"+128,0,0,0,0,0,0,0
	dc.w $f0ff,$6000,snopBMON!xwordccBMON
	dc.b "b"+128,0,0,0,0,0,0,0
	dc.w $f000,$6000,snopBMON!xshortccBMON
	dc.b "b"+128,0,0,0,0,0,0,0

	dc.w $fff8,$f048,snopBMON!xpccodewordrelBMON	;68851 only
	dc.b "pd","b"+128,0,0,0,0,0
	dc.w $ffc0,$f040,snopBMON!xpccodeeaBMON		;68851 only
	dc.b "p","s"+128,0,0,0,0,0,0
	dc.w $fff8,$f248,snopBMON!xfccodewordrelBMON	;68881
	dc.b "fd","b"+128,0,0,0,0,0
	dc.w $ffc0,$f240,snopBMON!xfccodeeaBMON		;68881
	dc.b "f","s"+128,0,0,0,0,0,0

	dc.w $f0f8,$50c8,snopBMON!xccodewordrelBMON	;order !
	dc.b "d","b"+128,0,0,0,0,0,0
	dc.w $f0c0,$50c0,snopBMON!xccodeeaBMON
	dc.b "s"+128,0,0,0,0,0,0,0

	dc.w $ffc0,$4800,stabBMON!xsrceaBMON
	dc.b "nbc","d"+128,0,0,0,0
	dc.w $ffc0,$4840,stabBMON!xsrceaBMON
	dc.b "pe","a"+128,0,0,0,0,0
	dc.w $ffc0,$4ac0,stabBMON!xsrceaBMON
	dc.b "ta","s"+128,0,0,0,0,0
	dc.w $ffc0,$4e80,stabBMON!xsrceaBMON
	dc.b "js","r"+128,0,0,0,0,0
	dc.w $ffc0,$4ec0,stabBMON!xsrceaBMON
	dc.b "jm","p"+128,0,0,0,0,0
	dc.w $ffc0,$e0c0,stabBMON!xsrceaBMON
	dc.b "as","r"+128,0,0,0,0,0
	dc.w $ffc0,$e1c0,stabBMON!xsrceaBMON
	dc.b "as","l"+128,0,0,0,0,0
	dc.w $ffc0,$e2c0,stabBMON!xsrceaBMON
	dc.b "ls","r"+128,0,0,0,0,0
	dc.w $ffc0,$e3c0,stabBMON!xsrceaBMON
	dc.b "ls","l"+128,0,0,0,0,0
	dc.w $ffc0,$e4c0,stabBMON!xsrceaBMON
	dc.b "rox","r"+128,0,0,0,0
	dc.w $ffc0,$e5c0,stabBMON!xsrceaBMON
	dc.b "rox","l"+128,0,0,0,0
	dc.w $ffc0,$e6c0,stabBMON!xsrceaBMON
	dc.b "ro","r"+128,0,0,0,0,0
	dc.w $ffc0,$e7c0,stabBMON!xsrceaBMON
	dc.b "ro","l"+128,0,0,0,0,0
	dc.w $ffc0,$f100,stabBMON!xsrceaBMON		;68851 only
	dc.b "psav","e"+128,0,0,0
	dc.w $ffc0,$f140,stabBMON!xsrceaBMON		;68851 only
	dc.b "prestor","e"+128
	dc.w $ffc0,$f300,stabBMON!xsrceaBMON		;68881
	dc.b "fsav","e"+128,0,0,0
	dc.w $ffc0,$f340,stabBMON!xsrceaBMON		;68881
	dc.b "frestor","e"+128

	dc.w $ffc0,$4c40,stabBMON!xdivullBMON		;68020
	dc.b "divul.","l"+128,0
	dc.w $ffc0,$4c40,stabBMON!xdivsllBMON		;68020
	dc.b "divsl.","l"+128,0
	dc.w $ffc0,$4c40,stabBMON!xmululBMON		;68020
	dc.b "divu.","l"+128,0,0
	dc.w $ffc0,$4c40,stabBMON!xmulslBMON		;68020
	dc.b "divs.","l"+128,0,0
	dc.w $ffc0,$4c00,stabBMON!xmululBMON		;68020
	dc.b "mulu.","l"+128,0,0
	dc.w $ffc0,$4c00,stabBMON!xmulslBMON		;68020
	dc.b "muls.","l"+128,0,0

	dc.w $f1c0,$80c0,stabBMON!xeatodxBMON
	dc.b "div","u"+128,0,0,0,0
	dc.w $f1c0,$81c0,stabBMON!xeatodxBMON
	dc.b "div","s"+128,0,0,0,0
	dc.w $f1c0,$c0c0,stabBMON!xeatodxBMON
	dc.b "mul","u"+128,0,0,0,0
	dc.w $f1c0,$c1c0,stabBMON!xeatodxBMON
	dc.b "mul","s"+128,0,0,0,0
	dc.w $f1c0,$4180,stabBMON!xeatodxBMON
	dc.b "chk.","w"+128,0,0,0
	dc.w $f1c0,$4100,stabBMON!xea2todxBMON		;68020
	dc.b "chk.","l"+128,0,0,0

	dc.w $f0c0,$90c0,s8BMON!xsize8eatoax9bBMON
	dc.b "sub","a"+128,0,0,0,0
	dc.w $f0c0,$b0c0,s8BMON!xsize8eatoax9bBMON
	dc.b "cmp","a"+128,0,0,0,0
	dc.w $f0c0,$d0c0,s8BMON!xsize8eatoax9bBMON
	dc.b "add","a"+128,0,0,0,0

	dc.w $f100,$8000,s67BMON!xsize67eatodxBMON
	dc.b "o","r"+128,0,0,0,0,0,0
	dc.w $f100,$9000,s67BMON!xsize67eatodxBMON
	dc.b "su","b"+128,0,0,0,0,0
	dc.w $f100,$b000,s67BMON!xsize67eatodxBMON
	dc.b "cm","p"+128,0,0,0,0,0
	dc.w $f100,$c000,s67BMON!xsize67eatodxBMON
	dc.b "an","d"+128,0,0,0,0,0
	dc.w $f100,$d000,s67BMON!xsize67eatodxBMON
	dc.b "ad","d"+128,0,0,0,0,0

	dc.w $f100,$8100,s67BMON!xdxtoeaBMON
	dc.b "o","r"+128,0,0,0,0,0,0
	dc.w $f100,$9100,s67BMON!xdxtoeaBMON
	dc.b "su","b"+128,0,0,0,0,0
	dc.w $f100,$b100,s67BMON!xdxtoeaBMON
	dc.b "eo","r"+128,0,0,0,0,0
	dc.w $f100,$c100,s67BMON!xdxtoeaBMON
	dc.b "an","d"+128,0,0,0,0,0
	dc.w $f100,$d100,s67BMON!xdxtoeaBMON
	dc.b "ad","d"+128,0,0,0,0,0

	dc.w $ffc0,$0800,stabBMON!xinibtoeaBMON
	dc.b "bts","t"+128,0,0,0,0
	dc.w $ffc0,$0840,stabBMON!xinibtoeaBMON
	dc.b "bch","g"+128,0,0,0,0
	dc.w $ffc0,$0880,stabBMON!xinibtoeaBMON
	dc.b "bcl","r"+128,0,0,0,0
	dc.w $ffc0,$08c0,stabBMON!xinibtoeaBMON
	dc.b "bse","t"+128,0,0,0,0

	dc.w $f9c0,$08c0,s9a_BMON!xcasBMON		;68020
	dc.b "ca","s"+128,0,0,0,0,0
	dc.w $f9c0,$00c0,s9aBMON!xchk2BMON		;68020
	dc.b "chk","2"+128,0,0,0,0
	dc.w $f9c0,$00c0,s9aBMON!xcmp2BMON		;68020
	dc.b "cmp","2"+128,0,0,0,0

	dc.w $f100,$5000,s67BMON!xsize67i9btoeaBMON
	dc.b "add","q"+128,0,0,0,0
	dc.w $f100,$5100,s67BMON!xsize67i9btoeaBMON
	dc.b "sub","q"+128,0,0,0,0

	dc.w $f118,$e000,s67BMON!xsize67x9btodx02BMON
	dc.b "as","r"+128,0,0,0,0,0
	dc.w $f118,$e008,s67BMON!xsize67x9btodx02BMON
	dc.b "ls","r"+128,0,0,0,0,0
	dc.w $f118,$e010,s67BMON!xsize67x9btodx02BMON
	dc.b "rox","r"+128,0,0,0,0
	dc.w $f118,$e018,s67BMON!xsize67x9btodx02BMON
	dc.b "ro","r"+128,0,0,0,0,0
	dc.w $f118,$e100,s67BMON!xsize67x9btodx02BMON
	dc.b "as","l"+128,0,0,0,0,0
	dc.w $f118,$e108,s67BMON!xsize67x9btodx02BMON
	dc.b "ls","l"+128,0,0,0,0,0
	dc.w $f118,$e110,s67BMON!xsize67x9btodx02BMON
	dc.b "rox","l"+128,0,0,0,0
	dc.w $f118,$e118,s67BMON!xsize67x9btodx02BMON
	dc.b "ro","l"+128,0,0,0,0,0

	dc.w $ff00,$0000,s67BMON!xsize67ixtoeaBMON
	dc.b "or","i"+128,0,0,0,0,0
	dc.w $ff00,$0200,s67BMON!xsize67ixtoeaBMON
	dc.b "and","i"+128,0,0,0,0
	dc.w $ff00,$0400,s67BMON!xsize67ixtoeaBMON
	dc.b "sub","i"+128,0,0,0,0
	dc.w $ff00,$0600,s67BMON!xsize67ixtoeaBMON
	dc.b "add","i"+128,0,0,0,0
	dc.w $ff00,$0a00,s67BMON!xsize67ixtoeaBMON
	dc.b "eor","i"+128,0,0,0,0
	dc.w $ff00,$0c00,s67BMON!xsize67ixtoeaBMON
	dc.b "cmp","i"+128,0,0,0,0

	dc.w $f1c0,$0100,stabBMON!xdxtoeaBMON
	dc.b "bts","t"+128,0,0,0,0
	dc.w $f1c0,$0140,stabBMON!xdxtoeaBMON
	dc.b "bch","g"+128,0,0,0,0
	dc.w $f1c0,$0180,stabBMON!xdxtoeaBMON
	dc.b "bcl","r"+128,0,0,0,0
	dc.w $f1c0,$01c0,stabBMON!xdxtoeaBMON
	dc.b "bse","t"+128,0,0,0,0

	dc.w $ff00,$0e00,s67BMON!xmovesBMON		;68010
	dc.b "move","s"+128,0,0,0

	dc.w $ff00,$4000,s67BMON!xsrceaBMON
	dc.b "neg","x"+128,0,0,0,0
	dc.w $ff00,$4200,s67BMON!xsrceaBMON
	dc.b "cl","r"+128,0,0,0,0,0
	dc.w $ff00,$4400,s67BMON!xsrceaBMON
	dc.b "ne","g"+128,0,0,0,0,0
	dc.w $ff00,$4600,s67BMON!xsrceaBMON
	dc.b "no","t"+128,0,0,0,0,0
	dc.w $ff00,$4a00,s67BMON!xsrceaBMON
	dc.b "ts","t"+128,0,0,0,0,0

	dc.w $c000,$0000,snopBMON!ximoveBMON
	dc.b "move","."+128,0,0,0

	dc.w $f000,$a000,stabBMON!xdcwopBMON
	dc.b "line-","a"+128,0,0
	dc.w $f000,$f000,stabBMON!xdcwopBMON
	dc.b "line-","f"+128,0,0
	dc.w $0000,$0000,stabBMON!xdcwopBMON
	dc.b "dc.","w"+128,0,0,0,0


s67BMON =$0000
s6BMON  =$0100
s8BMON  =$0200
stabBMON=$0300
snopBMON=$0400
s9a_BMON=$0500	;68020 casBMON
s9aBMON =$0600	;68020 chk2,cmp2

;----------------------------------------------------------

twolong_BMON:
	bsr.b longtoa_BMON
	move.b #"-",(a0)+
	move.l d1,d0
	bra.b longtoa_BMON
twoadr_BMON:bsr.b adrtoa_BMON
	move.b #"-",(a0)+
	move.l d1,d0
	bra.b adrtoa_BMON
nibtoa_BMON:move.b #"$",(a0)+
nibtoaBMON:	movem.l d0-d2,-(a7)
	moveq #1-1,d2
	ror.l #4,d0
	bra.b lta0BMON
bytetoa_BMON:move.b #"$",(a0)+
bytetoaBMON:movem.l d0-d2,-(a7)
	moveq #2-1,d2
	ror.l #8,d0
	bra.b lta0BMON
wordtoa_BMON:move.b #"$",(a0)+
wordtoaBMON:movem.l d0-d2,-(a7)
	moveq #4-1,d2
	swap d0
	bra.b lta0BMON
adrtoa_BMON:move.b #"$",(a0)+
adrtoaBMON:	movem.l d0-d2,-(a7)
	moveq #6-1,d2
	lsl.l #8,d0
	bra.b lta0BMON
longtoa_BMON:move.b #"$",(a0)+

longtoaBMON:movem.l d0-d2,-(a7)
	moveq #8-1,d2
lta0BMON:	rol.l #4,d0
	moveq #$0f,d1
	and.w d0,d1
	move.b l2asciiBMON(pc,d1.w),(a0)+
	dbf d2,lta0BMON
	movem.l (a7)+,d0-d2
	rts
l2asciiBMON:dc.b "0123456789abcdef"
hextoa_BMON:movem.l d0-d3,-(a7)
	moveq #9,d2
	cmp.l d2,d0
	bls.b hta3BMON
	move.b #"$",(a0)+
hta3BMON:	sf d3
	moveq #8-1,d2
hta0BMON:	rol.l #4,d0
	moveq #$0f,d1
	and.w d0,d1
	bne.b hta1BMON
	tst.w d2
	beq.b hta1BMON
	tst.b d3
	beq.b hta2BMON
hta1BMON:	st d3
	move.b l2asciiBMON(pc,d1.w),(a0)+
hta2BMON:	dbf d2,hta0BMON			
	movem.l (a7)+,d0-d3
	rts
wordtodBMON:move.l d0,-(a7)
	ext.l d0
	divu #1000,d0
	add.b #"0",d0
	move.b d0,(a0)+
	clr.w d0
	swap d0
	divu #100,d0
	add.b #"0",d0
	move.b d0,(a0)+
	swap d0
	bra.b btd0BMON
bytetodBMON:move.l d0,-(a7)
btd0BMON:	cmp.b #99,d0
	bls.b btd1BMON
	moveq #99,d0	
btd1BMON:	ext.w d0
	ext.l d0
	divu #10,d0
	bra.b ntd1BMON
nibtodBMON:	move.l d0,-(a7)
	moveq #%1111,d0
	and.l (a7),d0
	divu #10,d0
	beq.b ntd0BMON
ntd1BMON:	add.b #"0",d0
	move.b d0,(a0)+
ntd0BMON:	swap d0
	add.b #"0",d0
	move.b d0,(a0)+
	move.l (a7)+,d0
	rts
hextodBMON:	movem.l d0-d4/a1,-(a7)
	lea divtabBMON(pc),a1
	moveq #10-1,d1
	sf d4
hd0BMON:	moveq #"0",d2
	move.l (a1)+,d3
hd1BMON:	cmp.l d3,d0
	bcs.b hd2BMON
	st d4
	sub.l d3,d0
	addq.b #1,d2
	bra.b hd1BMON
hd2BMON:	tst.w d1
	beq.b hd4BMON
	tst.b d4
	beq.b hd3BMON
hd4BMON:	move.b d2,(a0)+
hd3BMON:	dbf d1,hd0BMON
	movem.l (a7)+,d0-d4/a1
	rts
divtabBMON:	dc.l 1000000000,100000000,10000000,1000000
	dc.l 100000,10000,1000,100,10,1

hextobBMON:	movem.l d0-d4,-(a7)
	sf d4
	bsr.b hb3BMON	
	bsr.b hb3BMON	
	bsr.b hb3BMON	
	st d4
	bsr.b hb3BMON	
	movem.l (a7)+,d0-d4
	rts
hb3BMON:	rol.l #8,d0
	move.b d0,d3
	bne.b hb2BMON
	tst.b d4
	beq.b hb4BMON
hb2BMON:	st d4
bytetobBMON:moveq #8-1,d2
hb0BMON:	moveq #"0",d1
	add.b d3,d3
	bcc.b hb1BMON
	moveq #"1",d1
hb1BMON:	move.b d1,(a0)+
	dbf d2,hb0BMON
	move.b #" ",(a0)+
hb4BMON:	rts

	ifne HRTeval

atolong_BMON
atolongBMON
atoword_BMON
atowordBMON
atobyte_BMON
atobyteBMON
atodnibBMON
atodlongBMON
		movem.l	d1-d7/a0-a2/a4-a6,-(a7)
		move.l	a3,a0
		bsr	evaluate
		move.l	a0,a3
		movem.l	(a7)+,d1-d7/a0-a2/a4-a6
		tst.l	d0
		rts

	else

atolong_BMON:cmp.b #"$",(a3)
	bne.b atolongBMON
	addq.w #1,a3
atolongBMON:moveq #8-1,d2
	bra.b atob2BMON
atoword_BMON:cmp.b #"$",(a3)
	bne.b atowordBMON
	addq.w #1,a3
atowordBMON:moveq #4-1,d2
	bra.b atob2BMON
atobyte_BMON:cmp.b #"$",(a3)
	bne.b atobyteBMON
	addq.w #1,a3
atobyteBMON:moveq #2-1,d2
atob2BMON:	moveq #0,d0
atob1BMON:	move.b (a3),d1
	cmp.b #"f",d1
	bhi.b atob3BMON
	sub.b #"0",d1
	bcs.b atob3BMON
	cmp.b #9,d1
	bls.b atob0BMON
	cmp.b #"a"-"0",d1
	bcs.b atob3BMON
	sub.b #"a"-"0"-10,d1
atob0BMON:	lsl.l #4,d0
	or.b d1,d0
	addq.w #1,a3
	dbf d2,atob1BMON
atob3BMON:	tst.l d0
	rts
atodnibBMON:moveq #0,d0		;0-99
	move.b (a3),d1
	sub.b #"0",d1
	bcs.b atdnb0BMON
	cmp.b #9,d1
	bhi.b atdnb0BMON
	addq.w #1,a3
	move.b d1,d0
	move.b (a3),d1
	sub.b #"0",d1
	bcs.b atdnb0BMON
	cmp.b #9,d1
	bhi.b atdnb0BMON
	addq.w #1,a3
	mulu #10,d0
	add.b d1,d0
atdnb0BMON:	tst.b d0
	rts
atodlongBMON:
	moveq #0,d0
	moveq #0,d1
	moveq #10-1,d2
atol1BMON:	move.b (a3),d1
	sub.b #"0",d1
	bcs.b atodl0BMON
	cmp.b #9,d1
	bhi.b atodl0BMON
	addq.w #1,a3
	add.l d0,d0		;*2
	move.l d0,-(a7)
	lsl.l #2,d0		;*2*4
	add.l (a7)+,d0
	add.l d1,d0
	dbf d2,atol1BMON
atodl0BMON:	rts

	endc

;----------------------------------------------------------
fpuinstBMON:dc.b %10110000,"sinco","s"+128	;order!
	dc.b %00011000,"ab","s"+128,0,0,0
	dc.b %01011000,"sab","s"+128,0,0
	dc.b %01011100,"dab","s"+128,0,0
	dc.b %00011100,"aco","s"+128,0,0
	dc.b %10100010,"ad","d"+128,0,0,0
	dc.b %11100010,"sad","d"+128,0,0
	dc.b %11100110,"dad","d"+128,0,0
	dc.b %00001100,"asi","n"+128,0,0
	dc.b %00001010,"ata","n"+128,0,0
	dc.b %00001101,"atan","h"+128,0
	dc.b %10111000,"cm","p"+128,0,0,0
	dc.b %00011101,"co","s"+128,0,0,0
	dc.b %00011001,"cos","h"+128,0,0
	dc.b %10100000,"di","v"+128,0,0,0
	dc.b %11100000,"sdi","v"+128,0,0
	dc.b %11100100,"ddi","v"+128,0,0
	dc.b %00010000,"eto","x"+128,0,0
	dc.b %00011110,"getex","p"+128
	dc.b %00011111,"getma","n"+128
	dc.b %00000001,"in","t"+128,0,0,0
	dc.b %00000011,"intr","z"+128,0
	dc.b %00010101,"log1","0"+128,0
	dc.b %00010110,"log","2"+128,0,0
	dc.b %00010100,"log","n"+128,0,0
	dc.b %00000110,"lognp","1"+128	
	dc.b %10100001,"mo","d"+128,0,0,0
movetxtBMON:dc.b %10000000,"mov","e"+128,0,0
	dc.b %11000000,"smov","e"+128,0
	dc.b %11000100,"dmov","e"+128,0
	dc.b %10100011,"mu","l"+128,0,0,0
	dc.b %11100011,"smu","l"+128,0,0
	dc.b %11100111,"dmu","l"+128,0,0
	dc.b %00011010,"ne","g"+128,0,0,0
	dc.b %01011010,"sne","g"+128,0,0
	dc.b %01011110,"dne","g"+128,0,0
	dc.b %10100101,"re","m"+128,0,0,0
	dc.b %10100110,"scal","e"+128,0
	dc.b %10100100,"sgldi","v"+128
	dc.b %10100111,"sglmu","l"+128
	dc.b %00001110,"si","n"+128,0,0,0
	dc.b %00000010,"sin","h"+128,0,0
	dc.b %00000100,"sqr","t"+128,0,0
	dc.b %01000001,"ssqr","t"+128,0
	dc.b %01000101,"dsqr","t"+128,0
	dc.b %10101000,"su","b"+128,0,0,0
	dc.b %11101000,"ssu","b"+128,0,0
	dc.b %11101100,"dsu","b"+128,0,0
	dc.b %00001111,"ta","n"+128,0,0,0
	dc.b %00001001,"tan","h"+128,0,0
	dc.b %00010010,"tento","x"+128
	dc.b %00111010,"ts","t"+128,0,0,0
	dc.b %00010001,"twoto","x"+128
	dc.b 0	
	even	
;----------------------------------------------------------
ccodetxtBMON:	dc.b "t",0,"f",0,"hilscccsneeqvcvsplmigeltgtle"	;even!
pccodetxtBMON:	dc.b "bsbclslcssscasacwswcisicgsgccscc"	;even!
fccodetxtBMON:	dc.l "f"<<24	;fpu condition codesBMON
		dc.l "eq"<<16
		dc.l "ogt"<<8
		dc.l "oge"<<8
		dc.l "olt"<<8
		dc.l "ole"<<8
		dc.l "ogl"<<8
		dc.l "or"<<16
		dc.l "un"<<16
		dc.l "ueq"<<8
		dc.l "ugt"<<8
		dc.l "uge"<<8
		dc.l "ult"<<8
		dc.l "ule"<<8
		dc.l "ne"<<16
		dc.l "t"<<24
		dc.l "sf"<<16
		dc.l "seq"<<8
		dc.l "gt"<<16
		dc.l "ge"<<16
		dc.l "lt"<<16
		dc.l "le"<<16
		dc.l "gl"<<16
		dc.l "gle"<<8
		dc.l "ngle"
		dc.l "ngl"<<8
		dc.l "nle"<<8
		dc.l "nlt"<<8
		dc.l "nge"<<8
		dc.l "ngt"<<8
		dc.l "sne"<<8
		dc.l "st"<<16

fmconstBMON:dc.b "1","E"+$80,"P","i"+$80,"Log10(2",")"+$80,"e"+$80,"Log2(e",")"+$80
	dc.b "Log10(e",")"+$80,"0.","0"+$80,"ln(2",")"+$80,"ln(10",")"+$80
	dc.b "1"+$80,"1","0"+$80,"10","0"+$80

usptxtBMON:		dc.b "us","p"+$80
toccrtxtBMON:	dc.b ","
ccrtxtBMON:		dc.b "cc","r"+$80
tosrtxtBMON:	dc.b ","
srtxtBMON:		dc.b "s","r"+$80
xbcdtxtBMON:	dc.b "),-","("+$80
cmpmtxtBMON:	dc.b ")+,","("+$80
		even
cregsBMON:	dc.b $08,$08,"pcr",0	;68060
		dc.b $08,$07,"srp",0	;68040
		dc.b $08,$06,"urp",0	;68040
		dc.b $08,$05,"mmur"	;68040
		dc.b $08,$04,"isp",0
		dc.b $08,$03,"msp",0
		dc.b $08,$02,"caar"	;68020/30 only
		dc.b $08,$01,"vbr",0
		dc.b $08,$00,"usp",0
		dc.b $00,$08,"busr"	;68060
		dc.b $00,$07,"dtt1"	;68040
		dc.b $00,$06,"dtt0"	;68040
		dc.b $00,$05,"itt1"	;68040
		dc.b $00,$04,"itt0"	;68040
		dc.b $00,$03,"tc",0,0	;68040
		dc.b $00,$02,"cacr"
		dc.b $00,$01,"dfc",0
		dc.b $00,$00,"sfc",0
		dc.b $80
pregsBMON:	dc.b $08,"tt","0"+$80
		dc.b $0c,"tt","1"+$80
		dc.b $40,"t","c"+$80
		dc.b $44,"dr","p"+$80	;68851 only
		dc.b $48,"sr","p"+$80
		dc.b $4c,"cr","p"+$80
		dc.b $50,"ca","l"+$80	;68851 only
		dc.b $58,"sc","c"+$80	;68851 only
		dc.b $5c,"a","c"+$80	;68851 only
		dc.b $60,"mmus","r"+$80	;68030 mmusr = 68851 psr
		dc.b $60,"ps","r"+$80	;68030 mmusr = 68851 psr
		dc.b $64,"pcs","r"+$80	;68851 only
		dc.b $ac,"va","l"+$80,0	;68851 only

sizemovBMON:	dc.b "*blw",%11,%00,%10,%01
		even


;----------------------------------------------------------

linebufBMON		dc.l 0

modeBMON		dc.b 0

imsizeBMON:	dc.b 0			;%00.b,%01.w,%10.l,%11.*,%100.x
ea2ndBMON:	dc.b 0			;0:1st eavalue,ff:2nd eavalue
dissignBMON:dc.b %101 	;bit0:nosign/sign,bit1:hex/dez,bit2:no eavalBMON/eavalBMON
	even

baseregBMON		dc.l 0		;effective addressBMON accu
disaddrBMON		dc.l 0

;----------------------------------------------------------
regsBMON:	blk.l 16+6+1+1,0 ;regsBMON/usp/isp/msp/vbr/cacr/caar/pc/sr.w
vbregBMON=19*4+regsBMON
sfcdfcBMON:	dc.w 0			;00000xxx00000yyy
fpuregsBMON:blk.l 8*12,0		;fp0..7:80+16bit
fpcrBMON:	dc.l 0			;\
fpsrBMON:	dc.l 0			; )union
fpiarBMON:	dc.l 0			;/
mmutt0BMON:	dc.l 0			;\
mmutt1BMON:	dc.l 0			; \
mmutcBMON:	dc.l 0			;  )union
mmusrpBMON:	dc.l 0,0		;  )
mmucrpBMON:	dc.l 0,0		; /
mmusrBMON:	dc.w 0			;/
mmudrpBMON:	dc.l 0,0		;68851 only



