; GWDISS1_ASM on WIN1_ASS & H9
; 7th January 1998
;
	ERR
SETSC	MACRO
	LEA	\1,A1
	MOVEA.W	\2,A2
	JSR	(A2)
	LEA	\3(A6),A1
	MOVE.L	A0,(A1)
	ENDM
;
SBOR	MACRO
	MOVEA.L	\1(A6),A0
	MOVEQ	#SD_CLEAR,D0
	TRAP	#3
	MOVE.B	\2,D1     color
	MOVE.B	\2+1,D2   width
	EXT.W	D2
	MOVEQ	#SD_BORDR,D0
	TRAP	#3
	ENDM
;
WHITEN	MACRO
	BSR	CUROF
	MOVEA.L	CH_COM(A6),A0
	MOVEQ	#GREEN,D1
	BSR	INK
	MOVEQ	#\1,D1
	MOVEQ	#0,D2
	BSR	AT
	LEA	\2,A1
	BSR	UMT1
	MOVEQ	#WHITE,D1
	BSR	INK
	ENDM
;
WHITE	EQU	7
BLACK	EQU	0
GREEN	EQU	4
RED	EQU	2
PR27	EQU	PR0
PR31	EQU	PR30
LBUF	EQU	0                   (70W)
BUF	EQU	LBUF+140            (20L)
TOUT	EQU	BUF+80              (W)
PROMPT1	EQU	TOUT+2              (42B)
PROMPT2	EQU	PROMPT1+42          (42B)
PROMPT3	EQU	PROMPT2+42          (42B)
CH_EDW	EQU	PROMPT3+42          (L)
CH_WW	EQU	CH_EDW+4            (L)
CH_SCR	EQU	CH_WW+4             (L)
CH_COM	EQU	CH_SCR+4            (L)
CH_OPUT	EQU	CH_COM+4            (L)
PC_ALT	EQU	CH_OPUT+4           (L)
PC_START	EQU	PC_ALT+4            (L)
STACK	EQU	PC_START+4          (L)
HLIST	EQU	STACK+4             (L)
OBUF	EQU	LBUF+36
VERSION	EQU	?"V2.20"
;
	BRA.S	START
	DS.L	1
	DC.W	$4AFB
NAM	DC.W	NAME-NAM-2
	DC.B	"GW_DISASSEMBLER ",VERSION
NAME	DS.B	0
;
RESTART	MOVEA.L	CH_OPUT(A6),A0
	MOVEQ	#IO_CLOSE,D0
	TRAP	#2
	MOVEA.L	CH_COM(A6),A0
	BRA	START_1
;
WEEWEE	DC.W	2,1,0,216
ALT_CUR	MOVE.L	#$20001,SD_XINC(A0) very small cursor
	RTS
;
;
START	LEA	(A6,A5.L),A7        set stack
	LEA	(A6,A4.L),A6        set pointer to DATA SPACE
	MOVE.L	A7,STACK(A6)
	PEA	FILEDEV
	PEA	PROMPT1(A6)
	BSR	QSTRCPY
	MOVE.W	#1,PROMPT2(A6)
	MOVE.B	#"0",PROMPT2+2(A6)
	MOVE.W	#1,PROMPT3(A6)
	MOVE.B	#"0",2+PROMPT3(A6)
	LEA	HEAD9,A0
	MOVE.L	A0,HLIST(A6)
	LEA	HEAD8,A0
	MOVE.L	A0,HLIST+4(A6)
	LEA	HEAD7,A0
	MOVE.L	A0,HLIST+8(A6)
	LEA	HEAD6,A0
	MOVE.L	A0,HLIST+12(A6)
	SETSC	CON_WW,UT_CON,CH_WW    open wee window
;
; Now set a wee wee windae
;
	MOVEQ	#-1,D3              timeout
	MOVEA.L	CH_WW(A6),A0
	LEA	ALT_CUR,A2          routine to reduce size
	MOVEQ	#SD_EXTOP,D0
	TRAP	#3
	MOVEQ	#0,D1
	MOVEQ	#0,D2
	LEA	WEEWEE,A1           tiny wee window
	MOVEQ	#SD_WDEF,D0
	TRAP	#3
	SETSC	SCR_OP,UT_SCR,CH_SCR   open
	SETSC	EDL_WIN,UT_CON,CH_EDW    |
	SETSC	CON_CM,UT_CON,CH_COM  windows
START_1	MOVEQ	#SD_CLEAR,D0
	TRAP	#3
	MOVEM.L	A7,-(A7)
	CMPA.L	(A7),A7
	BNE	BAD_EXIT  not 68020+
	ADDQ.L	#4,A7
	BRA.S	MENU_3
;
MENU_1	MOVEQ	#SD_CLEAR,D0
	TRAP	#3
MENU_3	LEA	HEAD1,A1
	BSR	UMT1
	LEA	HEAD2,A1
	BSR	UMT1
	BSR	CURON     put on wee windae's cursor
MENU_2	MOVEQ	#IO_FBYTE,D0
	TRAP	#3
	CMPI.B	#'1',D1
	BEQ	DOOP      start operations
	CMPI.B	#'2',D1
	BEQ	QUIT      stop program
	CMPI.B	#$F4,D1   'F4'
	BNE.S	MENU_2    refresh screen
	SBOR	CH_SCR,SCR_OP
	SBOR	CH_COM,CON_CM
	BRA.S	MENU_1
;
DOOP	WHITEN	0,HEAD1
	LEA	PROMPT1(A6),A4
	LEA	HEAD3,A5
GET_F3	MOVEA.L	CH_COM(A6),A0
GET_F	BSR	EDLIN     get out-file
	BEQ	MENU_1    zero file, go back
	MOVEQ	#2,D3     OPEN_NEW
GET_F4	MOVEA.L	A4,A0     filename
	MOVEQ	#-1,D1
	MOVEQ	#IO_OPEN,D0
	TRAP	#2
	TST.L	D0
	BEQ.S	GET_F2
	CMPI.B	#-8,D0
	BEQ.S	GET_F1    file exists
	BSR	BLP       make noise
	BRA.S	GET_F3
GET_F1	MOVEA.L	CH_COM(A6),A0
	BSR	CLR
	LEA	EMESS,A1
	BSR	UMT
	BSR	CURON
GET_F5	MOVEQ	#IO_FBYTE,D0
	TRAP	#3
	BCLR	#5,D1
	CMPI.B	#'T',D1
	BNE.S	GET_F6
	BSR	CUROF
	BRA	GET_F3
GET_F6	CMPI.B	#"O",D1
	BNE.S	GET_F7
	MOVEQ	#3,D3
GET_F8	SWAP	D3
	MOVE.W	#-1,D3    timeout
	BSR	CUROF
	SWAP	D3
	EXT.L	D3        type of OPEN
	BRA	GET_F4
GET_F7	CMPI.B	#"A",D1
	BNE.S	GET_F5
	MOVEQ	#0,D3
	BRA.S	GET_F8
;
GET_F2	MOVE.L	A0,CH_OPUT(A6)   keep CH_ID
	TST.B	D3
	BNE.S	GET_F9    not 'OPEN'
	MOVE.L	#$100000,D1
	MOVEQ	#-1,D3
	MOVEQ	#FS_POSAB,D0
	TRAP	#3
GET_F9	MOVEQ	#1,D6     count
	LEA	PROMPT2(A6),A4
	LEA	HEAD4,A5
	MOVEA.L	CH_COM(A6),A0
GET_SA	BSR	EDLIN
	LEA	2(A4),A1
	BSR	HEX       get no -> D5.L
	BPL.S	GET_SA2
GET_SA1	BSR	BLP       make noise
	BRA.S	GET_SA
GET_SA2	BTST	#0,D5
	BNE.S	GET_SA1
	TST.W	D6
	BEQ.S	GET_SA3   D5 = start for printing
	LEA	PC_START(A6),A1
	MOVE.L	D5,(A1)
	BRA.S	GET_SA4
GET_SA3	SUB.L	PC_START(A6),D5
	LEA	PC_ALT(A6),A1
	MOVE.L	D5,(A1)
GET_SA4	LEA	PROMPT3(A6),A4
	LEA	HEAD5,A5
	DBF	D6,GET_SA
	MOVEQ	#BLACK,D1
	BSR	STRIP
	BSR	CLR
	MOVEQ	#WHITE,D4
	MOVEQ	#3,D7     count-1
GET_SA5	EORI.B	#3,D4     switch WHITE <-> GREEN
	MOVE.B	D4,D1
	BSR	INK
	MOVEA.L	HLIST(A6,D7.W*4),A1
	BSR	UMT1
	DBF	D7,GET_SA5
	MOVEQ	#RED,D1
	BSR	STRIP
	MOVEA.L	PC_START(A6),A4
	MOVE.W	#-1,TOUT(A6)      Timeout = -1
	BRA	DISS_1            skip wait 1st time
;
DISS	MOVEQ	#-1,D3
	BSR	CURON
	MOVE.W	TOUT(A6),D3
	MOVEQ	#IO_FBYTE,D0
	TRAP	#3
	TST.L	D0
	BNE.S	DISS_1    go on (no character)
	CMPI.B	#232,D1   F1
	BNE.S	DISS_2
	EORI.W	#-1,TOUT(A6)  switch timeout
	BRA.S	DISS_1
DISS_2	CMPI.B	#27,D1
	BEQ	RESTART   ESC -> go again
DISS_1	MOVE.W	(A4)+,D7  op
	BSR	C_LBUF    clear buffer
	LEA	MC_L,A1
	MOVEQ	#-1,D0
DIS_1	ADDQ.W	#1,D0     count
	MOVE.W	D7,D1
	AND.W	(A1,D0.W*4),D1
	CMP.W	2(A1,D0.W*4),D1
	BNE.S	DIS_1     not found
	MOVE.W	TYPE(D0.W*2),D6     type to D6
	LEA	NAMES,A1
	ADDA.W	NLIST(D0.W*2),A1
	MOVE.W	(A1)+,D1  length of name
	LEA	OBUF(A6),A0
	BRA.S	DIS_2
DIS_3	MOVE.B	(A1)+,(A0)+
DIS_2	DBF	D1,DIS_3
	LEA	PR,A1
	ADDA.W	(A1,D6.W*2),A1
	JSR	(A1)      go to op type
;
; On entry to 'op type' D7 = op, A0 is the pointer to OBUF for output
;                       A4 is the pointer to the instruction stream.
;
; Now do printing
;
	LEA	OBUF(A6),A1
	MOVE.L	A0,D7
	SUB.L	A1,D7     length of text in OBUF
	SWAP	D7
	MOVE.L	A4,D6     keep end of BIN
	LEA	PC_START(A6),A4
	MOVE.L	(A4),D5
	MOVE.L	PC_ALT(A6),D0
	ADD.L	D0,(A4)
	LEA	LBUF(A6),A0
	MOVEA.W	CN_ITOHL,A2
	BSR	PA_HX
	MOVE.L	D6,-4(A4)
	SUB.L	D5,D6
	MOVE.W	D6,D7
	SWAP	D7
	MOVEA.L	D5,A4
PA_L0	SWAP	D7
	BEQ	PA_END
	TST.W	D7        more binary?
	BEQ.S	PA_L4     no
	LEA	LBUF+9(A6),A0 start of BIN
	MOVEQ	#0,D5
	MOVE.W	D7,D5
	CMPI.W	#10,D7
	BLT.S	PA_L1
	MOVE.W	#10,D5
PA_L1	SUB.W	D5,D7
	ROR.L	#1,D5
	MOVEA.W	CN_ITOHW,A2
	BRA.S	PA_L2
PA_L3	MOVE.B	#32,(A0)+
	BSR	PA_HX
PA_L2	DBF	D5,PA_L3
	BTST	#31,D5
	BEQ.S	PA_L4
	MOVEA.W	CN_ITOHB,A2
	BSR	PA_HX
PA_L4	SWAP	D7
	TST.W	D7
	BEQ	PA_L8     no more text
	MOVEQ	#44,D4    length of rest of line
	MOVE.W	D4,D2
	CMP.W	D4,D7
	BGT.S	PA_L5
	MOVE.W	D7,D2
PA_L5	SUB.W	D2,D7     count down D7
PA_L9	ADDI.W	#34,D2    length of line
	MOVEA.L	CH_OPUT(A6),A0
	BSR	DOL
	MOVEA.L	CH_SCR(A6),A0
	BSR	DOL
	LEA	OBUF(A6),A0
	LEA	(A0,D4.W),A1
	MOVE.W	D7,D5
	BRA.S	PA_L6
PA_L7	MOVE.B	(A1)+,(A0)+
PA_L6	DBF	D5,PA_L7
	BSR	C_LBUF2
	BRA	PA_L0
;
PA_L8	MOVEQ	#0,D2
	BRA.S	PA_L9
;
DOL	LEA	LBUF+2(A6),A1
	MOVEQ	#IO_SSTRG,D0
	MOVEQ	#-1,D3
	TRAP	#3
	MOVEQ	#10,D1    LF
	MOVEQ	#IO_SBYTE,D0
	TRAP	#3
	RTS
;
PA_END	MOVEA.L	PC_START(A6),A4
	BRA	DISS      do next line
;
; This fills the output buffer with SPACES
;  C_LBU2 clears the 1st 17 words
;  C_LBUF clears the whole buffer
;
C_LBUF2	MOVEQ	#16,D1
	BRA.S	C_LBUF3
C_LBUF	MOVEQ	#66,D1
C_LBUF3	MOVE.W	#$2020,D0
	LEA	LBUF(A6),A0
C_LBUF1	MOVE.W	D0,(A0)+
	DBF	D1,C_LBUF1
	RTS
;
; EDLIN uses the heading in A5
;  to request the prompt in A4
;
EDLIN	BSR	CLR       clears the right part of the window
	MOVEQ	#GREEN,D1
	BSR	INK
	MOVEA.L	A5,A1
	BSR	UMT1
	MOVEQ	#WHITE,D1
	BSR	INK
	MOVEA.L	CH_EDW(A6),A0 EDLIN window
	MOVEQ	#SD_CLEAR,D0
	TRAP	#3
	MOVEQ	#0,D1      cursor pos
	MOVE.W	(A4),D1   length of prompt
	MOVE.W	#40,D2    length of buffer
	LEA	2(A4),A1
	ADDA.W	D1,A1
	MOVEQ	#IO_EDLIN,D0
	TRAP	#3
	MOVE.L	A1,D0
	LEA	2(A4),A1
	SUB.L	A1,D0
	SUBQ.W	#1,D0     new length of prompt
	MOVE.W	D0,(A4)
	MOVEA.L	CH_COM(A6),A0
	RTS
;
CLR	MOVEQ	#25,D1
	MOVEQ	#0,D2
	BSR	AT
	MOVEQ	#SD_CLRRT,D0
	TRAP	#3
	RTS
;
DN	MOVE.W	D7,D0
	LSR.W	#8,D0
	LSR.W	#1,D0
	AND.W	#7,D0
	ADDI.W	#"0",D0
	MOVE.B	#"D",(A0)+
	MOVE.B	D0,(A0)+
	RTS
;
N_AN	MOVEA.W	CN_ITOHW,A2
	BSR	PA_HX
	MOVE.B	#"(",(A0)+
	MOVE.B	#"A",(A0)+
	MOVE.B	D7,D0
	ANDI.B	#7,D0
	ADDI.B	#"0",D0
	MOVE.B	D0,(A0)+
	MOVE.B	#")",(A0)+
	RTS
;
; To print string @ A1
;
STR	MOVE.W	(A1)+,D0
	BRA.S	STR_1
STR_2	MOVE.B	(A1)+,(A0)+
STR_1	DBF	D0,STR_2
	RTS
;
BITS	MOVE.W	D7,D0
	ANDI.W	#192,D0
	LSR.W	#5,D0
	MULS	#3,D0
	LEA	BTS(D0.W),A1
	BRA	STR
;
BTS	DC.W	3
	DC.B	'TST'
	DC.W	3
	DC.B	'CHG'
	DC.W	3
	DC.B	'CLR'
	DC.W	3
	DC.B	'SET'
;
BACK	MOVEQ	#7,D3
BACK_1	LSL.B	#1,D1
	LSR.B	#1,D0
	BCC.S	BACK_2
	ADDQ.B	#1,D1
BACK_2	DBF	D3,BACK_1
	RTS
;
; Reglist D3.B = 'A' or 'D' or D3.W = 'FP'
;         D0.B = array of bits
;
RGL	TST.B	D0
	BNE.S	RGL_1
	RTS
RGL_1	MOVEQ	#7,D4
RGL_2	BTST	D4,D0
	BEQ.S	RGL_3
	BSR	RGL_S
	SWAP	D0
	MOVE.B	#55,D0
	SUB.B	D4,D0
	MOVE.B	D0,(A0)+
	SWAP	D0
	TST.B	D4
	BNE.S	RGL_4
	MOVE.B	#"/",(A0)+
	BRA.S	RGL_3
RGL_4	SUBQ.W	#1,D4
	BTST	D4,D0
	BNE.S	RGL_5
	MOVE.B	#"/",(A0)+
	BRA.S	RGL_3
RGL_5	TST.B	D4
	BEQ.S	RGL_6
RGL_7	SUBQ.W	#1,D4
	BTST	D4,D0
	BNE.S	RGL_6
	MOVE.B	#"-",(A0)+
	BSR	RGL_S
	SWAP	D0
	MOVE.B	#54,D0
	SUB.B	D4,D0
	MOVE.B	D0,(A0)+
	SWAP	D0
	MOVE.B	#"/",(A0)+
	BRA.S	RGL_3
RGL_6	TST.B	D4
	BNE.S	RGL_7
	MOVE.B	#"-",(A0)+
	BSR	RGL_S
	MOVE.W	#"7/",(A0)+
RGL_3	TST.B	D4
	BNE.S	RGL_8
	SUBQ.L	#1,A0
	RTS
RGL_8	SUBQ.W	#1,D4
	BRA.S	RGL_2
;
RGL_S	CMPI.B	#"P",D3
	BNE	RGL_S1
	MOVE.W	D3,(A0)+
	RTS
RGL_S1	MOVE.B	D3,(A0)+
	RTS
;
DO_COND	LEA	CNC(D0.W*4),A1
	BRA	STR
;
CNC	DC.W	1
	DC.B	'T'
	DC.W	1
	DC.B	'F'
	DC.W	2
	DC.B	'HI'
	DC.W	2
	DC.B	'LS'
	DC.W	2
	DC.B	'CC'
	DC.W	2
	DC.B	'CS'
	DC.W	2
	DC.B	'NE'
	DC.W	2
	DC.B	'EQ'
	DC.W	2
	DC.B	'VC'
	DC.W	2
	DC.B	'VS'
	DC.W	2
	DC.B	'PL'
	DC.W	2
	DC.B	'MI'
	DC.W	2
	DC.B	'GE'
	DC.W	2
	DC.B	'LT'
	DC.W	2
	DC.B	'GT'
	DC.W	2
	DC.B	'LE'
;
OFW	BTST	#5,D0
	BEQ.S	OFW_1
	MOVE.B	#'D',(A0)+
	ANDI.W	#7,D0
	ADDI.W	#'0',D0
	MOVE.B	D0,(A0)+
	RTS
OFW_1	ANDI.W	#$1F,D0
OFW_2	MOVEA.W	CN_ITOHB,A2
	MOVE.L	A4,-(A7)
	LEA	BUF(A6),A4
	MOVE.B	D0,(A4)
	BSR	PA_HX
	MOVEA.L	(A7)+,A4
	RTS
;
OW	MOVE.B	#'{',(A0)+
	BFEXTU	D6{20:6},D0
	BSR	OFW
	MOVE.B	#":",(A0)+
	BFEXTU	D6{26:6},D0
	BNE.S	OW_1
	MOVEQ	#32,D0
	BSR	OFW_2
	BRA.S	OW_2
OW_1	BSR	OFW
OW_2	MOVE.B	#"}",(A0)+
	RTS
;
; EA
;  D3.B = reg
;  D4.W = mode
;  D5   = size
;
EA	LEA	EA_L,A1
	ADDA.W	(A1,D4.W*2),A1
	JMP	(A1)
;
EA_L	DC.W	EA0-EA_L
	DC.W	EA11-EA_L
	DC.W	EA2-EA_L
	DC.W	EA3-EA_L
	DC.W	EA4-EA_L
	DC.W	EA5-EA_L
	DC.W	EA6-EA_L
	DC.W	EA7-EA_L
;
EA0	MOVE.B	#'D',(A0)+
EA0_1	MOVE.B	D3,D0
	ADDI.B	#'0',D0
	MOVE.B	D0,(A0)+
	RTS
EA11	MOVE.B	#'A',(A0)+
	BRA.S	EA0_1
EA4	MOVE.B	#'-',(A0)+
EA2	MOVE.B	#"(",(A0)+
	MOVE.B	#"A",(A0)+
	BSR.S	EA0_1
	MOVE.B	#")",(A0)+
	RTS
EA3	BSR.S	EA2
	MOVE.B	#"+",(A0)+
	RTS
EA5	MOVE.W	CN_ITOHW,A2
	PEA	EA2
	BRA	PA_HX
EA6	MOVE.W	(A4)+,D6  [EXT]1
	BTST	#8,D6
	BEQ	EA6_N
	MOVE.B	#"(",(A0)+
	MOVE.W	D6,D5
	ANDI.W	#7,D5
	BEQ.S	EA6_1
	MOVE.B	#'[',(A0)+
EA6_1	MOVE.B	D6,D4
	BSET	#31,D7    sep -> ,
	ANDI.W	#48,D4    bd-size*16
	BEQ.S	EA6_2
	CMPI.B	#32,D4
	BMI.S	EA6_3
	BEQ.S	EA6_4
	MOVE.W	CN_ITOHL,A2
EA6_5	BSR	PA_HX
	BRA	EA6_6
EA6_2	MOVE.B	#"?",(A0)+
	MOVE.B	#"?",(A0)+
	BRA	EA6_6
EA6_3	BCLR	#31,D7    sep -> ""
EA6_6	BTST	#7,D6
	BNE	INDR
	BSET	#31,D7
	BEQ.S	EA6_7
	MOVE.B	#',',(A0)+
EA6_7	MOVE.B	#"A",(A0)+
	MOVE.B	D3,D0
	ADDI.B	#"0",D0
	MOVE.B	D0,(A0)+
	BRA	INDR
EA6_4	MOVEA.W	CN_ITOHW,A2
	BRA.S	EA6_5
EA6_N	SUBQ.L	#1,A4     point to byte of [EXT]1
	MOVE.W	CN_ITOHB,A2
	BSR	PA_HX
	MOVE.B	#"(",(A0)+
	MOVE.B	#'A',(A0)+
	MOVE.W	D3,D0
	ADDI.B	#'0',D0
	MOVE.B	D0,(A0)+
	MOVE.B	#',',(A0)+
	BSR	INDXR
	MOVE.B	#")",(A0)+
	RTS
EA7	LEA	M7P,A1
	ADDA.W	(A1,D3.W*2),A1
	JMP	(A1)
;
M7P	DC.W	EA7_1-M7P reg = 0
	DC.W	EA7_2-M7P     = 1
	DC.W	EA7_3-M7P     = 2
	DC.W	EA7_4-M7P     = 3
	DC.W	EA7_8-M7P     = 4
	DC.W	EA7_5-M7P   error
	DC.W	EA7_5-M7P     "
	DC.W	EA7_5-M7P     "
;
EA7_8	MOVE.B	#'#',(A0)+
	LEA	M7Z,A1
	TST.W	D5
	BMI	EA7_5	---->
	CMPI.W	#7,D5
	BGT	EA7_5	---->
	ADDA.W	(A1,D5.W*2),A1
	JMP	(A1)
;
M7Z	DC.W	EA7_6-M7Z size B
	DC.W	EA7_7-M7Z      W
	DC.W	EA7_2-M7Z      L
	DC.W	EA7_10-M7Z     D
	DC.W	EA7_11-M7Z     P, X
	DC.W	EA7_5-M7Z    error
	DC.W	EA7_12-M7Z   Triple (for FMOVEM.L)
	DC.W	EA7_5-M7Z      "
;
EA7_11	MOVEA.W	CN_ITOHL,A2
	BSR	PA_HX
EA7_10	MOVEA.W	CN_ITOHL,A2
	PEA	EA7_2
	BRA	PA_HX
EA7_5	MOVE.B	#"?",(A0)+
	MOVE.B	#'M',(A0)+
	MOVE.B	#'7',(A0)+
	MOVE.B	#'R',(A0)+
	MOVE.B	D3,D0
	ADDI.B	#'0',D0
	MOVE.B	D0,(A0)+
	MOVE.B	#"?",(A0)+
	RTS
EA7_1	MOVEA.W	CN_ITOHW,A2         reg 0
	BRA	PA_HX
EA7_2	MOVEA.W	CN_ITOHL,A2         reg 1
	BRA	PA_HX
EA7_3	MOVE.W	(A4)+,D0            reg 2
	EXT.L	D0
EA7_3_1	SUBQ.L	#2,D0
	ADD.L	A4,D0
	ADD.L	PC_ALT(A6),D0
	MOVEA.W	CN_ITOHL,A2
	MOVE.L	A4,-(A7)
	LEA	BUF(A6),A4
	MOVE.L	D0,(A4)
	BSR	PA_HX
	MOVEA.L	(A7)+,A4
	MOVE.B	#"(",(A0)+
	MOVE.B	#"P",(A0)+
	MOVE.B	#"C",(A0)+
	MOVE.B	#")",(A0)+
	RTS
EA7_4	MOVE.W	(A4)+,D6
	BTST	#8,D6
	BEQ	EA7_N     indirection
	MOVE.B	#"(",(A0)+
	MOVE.B	D6,D5
	ANDI.B	#7,D5
	BEQ.S	EA7_4_1
	MOVE.B	#'[',(A0)+
EA7_4_1	MOVE.W	D6,D4
	BSET	#31,D7    sep -> ,
	ANDI.W	#48,D4    bd-size*16
	BEQ.S	EA7_4BD0
	CMPI.B	#32,D4
	BMI.S	EA7_4BD1
	BEQ	EA7_4BD2
	BTST	#7,D6
	BNE	EA7_4_2   base suppress
	MOVE.L	(A4)+,D0
	SUBQ.L	#6,D0
EA7_4_4	ADD.L	A4,D0
	ADD.L	PC_ALT(A6),D0
	MOVEA.W	CN_ITOHL,A2
	MOVE.L	A4,-(A7)
	LEA	BUF(A6),A4
	MOVE.L	D0,(A4)
	BSR	PA_HX
	MOVEA.L	(A7)+,A4
	MOVE.B	#',',(A0)+
EA7_4_3	MOVE.B	#'P',(A0)+
	MOVE.B	#'C',(A0)+
	BRA	INDR
EA7_4_2	MOVEA.W	CN_ITOHL,A2
EA7_4_8	BSR	PA_HX
EA7_4_6	MOVE.B	#',',(A0)+
	MOVE.B	#'Z',(A0)+
	BRA.S	EA7_4_3
EA7_4BD1	BTST	#7,D6
	BNE	EA7_4_5   base suppress
	MOVEQ	#-2,D0
	BRA	EA7_4_4
EA7_4_5	MOVE.B	#'0',(A0)+
	BRA	EA7_4_6
EA7_6	ADDQ.L	#1,A4     reg 4 size 0
	MOVEA.W	CN_ITOHB,A2
	BRA	PA_HX
EA7_7	MOVEA.W	CN_ITOHW,A2
	BRA	PA_HX
EA7_4BD0	MOVE.B	#"?",(A0)+
	MOVE.B	#"?",(A0)+
	BRA	EA7_4_3
EA7_4BD2	BTST	#7,D6
	BNE.S	EA7_4_7
	MOVE.W	(A4)+,D0
	EXT.L	D0
	SUBQ.L	#4,D0
	BRA	EA7_4_4
EA7_4_7	MOVEA.W	CN_ITOHW,A2
	BRA	EA7_4_8
EA7_N	MOVE.B	D6,D0
	EXTB.L	D0
	BSR	EA7_3_1
	MOVE.B	#",",-1(A0)         replace ")" by ","
	BSR	INDXR
	MOVE.B	#")",(A0)+
	RTS
;
; Immediate data for up to 3 FPcr's
;
EA7_12	MOVE.L	4(A7),D5  replace the stored D5 (reg list)
	BNE	EA7_12_2  OK
	MOVE.L	#"?No ",(A0)+
	MOVE.L	#"Reg?",(A0)+
	RTS
EA7_12_1	TST.B	D5
	BEQ	EA7_12_3  ended
EA7_12_2	LSR.B	#1,D5     look at next FPcr
	BCC	EA7_12_1  not this one
	MOVEA.W	CN_ITOHL,A2
	BSR	PA_HX     set the next long word
	MOVE.B	#":",(A0)+     separator
	BRA	EA7_12_1  next FPcr
EA7_12_3	SUBQ.L	#1,A0     cut off last ':'
	RTS
;
; INDR
; D5 = i_is
;
INDR	CMPI.B	#4,D5
	BLE.S	INDR_1
	MOVE.B	#']',(A0)+
	BSET	#31,D7
INDR_1	BTST	#6,D6
	BNE.S	INDR_2
	BSET	#31,D7
	BEQ.S	INDR_3
	MOVE.B	#',',(A0)+
INDR_3	BSR	INDXR
INDR_2	CMPI.B	#4,D5
	BGE.S	INDR_4
	CMPI.B	#0,D5
	BLE.S	INDR_4
	MOVE.B	#']',(A0)+
	BSET	#31,D7
INDR_4	TST.B	D5
	BEQ.S	INDR_5
	ANDI.B	#3,D5
	SUBQ.B	#2,D5
	BMI.S	INDR_5
	BEQ.S	INDR_7
	MOVEA.W	CN_ITOHL,A2
	BRA.S	INDR_9
INDR_7	MOVEA.W	CN_ITOHW,A2
INDR_9	BTST	#31,D7
	BEQ.S	INDR_8
	MOVE.B	#',',(A0)+
INDR_8	BSR	PA_HX
INDR_5	MOVE.B	#")",(A0)+
	RTS
;
; Here are all the ops
;
PR0	RTS
;
; MOVE16
;
PR1	BTST	#3,D7
	BEQ	PR1_1
	BSR	PABS
	MOVE.W	#"(A",(A0)+
	BRA	PREG
PR1_1	MOVE.B	#"A",(A0)+
	BSR	PREG
	MOVE.W	#",(",(A0)+
	BSR	PABS
	SUBQ.L	#1,A0
	RTS
;
; OR, AND, SUB, ADD
;
PR2	MOVE.W	D7,D5
	AND.W	#192,D5
	LSR.W	#6,D5
	BSR	DO_DOT
	MOVE.B	#'#',(A0)+
	CMPI.B	#1,D5
	BMI.S	PR2_1     B
	BEQ.S	PR2_2     W
	MOVEA.W	CN_ITOHL,A2
	BRA.S	PR2_3
PR2_1	ADDQ.L	#1,A4
	MOVEA.W	CN_ITOHB,A2
	BRA.S	PR2_3
PR2_2	MOVEA.W	CN_ITOHW,A2
PR2_3	BSR	PA_HX
	MOVE.B	#',',(A0)+
	MOVE.W	D7,D0
	ANDI.W	#63,D0
	CMPI.W	#60,D0
	BNE	EA1
	TST.W	D5
	BNE.S	PR2_5
	MOVE.B	#'C',(A0)+
	MOVE.B	#'C',(A0)+
	BRA.S	PR2_6
PR2_5	MOVE.B	#'S',(A0)+
PR2_6	MOVE.B	#'R',(A0)+
	RTS
;
; MOVEP
;
PR3	BTST	#6,D7
	BEQ.S	PR3_1
	MOVE.B	#'L',(A0)+
	BRA.S	PR3_2
PR3_1	MOVE.B	#'W',(A0)+
PR3_2	LEA	OBUF+13(A6),A0
	BTST	#7,D7
	BEQ.S	PR3_3
	BSR	DN
	MOVE.B	#',',(A0)+
	BRA	N_AN
PR3_3	BSR	N_AN
	MOVE.B	#',',(A0)+
	BRA	DN
;
; BTST   Dn,(ea> etc
;
PR4	BSR	BITS
	LEA	OBUF+13(A6),A0
	MOVEQ	#0,D5     size 0
	BSR	DN
PR4_1	MOVE.B	#',',(A0)+
	BRA	EA1
;
; BTST   #d,<ea> etc
;
PR5	BSR	BITS
	LEA	OBUF+13(A6),A0
	MOVEQ	#0,D5
	MOVE.B	#'#',(A0)+
	ADDQ.L	#1,A4
	MOVEA.W	CN_ITOHB,A2
	BSR	PA_HX
	BRA.S	PR4_1
;
; MOVE
;
PR6	MOVE.W	D7,D5
	LSR.W	#8,D5
	LSR.W	#4,D5
	ANDI.W	#3,D5     size
	CMPI.W	#3,D5
	BNE.S	PR6_1
	MOVEQ	#1,D5
PR6_1	BSR	EA1
	MOVE.B	#',',(A0)+
	MOVE.W	D7,D4
	LSR.W	#6,D4
	MOVE.W	D4,D3
	ANDI.W	#7,D4     mode
	LSR.W	#3,D3
	ANDI.W	#7,D3     reg
	BRA	EA
;
; STOP
;
PR7	MOVEA.W	CN_ITOHW,A2
	BRA	PA_HX
;
; SWAP, EXT, UNLK
;
PR8	ANDI.W	#7,D7
	ADDI.W	#'0',D7
	MOVE.B	D7,(A0)+
	RTS
;
; LINK.W
;
PR9	MOVE.W	CN_ITOHW,A2
PR9_1	BSR	PR8
	MOVE.B	#',',(A0)+
	MOVE.B	#'#',(A0)+
	BRA	PA_HX
;
; MOVE  An,USP
;
PR10	BSR.S	PR8
	LEA	ST10,A1
	BRA	STR
;
ST10	DC.W	4
	DC.B	',USP'
;
; TRAP
;
PR11	MOVE.W	D7,D0
	ANDI.L	#$F,D0
	LEA	BUF+2(A6),A1
	BSR	LTOD
	LEA	BUF+2(A6),A2
PR11_2	CMPA.L	A2,A1
	BGE.S	PR11_1
	MOVE.B	(A1)+,(A0)+
	BRA.S	PR11_2
PR11_1	RTS
;
; TST, JSR, JMP
;
PR12	CMPI.B	#'.',-1(A0)
	BEQ.S	PR12_1
	MOVE.W	D7,D5
	LSR.W	#6,D5
	ANDI.W	#3,D5     size
	BSR	DO_DOT
	BRA	EA1
PR12_1	MOVEQ	#2,D5
	MOVE.B	#' ',-1(A0)
	BRA	EA1
;
; MOVE to CCR
;
PR13	MOVEQ	#1,D5
	BSR	EA1
	LEA	CCU,A1
	BRA	STR
;
CCU	DC.W	4
	DC.B	',CCR'
SRU	DC.W	3
	DC.B	',SR'
;
; MOVE to SR
;
PR14	MOVEQ	#1,D5
	BSR	EA1
	LEA	SRU,A1
	BRA	STR
;
; MOVEM
;
PR15	PEA	PR15_2A
PR15_3	MOVEQ	#1,D5
	BTST	#6,D7
	BEQ.S	PR15_1
	ADDQ.W	#1,D5
PR15_1	BRA	DO_DOT
PR15_2A	MOVE.B	(A4)+,D0
	BSR	BACK
	MOVE.B	D1,D2
	MOVE.B	(A4)+,D0
	BSR	BACK
	MOVEM.W	D1/D2,-(A7)
	BSR	EA1
	MOVE.B	#',',(A0)+
	MOVEM.W	(A7)+,D1/D2
	MOVE.B	D2,D0
	BEQ.S	PR15_4
	MOVEQ	#'A',D3
	BSR	RGL
	MOVE.B	#'/',(A0)+
PR15_4	MOVE.B	D1,D0
	BNE.S	PR15_2
	SUBQ.L	#1,A0
	RTS
PR15_2	MOVEQ	#'D',D3
	BRA	RGL
;
; MOVEM
;
PR16	PEA	PR16_1
	BRA	PR15_3
PR16_1	MOVE.W	D7,D0
	ANDI.W	#56,D0
	CMPI.W	#32,D0
	BEQ.S	PR16_2
	MOVE.B	(A4)+,D0
	BSR	BACK
	MOVE.B	D1,D2
	MOVE.B	(A4)+,D0
	BSR	BACK
	MOVE.B	#'A',D3
	MOVE.B	D2,D0
	BEQ.S	PR16_3
	BSR	RGL
	MOVE.B	#'/',(A0)+
PR16_3	MOVE.B	#'D',D3
	BRA.S	PR16_4
PR16_2	MOVE.B	(A4)+,D2
	MOVE.B	(A4)+,D1
	MOVE.B	#'D',D3
	MOVE.B	D2,D0
	BEQ.S	PR16_5
	BSR	RGL
	MOVE.B	#'/',(A0)+
PR16_5	MOVE.B	#'A',D3
PR16_4	MOVE.B	D1,D0
	BNE.S	PR16_6
	MOVE.B	#',',-1(A0)
	BRA	EA1
PR16_6	BSR	RGL
PR16_7	MOVE.B	#',',(A0)+
	BRA	EA1
;
; MUL, CHK, DIV
;
PR17	MOVEQ	#1,D5
	BTST	#7,D7
	BNE.S	PR17_1
	MOVEQ	#2,D5
PR17_1	BSR	DO_DOT
	BSR	EA1
	MOVE.B	#'D',D4
PR17_2	MOVE.W	D7,D3
	LSR.W	#8,D3
	LSR.W	#1,D3
	ANDI.W	#7,D3
	ADDI.W	#'0',D3
	MOVE.B	#',',(A0)+
	MOVE.B	D4,(A0)+
	MOVE.B	D3,(A0)+
	RTS
;
; LEA
;
PR18	MOVEQ	#2,D5
	BSR	EA1
	MOVE.B	#'A',D4
	BRA.S	PR17_2
;
; DBcc
;
PR19	MOVE.W	D7,D0
	LSR.W	#8,D0
	ANDI.W	#15,D0
	BSR	DO_COND
PR19_1	LEA	OBUF+13(A6),A0
	MOVE.B	#'D',(A0)+
	MOVE.W	D7,D0
	ANDI.W	#7,D0
	ADDI.W	#'0',D0
	MOVE.B	D0,(A0)+
	MOVE.B	#',',(A0)+
	MOVE.W	(A4)+,D0
	EXT.L	D0
	SUBQ.L	#2,D0
	ADD.L	A4,D0
	ADD.L	PC_ALT(A6),D0
	MOVE.L	A4,-(A7)
	LEA	BUF(A6),A4
	MOVE.L	D0,(A4)
	MOVEA.W	CN_ITOHL,A2
	BSR	PA_HX
	MOVEA.L	(A7)+,A4
	RTS
;
; Scc, TRPAcc
;
PR20	MOVE.W	D7,D0
	LSR.W	#8,D0
	ANDI.W	#$F,D0
	MOVE.W	D7,D1
	ANDI.W	#63,D1
	CMPI.W	#60,D1
	BGT.S	PR20_1
	CMPI.B	#58,D1
	BLT.S	PR20_1
	LEA	TR,A1
	MOVE.L	D0,-(A7)
	BSR	STR
	MOVE.L	(A7)+,D0
	BSR	DO_COND
PR20_4	MOVE.W	D7,D5
	ANDI.W	#7,D5
	CMPI.W	#4,D5
	BEQ.S	PR20_3
	SUBQ.W	#1,D5
	BSR	DO_DOT
	MOVE.B	#'#',(A0)+
	CMPI.B	#2,D5
	BEQ.S	PR20_2
	MOVEA.W	CN_ITOHW,A2
	BRA	PA_HX
PR20_2	MOVEA.W	CN_ITOHL,A2
	BRA	PA_HX
PR20_3	RTS
PR20_1	MOVE.B	#'S',(A0)+
	BSR	DO_COND
	LEA	OBUF+13(A6),A0
	BRA	EA1
;
TR	DC.W	4
	DC.B	'TRAP'
;
; ADDQ, SUBQ
;
PR21	MOVE.W	D7,D5
	LSR.W	#6,D5
	ANDI.W	#3,D5     size
	BSR	DO_DOT
	MOVE.W	D7,D0
	LSR.W	#8,D0
	LSR.W	#1,D0
	ANDI.W	#7,D0
	BNE.S	PR21_1
	ADDQ.W	#8,D0
PR21_1	MOVE.B	#'#',(A0)+
	ADD.W	#'0',D0
	MOVE.B	D0,(A0)+
	MOVE.B	#',',(A0)+
	BRA	EA1
;
; EXG
;
PR22	MOVE.W	D7,D0
	LSR.W	#3,D0
	MOVE.W	D0,D1
	ANDI.W	#31,D0    om
	LSR.W	#6,D1
	ANDI.W	#7,D1     rx
	ADDI.W	#'0',D1
	MOVE.W	D7,D2
	ANDI.W	#7,D2     ry
	ADDI.W	#'0',D2
	CMPI.W	#8,D0
	BEQ	PR22_8    om 8
	CMPI.W	#9,D0
	BEQ	PR22_9    om 9
	CMPI.W	#17,D0
	BEQ	PR22_17   om 17
	LEA	QUO,A1
	BRA	STR
;
QUO	DC.W	5
	DC.B	"??,??"
;
PR22_8	MOVE.B	#'D',(A0)+
	MOVE.B	D1,(A0)+
	MOVE.B	#',',(A0)+
	MOVE.B	#'D',(A0)+
PR22_8A	MOVE.B	D2,(A0)+
	RTS
PR22_9	MOVE.B	#'A',(A0)+
PR22_9A	MOVE.B	D1,(A0)+
	MOVE.B	#',',(A0)+
	MOVE.B	#'A',(A0)+
	BRA	PR22_8A
PR22_17	MOVE.B	#'D',(A0)+
	BRA.S	PR22_9A
;
; Bcc
;
PR23	MOVE.W	D7,D0
	LSR.W	#8,D0
	ANDI.W	#$F,D0
	BEQ.S	PR23_1    BRA
	CMPI.B	#1,D0
	BEQ.S	PR23_2    BSR
	BSR	DO_COND
	MOVE.B	#".",(A0)+
	BRA.S	PR23_3
PR23_1	LEA	BRU,A1
	BSR	STR
	BRA.S	PR23_3
PR23_2	LEA	BSU,A1
	BSR	STR
PR23_3	MOVE.B	D7,D0
	BNE.S	PR23_4
	MOVE.B	#"W",(A0)+
	MOVEQ	#0,D6               mark 'not FNOP'
;
; FPcc.W enters here D6= 0 -> 'not FNOP'
;                      =-1 -> 'could be FNOP'
;
PR23_7	MOVE.W	(A4)+,D1
	EXT.L	D1
	BNE	PR23_9              not FNOP
	TST.L	D6                  FNOP? . .
	BNE	PR23_10             . . yes
PR23_9	SUBQ.L	#2,D1
PR23_6	LEA	OBUF+13(A6),A0
	ADD.L	A4,D1
	ADD.L	PC_ALT(A6),D1
	MOVEA.W	CN_ITOHL,A2
	MOVE.L	A4,-(A7)
	LEA	BUF(A6),A4
	MOVE.L	D1,(A4)
	BSR	PA_HX
	MOVEA.L	(A7)+,A4
	RTS
PR23_4	CMPI.B	#-1,D0
	BEQ.S	PR23_5
	MOVE.B	#"S",(A0)+
	EXTB.L	D7
	MOVE.L	D7,D1
	BRA.S	PR23_6
PR23_5	MOVE.B	#"L",(A0)+
PR23_8	MOVEQ	#-4,D1
	ADD.L	(A4)+,D1
	BRA.S	PR23_6
;
PR23_10	LEA	OBUF(A6),A0
	MOVE.L	#'FNOP',(A0)+
	RTS
;
BRU	DC.W	3
	DC.B	'RA.'
BSU	DC.W	3
	DC.B	'SR.'
;
; MOVEQ
;
PR24	MOVEA.W	CN_ITOHB,A2
	MOVE.L	A4,-(A7)
	LEA	BUF(A6),A4
	MOVE.B	D7,(A4)
	BSR	PA_HX
	MOVEA.L	(A7)+,A4
	MOVE.B	#',',(A0)+
	MOVE.B	#'D',(A0)+
	LSR.W	#8,D7
	LSR.W	#1,D7
	ANDI.W	#7,D7
	ADDI.W	#'0',D7
	MOVE.B	D7,(A0)+
	RTS
;
; SBCD, SUBX, ABCD, ADDX
;
PR25	CMPI.B	#'X',-1(A0)
	BNE.S	PR25_2
	MOVE.W	D7,D5
	LSR.W	#6,D5
	ANDI.W	#3,D5     size
	BSR	DO_DOT
PR25_2	MOVE.W	D7,D1
	LSR.W	#8,D1
	LSR	#1,D1
	ANDI.W	#7,D1     rx
	ADDI.W	#'0',D1
	MOVE.W	D7,D2
	ANDI.W	#7,D2     ry
	ADDI.W	#'0',D2
	BTST	#3,D7
	BEQ.S	PR25_3
	LEA	MA,A1
	BSR	STR
	MOVE.B	D2,(A0)+
	LEA	MB,A1
	BSR	STR
	MOVE.B	D1,(A0)+
	MOVE.B	#")",(A0)+
	RTS
PR25_3	MOVE.B	#'D',(A0)+
	MOVE.B	D2,(A0)+
	MOVE.B	#',',(A0)+
	MOVE.B	#'D',(A0)+
	MOVE.B	D1,(A0)+
	RTS
;
MA	DC.W	3
	DC.B	'-(A'
MB	DC.W	5
	DC.B	"),-(A"
;
; LINK.L
;
PR26	MOVEA.W	CN_ITOHL,A2
	BRA	PR9_1
;
; CMPM
; (comes from PR29 with D0=om & D1=Ax (ASCII)
;
PR28	MOVE.W	D0,D5
	LEA	CMPM,A1
	BSR	STR
	ANDI.W	#3,D5     size
	BSR	DO_DOT
	ANDI.W	#7,D7     Ay reg
	MOVE.w	#"(A",(A0)+
	ADDI.W	#'0',D7
	MOVE.B	D7,(A0)+
	LEA	MC,A1
	BSR	STR
	MOVE.B	D1,(A0)+
	MOVE.W	#")+",(A0)+
	RTS
;
MC	DC.W	5
	DC.B	")+,(A"
;
; CMP, CMPA, EOR
;
PR29	MOVE.W	D7,D0
	LSR.W	#6,D0
	MOVE.W	D0,D1
	ANDI.W	#7,D0     om
	LSR.W	#3,D1
	ANDI.W	#7,D1     areg
	ADDI.W	#'0',D1
	MOVEQ	#1,D5
	CMPI.B	#3,D0
	BLT.S	PR29_CMP
	BEQ.S	PR29_CPA1
	CMPI.B	#7,D0
	BEQ.S	PR29_CPA
;
; EOR or CMPM
;
	BFEXTU	D7{26:3},D5         mode
	CMPI.B	#1,D5
	BEQ	PR28                must be CMPM
	MOVE.W	D0,D5
	ANDI.W	#3,D5     size
	LEA	EOT,A1
	BSR	STR
	BSR	DO_DOT
	MOVE.B	#'D',(A0)+
	MOVE.B	D1,(A0)+
	MOVE.B	#',',(A0)+
	BRA	EA1
;
; CMP
;
PR29_CMP	MOVE.W	D0,D5
	LEA	CMT,A1
	BSR	STR
	BSR	DO_DOT
	MOVE.L	D1,-(A7)
	BSR	EA1
	MOVE.L	(A7)+,D1
	MOVE.W	#',D',(A0)+
	MOVE.B	D1,(A0)+
	RTS
;
; CMPA
;
PR29_CPA	ADDQ.W	#1,D5     size
PR29_CPA1	LEA	CMPT,A1
	BSR	STR
	BSR	DO_DOT
	MOVE.W	D1,-(A7)
	BSR	EA1
	MOVE.W	(A7)+,D1
	MOVE.B	#',',(A0)+
	MOVE.B	#'A',(A0)+
	MOVE.B	D1,(A0)+
	RTS
;
EOT	DC.W	3
	DC.B	'EOR'
CMT	DC.W	3
	DC.B	'CMP'
CMPT	DC.W	4
	DC.B	'CMPA'
CMPM	DC.W	4
	DC.B	'CMPM'
;
; ADD, ADDA, SUB, SUBA
;
PR30	MOVE.W	D7,D5
	LSR.W	#6,D5
	MOVE.W	D5,D1
	ANDI.W	#3,D5     size
	LSR.W	#3,D1
	ANDI.W	#7,D1
	ADDI.W	#'0',D1
	CMPI.B	#3,D5
	BEQ.S	PR30_1
	BSR	DO_DOT
	BTST	#8,D7
	BEQ.S	PR30_2
	MOVE.B	#'D',(A0)+
	MOVE.B	D1,(A0)+
	MOVE.B	#',',(A0)+
	BRA	EA1
PR30_2	MOVE.W	D1,-(A7)
	BSR	EA1
	MOVE.W	(A7)+,D1
	MOVE.B	#',',(A0)+
	MOVE.B	#'D',(A0)+
	MOVE.B	D1,(A0)+
	RTS
PR30_1	MOVEQ	#1,D5
	BTST	#8,D7
	BEQ.S	PR30_3
	MOVEQ	#2,D5
PR30_3	BSR	DO_DOT
	MOVE.W	D1,-(A7)
	BSR	EA1
	MOVE.W	(A7)+,D1
	MOVE.B	#',',(A0)+
	MOVE.B	#'A',(A0)+
	MOVE.B	D1,(A0)+
	RTS
;
; ASL, ROR etc
;
; To print AS, LS, ROX or RO we examine
; bits 9&10 if bit 5=0 else bits 3&4
;
PR32	BFEXTU	D7{24:2},D5         size
	CMPI.B	#3,D5               memory? . .
	BEQ	PR32_7              . . yes
	BFEXTU	D7{27:2},D0         bits 3&4
	BRA	PR32_8
PR32_7	BFEXTU	D7{21:2},D0         bits 9&10
PR32_8	MOVE.W	D0,D3
	ADD.W	D0,D0
	ADD.W	D3,D0               3*D0
	LEA	AS(D0.W*2),A1
	BSR	STR
	BFEXTU	D7{20:3},D3         data or Dn
	BTST	#8,D7     L or R
	BEQ.S	PR32_1
	MOVE.B	#'L',(A0)+
	BRA.S	PR32_2
PR32_1	MOVE.B	#'R',(A0)+
PR32_2	CMPI.B	#3,D5
	BEQ.S	PR32_3
	BSR	DO_DOT
	BTST	#5,D7
	BEQ.S	PR32_4
	MOVE.B	#'D',(A0)+
	ADDI.W	#'0',D3
	MOVE.B	D3,(A0)+
	BRA.S	PR32_5
PR32_4	MOVE.B	#'#',(A0)+
	TST.B	D3
	BNE.S	PR32_6
	MOVEQ	#8,D3
PR32_6	ADDI.W	#'0',D3
	MOVE.B	D3,(A0)+
PR32_5	MOVE.B	#',',(A0)+
	MOVE.B	#"D",(A0)+
	AND.B	#7,D7
	ADDI.B	#'0',D7
	MOVE.B	D7,(A0)+
	RTS
PR32_3	LEA	OBUF+13(A6),A0
	BRA	EA1
;
AS	DC.W	2
	DC.B	'AS',0
	DC.W	2
	DC.B	'LS',0
	DC.W	3
	DC.B	'ROX'
	DC.W	2
	DC.B	'RO'
;
; BFCHG, BFCLR, BFSET, BFTST
;
PR33	MOVE.W	(A4)+,-(A7)
PR33_1	BSR	EA1
	MOVE.W	(A7)+,D6
	BRA	OW
;
; BFEXTS, BFEXTU, BFFFO
;
PR34	BSR	PR33
	MOVE.B	#',',(A0)+
PR34_1	MOVE.B	#'D',(A0)+
	BFEXTU	D6{#17:#3},D0
	ADDI.W	#'0',D0
	MOVE.B	D0,(A0)+
	RTS
;
; BFINS
;
PR35	MOVE.W	(A4)+,D6
	BSR	PR34_1
	MOVE.B	#',',(A0)+
	MOVE.W	D6,-(A7)
	BRA	PR33_1
;
; CALLM
;
PR36	ADDQ.L	#1,A4
	MOVEA.W	CN_ITOHB,A2
	BSR	PA_HX
	MOVE.B	#',',(A0)+
	BRA	EA1
;
; CAS2
;
PR37	PEA	PR37_4    return after DO_DOT
PR37_3	MOVE.B	#'D',D4
	MOVE.W	D7,D5
	LSR.W	#8,D5
	LSR.W	#1,D5
	ANDI.W	#3,D5
	SUBQ.W	#1,D5
	MOVE.W	(A4)+,D1  reg
	BRA	DO_DOT
PR37_4	MOVE.W	(A4)+,D2  d
	BSR	DREG1
	MOVE.B	#":",(A0)+
	BSR	DREG2
	MOVE.B	#',',(A0)+
	LSR.W	#6,D1
	BSR	DREG1
	MOVE.B	#":",(A0)+
	LSR.W	#6,D2
	BSR	DREG2
	MOVE.B	#',',(A0)+
	MOVE.B	#"(",(A0)+
	BTST	#9,D1
	BEQ.S	PR37_1
	MOVE.B	#'A',D4
PR37_1	LSR.W	#6,D1
	BSR	DREG1
	MOVE.B	#")",(A0)+
	MOVE.B	#":",(A0)+
	MOVE.B	#"(",(A0)+
	MOVE.B	#'D',D4
	BTST	#9,D2
	BEQ.S	PR37_2
	MOVE.B	#'A',D4
PR37_2	LSR.W	#6,D2
	BSR	DREG2
	MOVE.B	#")",(A0)+
	RTS
;
; CAS
;
PR38	PEA	PR38_1    return after PR37_3
	BRA	PR37_3
PR38_1	BSR	DREG1
	MOVE.B	#',',(A0)+
	LSR.W	#6,D1
	BSR	DREG1
	MOVE.B	#',',(A0)+
	BRA	EA1
;
DREG1	MOVE.B	D1,D0
	BRA.S	DREG_1
DREG2	MOVE.B	D2,D0
DREG_1	ANDI.W	#7,D0
	ADDI.W	#'0',D0
	MOVE.B	D4,(A0)+  D or A
	MOVE.B	D0,(A0)+
	RTS
;
; CHK2, CMP2
;
PR39	MOVE.W	(A4)+,D0
	MOVE.W	D0,-(A7)
	BTST	#11,D0
	BEQ.S	PR39_1
	LEA	HK,A1
	BRA.S	PR39_2
PR39_1	LEA	MP,A1
PR39_2	BSR	STR
	MOVE.W	D7,D5
	LSR.W	#8,D5
	LSR.W	#1,D5
	ANDI.W	#3,D5
	BSR	DO_DOT
	BSR	EA1
PR39_X1	MOVE.B	#',',(A0)+
PR39_X2	MOVE.B	#'D',D4
	MOVE.W	(A7)+,D0
	BPL.S	PR39_3
	MOVE.B	#'A',D4
PR39_3	MOVE.B	D4,(A0)+
	LSR.W	#8,D0
	LSR.W	#4,D0
	ANDI.W	#7,D0
	ADDI.W	#'0',D0
	MOVE.B	D0,(A0)+
	RTS
;
HK	DC.W	3
	DC.B	'HK2'
MP	DC.W	3
	DC.B	'MP2'
;
; DIV
;
PR40	MOVE.W	(A4)+,D1
	MOVEQ	#2,D5
	BTST	#11,D1
	BEQ.S	PR40_1
	MOVE.B	#'S',(A0)+
	BRA.S	PR40_2
PR40_1	MOVE.B	#'U',(A0)+
PR40_2	BFEXTU	D1{17:3},D2         Dq -> D2
	BTST	#10,D1              sz
	BNE	PR40_3
	CMP.B	D1,D2
	BEQ	PR40_E              Dr=Dq
	MOVE.B	#"L",(A0)+
PR40_3	BSR	PR40_E
	MOVE.W	#":D",(A0)+
	MOVE.B	D2,D1               Dq
	BRA	PR40_E1
;
PR40_E	MOVE.W	#".L",(A0)+
	LEA	OBUF+13(A6),A0
	MOVEM.L	D1-2,-(A7)
	BSR	EA1
	MOVEM.L	(A7)+,D1-2
	MOVE.W	#",D",(A0)+
PR40_E1	ADDI.B	#"0",D1
	MOVE.B	D1,(A0)+
	RTS
;
; MUL
;
PR41	MOVE.W	(A4)+,D1  eq
	MOVEQ	#2,D5
	BTST	#11,D1
	BEQ.S	PR41_1
	MOVE.B	#'S',(A0)+
	BRA.S	PR41_2
PR41_1	MOVE.B	#'U',(A0)+
PR41_2	MOVE.B	#'.',(A0)+
	MOVE.B	#'L',(A0)+
	LEA	OBUF+13(A6),A0
	MOVE.W	D1,-(A7)
	BSR	EA1
	MOVE.W	(A7)+,D1
	MOVE.B	#',',(A0)+
	MOVE.B	#'D',(A0)+
	LSR.W	#8,D1
	LSR.W	#4,D1
	ANDI.W	#7,D1
	ADDI.W	#'0',D1
	MOVE.B	D1,(A0)+
	RTS
;
; PACK, UNPK
;
PR42	BTST	#3,D7
	BEQ.S	PR42_1
	LEA	GOB,A1
	BSR	STR
	BSR	PR42_S
	LEA	GIB,A1
	BSR	STR
	BSR	PR42_S1
	MOVE.B	#")",(A0)+
	BRA.S	PR42_2
PR42_1	MOVE.B	#'D',(A0)+
	BSR	PR42_S
	MOVE.B	#',',(A0)+
	MOVE.B	#'D',(A0)+
	BSR	PR42_S1
PR42_2	MOVE.B	#',',(A0)+
	MOVEA.W	CN_ITOHW,A2
	BRA	PA_HX
;
PR42_S	MOVE.W	D7,D0
	ANDI.W	#7,D0
	ADDI.W	#'0',D0
	MOVE.B	D0,(A0)+
	RTS
;
PR42_S1	MOVE.B	D7,D0
	LSR.W	#8,D0
	LSR.W	#1,D0
	ANDI.W	#7,D0
	ADDI.W	#'0',D0
	MOVE.B	D0,(A0)+
	RTS
;
GOB	DC.W	3
	DC.B	"-(A"
GIB	DC.W	5
	DC.B	"),-(A"
;
; RTM
;
PR43	BTST	#3,D7
	BEQ.S	PR43_1
	MOVE.B	#'A',(A0)+
	BRA.S	PR43_2
PR43_1	MOVE.B	#'D',(A0)+
PR43_2	BRA	PR42_S
;
; ERROR
;
PR44	LEA	OBUF(A6),A0
	MOVE.B	#"?",(A0)+
	MOVE.B	#"?",(A0)+
	RTS
;
; FDBcc
;
PR45	BSR	DO_FCON
	BRA	PR19_1
;
; FS, FTRAP
;
PR46	MOVEQ	#0,D6     mark 'F'
PR46_1	MOVE.W	D7,D0
	ANDI.W	#$3F,D0   mode/reg
	CMPI.W	#$3A,D0
	BLT.S	PR46_S
	CMPI.W	#$3C,D0
	BGT.S	PR46_S
	SUBQ.L	#1,A0     eliminate "S"
	LEA	TR,A1     'TRAP'
	BSR	STR
	PEA	PR20_4
PR46_3	TST.L	D6
	BEQ	DO_FCON   'F'
	BRA	DO_PCON   'P'
PR46_S	PEA	PR46_2
	BRA.S	PR46_3
PR46_2	LEA	OBUF+13(A6),A0
	BRA	EA1
;
; MOVEC
;
PR47	MOVE.W	(A4)+,D6  2nd word
	BTST	#0,D7     dr
	BEQ	PR47_1    ctrl -> reg
	BSR	PR47_R
	MOVE.B	#",",(A0)+
	BRA	PR47_C
PR47_1	BSR	PR47_C
	MOVE.B	#",",(A0)+
;
PR47_R	BTST	#15,D6
	BEQ	PR47_R1   'D'
	MOVE.B	#"A",(A0)+
	BRA	PR47_R2
PR47_R1	MOVE.B	#"D",(A0)+
PR47_R2	BFEXTU	D6{17:3},D0
	ADDI.B	#"0",D0
	MOVE.B	D0,(A0)+
	RTS
;
PR47_C	BFEXTU	D6{21:7},D0     bits 4 to 10 should be zero
	BNE	PR47_C1   ---->
	MOVE.B	D6,D0
	CMPI.B	#8,D0
	BLS	PR47_C2   OK
PR47_C1	MOVEQ	#18,D0    mark error
	BRA	PR47_C3
PR47_C2	BTST	#11,D6
	BEQ	PR47_C3   not 80x
	ADDI.B	#9,D0     set 9 - 17 for $800 - $808
PR47_C3	ANDI.W	#$1F,D0
	LEA	MOC_TB(D0.W*2),A1
	ADDA.W	(A1),A1
	BSR	STR
	RTS
;
MOC_TB	DC.W	MOC0-*
	DC.W	MOC1-*
	DC.W	MOC2-*
	DC.W	MOC3-*
	DC.W	MOC4-*
	DC.W	MOC5-*
	DC.W	MOC6-*
	DC.W	MOC7-*
	DC.W	MOC8-*
	DC.W	MOC9-*
	DC.W	MOC10-*
	DC.W	MOC11-*
	DC.W	MOC12-*
	DC.W	MOC13-*
	DC.W	MOC14-*
	DC.W	MOC15-*
	DC.W	MOC16-*
	DC.W	MOC17-*
	DC.W	MOC18-*
;
MOC0	DC.W	3,'SFC'   000
MOC1	DC.W	3,'DFC'   001
MOC2	DC.W	4,'CACR'  002
MOC3	DC.W	2,'TC'    003
MOC4	DC.W	4,'ITT0'  004
MOC5	DC.W	4,'ITT1'  005
MOC6	DC.W	4,'DTT0'  006
MOC7	DC.W	4,'DTT1'  007
MOC8	DC.W	5,'BUSCR' 008
MOC9	DC.W	3,'USP'   800
MOC10	DC.W	3,'VBR'   801
MOC11	DC.W	4,'CAAR'  802
MOC12	DC.W	3,'MSP'   803
MOC13	DC.W	3,'ISP'   804
MOC14	DC.W	5,'MMUSR' 805
MOC15	DC.W	3,'URP'   806
MOC16	DC.W	3,'SRP'   807
MOC17	DC.W	3,'PCR'   808
MOC18	DC.W	3,'???'    -
;
; FBcc
;
PR48	MOVE.W	D7,D0
	BSR	DO_FCON3
	CMPI.B	#'F',-1(A0)         was it FPF? . .
	BNE	PR48_1              . . no
	MOVEQ	#-1,D6              mark 'might be FNOP'
	BRA	PR48_2
PR48_1	MOVEQ	#0,D6               mark 'not FNOP'
PR48_2	BFEXTU	D7{24:2},D5         size
	SUBQ.W	#1,D5
	BSR	DO_DOT
	CMPI.W	#1,D5
	BEQ	PR23_7    W
	MOVEQ	#0,D6               mark 'not FNOP'
	BRA	PR23_8    L
;
; F...
;
PR49	LEA	FTYPE,A5
	LEA	FNAMES,A1
	MOVE.L	A1,-(A7)
	LEA	FNLIST,A1
	LEA	FMC_L,A2
	LEA	FPR,A3
PR49_2	MOVE.W	(A4)+,D6  flop/plop
	MOVEQ	#-1,D0    set up count
PR49_1	ADDQ.W	#1,D0
	MOVE.W	D6,D1
	AND.W	(A2,D0.W*4),D1      mask
	CMP.W	2(A2,D0.W*4),D1     code
	BNE.S	PR49_1    not yet found
	MOVE.W	(A5,D0.W*2),D1      prog no
	MOVEA.W	(A1,D0.W*2),A1      -> name
	ADDA.L	(A7)+,A1            base of names
	BSR	STR
	BFEXTU	D6{19:3},D5         sr
	BFEXTU	D6{22:3},D4
	ADDA.W	-2(A3,D1.W*2),A3    -> program
	JMP	(A3)
;
; TBL
;
PR50	MOVE.W	(A4)+,D6  plop
	BRA	TBL
;
; CINVA, CPUSHA
;
PR51	EQU	DO_CACHE
;
; CINVP/L, CPUSHP/L
;
PR52	BSR	DO_CACHE
	MOVE.B	#",",(A0)+
;
; PLPAR/W, PTESTR/W, PFLUSH, PFLUSHN
;
PR53	MOVE.W	#"(A",(A0)+
	BSR	B1
	MOVE.B	#")",(A0)+
	RTS
;
; LPSTOP, TBL..
;
PR54	MOVE.W	(A4)+,D6  plop
	CMPI.W	#$1C0,D6
	BNE	PR54_1    TBL..
	MOVEA.W	CN_ITOHW,A2
	BRA	PA_HX
PR54_1	LEA	-11(A0),A0
	MOVE.W	"TB",(A0)+
	MOVE.B	#"L",(A0)+
	BRA	TBL
;
; MOVE16......(A
;
PR55	BSR	B1
	MOVE.L	#")+,(",(A0)+
	MOVE.B	#"A",(A0)+
	MOVE.W	(A4)+,D6  plop
	BSR	TBL_6
	MOVE.W	#")+",(A0)+
	RTS
;
; PBcc
;
PR56	MOVE.W	D7,D0
	BSR	DO_PCON3
	BRA	PR48_1
;
; PS, PTRAP
;
PR57	MOVEQ	#1,D6     mark 'P'
	BRA	PR46_1
;
; PDBcc
;
PR58	BSR	DO_PCON
	BRA	PR19_1
;
; P...
;
PR59	LEA	PTYPE,A5
	LEA	PNAMES,A1
	MOVE.L	A1,-(A7)
	LEA	PNLIST,A1
	LEA	PMC_L,A2
	LEA	QR,A3
	BRA	PR49_2
;
; MOVE.W......SR,
; MOVE.W......CCR,
;
PR60	MOVEQ	#2,D5     size
	BRA	EA1
;
; MOVES (size preselected)
;
PR61	MOVE.W	(A4)+,D5            2nd word
	BFEXTU	D5{16:4},D6         reg ->    d6
	BTST	#11,D5
	BEQ	PR61_1              <ea> -> reg
	EXG	D6,D7               do reg 1st
PR61_1	MOVEQ	#0,D5               set a 'sensible' size
	MOVE.W	D6,-(A7)
	BSR	EA1
	MOVE.B	#',',(A0)+
	MOVE.W	(A7)+,D7            <ea> or reg
	BRA	EA1
;
; FP Maths monadic
;
FPR1	MOVE.L	D4,-(A7)
	PEA	FPR1_1
	BTST	#14,D6
	BEQ	FREG
	BSR	DO_FDOT
	BRA	EA1_F
FPR1_1	MOVE.L	(A7)+,D5
FPR1_2	MOVE.B	#",",(A0)+
	BRA	FREG_1
;
; FSINCOS
;
FPR2	BFEXTU	D6{29:3},D4         set 2nd FPn
	PEA	FPR2_1
	BRA	FPR1
FPR2_1	MOVE.B	#":",(A0)+
	BFEXTU	D6{22:3},D5
	BRA	FREG_1
;
;
;
FPR3	BTST	#14,D6
	BEQ	FREG
	BSR	DO_FDOT
	BRA	EA1_F
;
; FMOVECR
;
FPR4	MOVE.L	A4,-(A7)
	LEA	BUF(A6),A4
	MOVE.B	D6,D0
	ANDI.B	#$7F,D0   ROM offset
	MOVE.B	D0,(A4)
	MOVEA.W	CN_ITOHB,A2
	BSR	PA_HX
	MOVEA.L	(A7)+,A4
	MOVE.B	D4,D5
	BRA	FPR1_2
;
; FMOVE mem -> reg
;
FPR5	BTST	#14,D6
	BEQ	FPR5_1    reg -> reg
	BSR	DO_FDOT   P{} not allowed
	MOVE.L	D4,-(A7)
	BSR	EA1_F
	MOVE.L	(A7)+,D5
	BRA	FPR5_2
FPR5_1	BSR	FREG      do '.X     FPn'
	MOVE.B	D4,D5     2nd reg
FPR5_2	MOVE.B	#",",(A0)+
	BRA	FREG_1    do 'FPn'
;
; FMOVE reg -> mem
;
FPR6	BSR	DO_FDOT1
	MOVE.W	#"FP",(A0)+
	ADDI.B	#"0",D4   -> ASCII
	MOVE.B	D4,(A0)+
	MOVE.B	#",",(A0)+
	MOVEM.L	D5-6,-(A7)
	BSR	EA1_F
	MOVEM.L	(A7)+,D5-6
	MOVE.B	D5,D4
	ANDI.B	#3,D5
	CMPI.B	#3,D5
	BNE	FPR6_2
	MOVE.B	#"{",(A0)+
	BTST	#2,D4     0=P{#k} 1=P{Dn}
	BNE	FPR6_1
	MOVE.B	#"#",(A0)+
	MOVE.L	A4,-(A7)
	LEA	BUF(A6),A4
	ANDI.W	#$7F,D6   k-factor
	MOVE.B	D6,(A4)
	MOVEA.W	CN_ITOHB,A2
	BSR	PA_HX
	MOVEA.L	(A7)+,A4
FPR6_3	MOVE.B	#"}",(A0)+
FPR6_2	RTS
FPR6_1	BSR	C1
	BRA	FPR6_3
;
; FMOVEM.X
;
FPR7	BTST	#13,D6
	BNE	FPR7_1
	MOVEM.L	D5-6,-(A7)
	BSR	EA1
	MOVE.B	#",",(A0)+
	MOVEM.L	(A7)+,D5-6
FPR7_1	BTST	#1,D5     1=dynamic 0=static
	BEQ	FPR7_2
	BSR	C1
FPR7_3	BTST	#13,D6
	BNE	FPR7_4
	RTS
FPR7_4	MOVE.B	#",",(A0)+
	BRA	EA1
FPR7_2	MOVE.B	D6,D0
	TST.B	D5
	BNE.S	FPR7_5
	BSR	BACK
	MOVE.B	D1,D0
FPR7_5	MOVE.W	#"FP",D3
	BSR	RGL
	BRA	FPR7_3
;
; FMOVEM.L
;
FPR8	BTST	#13,D6    1=reg to mem 0=mem to reg
	BNE	FPR8_1
	MOVEM.L	D5-6,-(A7)
	MOVEQ	#6,D5     set triple size
	BSR	EA1
	MOVE.B	#",",(A0)+
	MOVEM.L	(A7)+,D5-6
FPR8_1	TST.B	D5
	BNE	FPR8_2
	LEA	FCRH4,A1
	BRA	FPR8_5    ---->
FPR8_2	LEA	FCR_LST,A2
	ROR.B	#3,D5     put list to top
FPR8_3	MOVEA.L	A2,A1
	ADDA.W	(A2)+,A1
	LSL.B	#1,D5
	BCC.S	FPR8_4
FPR8_5	BSR	STR
FPR8_4	TST.B	D5
	BNE.S	FPR8_3
	SUBQ.L	#1,A0
	BTST	#13,D6
	BNE.S	FPR8_6
FPR9	RTS
FPR8_6	MOVE.B	#",",(A0)+
	BRA	EA1
;
FCRH1	DC.W	6
	DC.B	'FPIAR/'
FCRH2	DC.W	5
	DC.B	'FPSR/'
FCRH3	DC.W	5
	DC.B	'FPCR/'
FCRH4	DC.W	6
	DC.B	'ERROR/'
;
FCR_LST	DC.W	FCRH3-*
	DC.W	FCRH2-*
	DC.W	FCRH1-*
;
; PTESTR/W
;
QR1	BSR	DO_FC
	MOVE.B	#",",(A0)+
	BSR	EA1
	MOVE.W	#",#",(A0)+
	BFEXTU	D6{19:3},D0
	BTST	#8,D6
	BEQ	B1_2
	BSR	B1_2
	MOVE.W	#",A",(A0)+
	BFEXTU	D6{24:3},D0
	BRA	B1_2
;
; PVALID...VAL
;
QR2	EQU	EA1
;
; PVALID...A
;
QR3	MOVE.B	D6,D0
	BSR	B1_2
	MOVE.B	#",",(A0)+
	BRA	EA1
;
; PFLUSHR
;
QR4	EQU	EA1
;
; PFLUSHA
;
QR5	EQU	PR0
;
; PFLUSH, PFLUSHS
;
QR6	BSR	DO_FC
	MOVE.B	#",",(A0)+
	BFEXTU	D6{23:4},D0         MASK
	BTST	#11,D6
	BEQ	DO_BIN
	BSR	DO_BIN
QR6_1	MOVE.B	#",",(A0)+
	BRA	EA1
;
; PLOADR/W
;
QR7	BSR	DO_FC
	BRA	QR6_1
;
; QR8 - QR14 PMOVE
;
QR8	LEA	MR1_L,A1
QR8_1	MOVEM.L	D6/A1,-(A7)
	BSR	EA1
	MOVEM.L	(A7)+,D6/A1
	MOVE.B	#",",(A0)+
	BRA	M_SR
;
QR9	LEA	MR2_L,A1
	BRA	QR8_1
;
QR10	LEA	MR3_L,A1
	BRA	QR8_1
;
QR11	LEA	MR1_L,A1
QR11_1	BSR	M_SR
	MOVE.B	#",",(A0)+
	BRA	EA1
;
QR12	LEA	MR2_L,A1
	BRA	QR11_1
;
QR13	LEA	MR3_L,A1
	BRA	QR11_1
;
QR14	LEA	MR4_L,A1
	BRA	QR8_1
;
INDXR	ASR.W	#8,D6
	BMI.S	INDX_1
	MOVE.B	#'D',(A0)+
	BRA.S	INDX_2
INDX_1	MOVE.B	#'A',(A0)+
INDX_2	MOVE.B	D6,D3
	LSR.B	#4,D3
	ANDI.B	#7,D3
	ADDI.W	#'0',D3
	MOVE.B	D3,(A0)+
	MOVE.B	#'.',(A0)+
	BTST	#3,D6
	BEQ.S	INDX_3
	MOVE.B	#'L',(A0)+
	BRA.S	INDX_4
INDX_3	MOVE.B	#'W',(A0)+
INDX_4	ANDI.B	#6,D6
	BEQ.S	INDX_5    no scale
	MOVE.B	#"*",(A0)+
	CMPI.B	#6,D6
	BNE.S	INDX_7
	MOVEQ	#8,D6
INDX_7	ADDI.B	#'0',D6
	MOVE.B	D6,(A0)+
INDX_5	RTS
;
DO_DOT	MOVEQ	#'B',D0
	TST.W	D5
	BEQ.S	DO_DB
	CMPI.B	#2,D5
	BMI.S	DO_DW
	BEQ.S	DO_DL
	ADDI.W	#"?"-'L',D0
DO_DL	ADDI.W	#'L'-'W',D0
DO_DW	ADDI.W	#'W'-'B',D0
DO_DB	MOVE.B	#".",(A0)+
	MOVE.B	D0,(A0)+
	LEA	OBUF+13(A6),A0
	RTS
;
TR_FZ	DC.B	2,2,4,4,1,3,0,4
;
EA1_F	MOVE.B	TR_FZ(D5.W),D5      set size for EA
EA1	MOVE.W	D7,D3
	ANDI.W	#7,D3     reg
	MOVE.W	D7,D4
	LSR.W	#3,D4
	ANDI.W	#7,D4     mode
	BRA	EA
;
TBL	BTST	#11,D6
	BEQ	TBL_1
	MOVE.B	#"S",(A0)+
	BRA.S	TBL_2
TBL_1	MOVE.B	#"U",(A0)+
TBL_2	BTST	#10,D6
	BNE.S	TBL_3
	MOVE.B	#"N",(A0)+
TBL_3	BFEXTU	D6{24:2},D5         size
	BSR	DO_DOT
	BTST	#8,D6
	BEQ.S	TBL_4     data register interpolate
	MOVE.L	D6,-(A7)
	BSR	EA1
	MOVE.L	(A7)+,D6
	BRA.S	TBL_5
TBL_4	MOVE.B	#"D",(A0)+
	BSR	B1
	MOVE.W	#":D",(A0)+
	MOVE.B	D6,D0
	BSR	B1_1
TBL_5	MOVE.W	#",D",(A0)+
TBL_6	BFEXTU	D6{17:3},D0
	BRA	B1_2
;
DO_CACHE	BFEXTU	D7{24:2},D0
	MOVE.W	CACH(D0.W*2),(A0)+
	RTS
;
CACH	DC.W	"NCDCICBC"
;
B1	MOVE.B	D7,D0
B1_1	ANDI.B	#7,D0
B1_2	ADDI.B	#"0",D0   -> ASCII
	MOVE.B	D0,(A0)+
	RTS
;
C1	MOVE.B	#"D",(A0)+
	BFEXTU	D6{25:3},D0
	BRA	B1_2
;
DO_PCON	MOVE.W	(A4)+,D0
DO_PCON3	ANDI.W	#$F,D0
	LEA	PCON(D0.W*4),A1
	BRA	STR
;
PCON	DC.W	2,'BS',2,'BC',2,'LS',2,'LC'
	DC.W	2,'SS',2,'SC',2,'AS',2,'AC'
	DC.W	2,'WS',2,'WC',2,'IS',2,'IC'
	DC.W	2,'GS',2,'GC',2,'CS',2,'CC'
;
FREG	MOVE.W	#".X",(A0)+
	LEA	OBUF+13(A6),A0
FREG_1	MOVE.W	#"FP",(A0)+
	ADDI.B	#"0",D5   -> ASCII
	MOVE.B	D5,(A0)+
	RTS
;
PREG	BSR	B1
	MOVE.B	#")",(A0)+
	BTST	#4,D7
	BNE.S	PREG_1
	MOVE.B	#"+",(A0)+
PREG_1	RTS
;
PABS	MOVEA.W	CN_ITOHL,A2
	BSR	PA_HX
	MOVE.L	#").L,",(A0)+
	RTS
;
DO_FCON	MOVE.W	(A4)+,D0  2nd word
DO_FCON3	ANDI.W	#$1F,D0
	LEA	FCON,A1
	BRA	DO_FCON1
DO_FCON2	MOVE.W	(A1),D1   length of FCON
	ADDQ.W	#3,D1     + length & round
	BCLR	#0,D1
	LEA	(A1,D1.W),A1   -> next FCON
DO_FCON1	DBF	D0,DO_FCON2
	BRA	STR
;
FCON	DC.W	1,'F',2,'EQ',3,'OGT',3,'OGE'
	DC.W	3,'OLT',3,'OLE',3,'OGL',2,'OR'
	DC.W	2,'UN',3,'UEQ',3,'UGT',3,'UGE'
	DC.W	3,'ULT',3,'ULE',2,'NE',1,'T'
	DC.W	2,'SF',3,'SEQ',2,'GT',2,'GE'
	DC.W	2,'LT',2,'LE',2,'GL',3,'GLE'
	DC.W	4,'NGLE',3,'NGL',3,'NLE',3,'NLT'
	DC.W	3,'NGE',3,'NBT',3,'SNE',2,'ST'
;
DO_FDOT1	LEA	FDT(D5.W*2),A1
DO_FDOT2	MOVE.W	(A1),(A0)
	LEA	OBUF+13(A6),A0
	RTS
;
FDT	DC.W	".L.S.X.P.W.D.B.P.?"
;
DO_FDOT	CMPI.B	#7,D5
	BNE.S	DO_FDOT1
	LEA	$10+FDT,A1
	BRA	DO_FDOT2
;
DO_FC	BTST	#4,D6
	BEQ	DOFC_1
	MOVE.B	D6,D0
DO_BIN	MOVE.B	#"%",(A0)+
	MOVEQ	#3,D2     count
DOFC_2	MOVE.B	#"0",D1   try '0'
	LSR.B	#1,D0     test next bit
	BCC.S	DOFC_3
	ADDQ.B	#1,D1     bit is '1'
DOFC_3	ROR.L	#8,D1
	DBF	D2,DOFC_2 do 4 bytes
	MOVE.L	D1,(A0)+
	RTS
DOFC_1	BTST	#3,D6
	BEQ	DOFC_5
	MOVE.B	#"D",(A0)+
	MOVE.B	D6,D0
	BRA	B1_1
DOFC_5	BFEXTU	D6{29:3},D0
	LEA	FCS,A1
	CMPI.B	#1,D0
	BMI	STR
	BEQ	DOFC_7
	ADDQ.L	#6,A1
DOFC_7	ADDQ.L	#6,A1
	BRA	STR
;
FCS	DC.W	3,'SFC',3,'DFC',5,'ERROR'
;
M_SR	BFEXTU	D6{19:3},D0
	ADDA.W	(A1,D0.W*2),A1
	BRA	STR
;
PA_HX	MOVE.L	A6,-(A7)
	MOVEA.L	A4,A6
	SUBA.L	A1,A1
	SUBA.L	A6,A0
	JSR	(A2)
	ADDA.L	A6,A0
	ADDA.L	A1,A6
	MOVEA.L	A6,A4
	MOVEA.L	(A7)+,A6
	RTS
;
; LTOD sets ASCII decimal for D0.L in
; a buffer indicated by A1 (and uses D1).
;
; At entry:
;   D0.L contains the (positive) number.
;   A1 points to the end of the area to
;   contain the ASCII decimal.
;
; At exit:
;   D0 = 0
;   A1 points to the start of the number.
;
LTOD	SWAP	D0
	BEQ.S	LTODW2
	MOVE.W	D0,D1
	BEQ.S	LTODW
	EXT.L	D1
	DIVU	#10,D1
	SWAP	D1
	MOVE.W	D1,D0
	SWAP	D0
	DIVU	#10,D0
	SWAP	D0
	ADDI.W	#48,D0
	MOVE.B	D0,-(A1)
	SWAP	D0
	MOVE.W	D0,D1
	MOVE.L	D1,D0
	BRA.S	LTOD
LTODW1	DIVU	#10,D0
	SWAP	D0
LTODW2	ADDI.W	#48,D0
	MOVE.B	D0,-(A1)
	CLR.W	D0
LTODW	SWAP	D0
	BNE.S	LTODW1
	RTS
;
HEX	MOVEM.L	D1/D2,-(A7)
	MOVEQ	#8,D1
	MOVEQ	#0,D5
HX_L	MOVE.B	(A1)+,D0  next byte
	CMPI.B	#10,D0
	BEQ.S	HX_END
	SUBI.B	#"0",D0
	BMI.S	WRN_HX ---->
	CMPI.B	#9,D0
	BLE.S	D_HX
	SUBQ.B	#7,D0
	CMPI.B	#16,D0
	BLT.S	HX_1      capitals
	SUBI.B	#32,D0
HX_1	CMPI.B	#10,D0
	BLT.S	WRN_HX ---->
	CMPI.B	#15,D0
	BGT.S	WRN_HX ---->
D_HX	LSL.L	#4,D5     prepare for next nibble
	OR.B	D0,D5     put it in
	DBF	D1,HX_L
WRN_HX	MOVEQ	#-1,D0
HX_END	MOVEM.L	(A7)+,D1/D2
	RTS
;
BAD_EXIT	LEA	EMESS1,A1
	BSR	UMT1
	BSR	BLP
	MOVE.W	#150,D3
	BSR	PAUSEQ
	MOVEQ	#0,D3	no error message
	BRA	QUIT1
;
; PAUSEQ pauses D3.W ticks
;
PAUSEQ	MOVE.L	A0,-(A7)
	MOVEQ	#-1,D1    this job
	MOVEQ	#MT_SUSJB,D0
	TRAP	#1
	MOVEA.L	(A7)+,A0
	RTS
;
UMT	MOVEA.L	CH_COM(A6),A0
UMT1	MOVE.W	UT_MTEXT,A2
	JSR	(A2)
	RTS
;
AT	MOVEQ	#SD_POS,D0
TP3	TRAP	#3
	RTS
;
INK	MOVEQ	#SD_SETIN,D0
	BRA.S	TP3
;
STRIP	MOVEQ	#SD_SETST,D0
	BRA.S	TP3
;
CURON	MOVEA.L	CH_WW(A6),A0
	MOVEQ	#SD_CURE,D0
	BRA.S	TP3
;
CUROF	MOVEA.L	CH_WW(A6),A0
	MOVEQ	#SD_CURS,D0
	BRA.S	TP3
;
BLP	LEA	NOISE,A3
	MOVEQ	#MT_IPCOM,D0
	TRAP	#1
	RTS
;
NOISE	DC.B	10,8
	DC.L	$AAAA
	DC.B	1,20,90,0,$10,$27
	DC.B	$F4,$A2,1,0
;
QUIT	WHITEN	16,HEAD2
QUIT1	MOVEQ	#MT_FRJOB,D0
	MOVEQ	#-1,D1
	TRAP	#1
;----------------------------------------------------------------------

;   Copy a QL string
;       4(A7) = Target
;       8(A7) = Source

QSTRCPY
	MOVEM.L	D0/A0-A1,-(A7)              ; save regosters used
	MOVE.L	12+4(A7),A1                 ; Target address
	MOVE.L	12+8(A7),A0                 ; Source address
	MOVE.W	(A0),D0                     ; Length to copy
	MOVE.W	(A0)+,(A1)+                 ; Copy length field
	BRA	QSTRCPY2            ; Remove if NULL byte at end wanted
QSTRCPY1	MOVE.B	(A0)+,(A1)+                 ; Copy a byte
QSTRCPY2	DBRA	D0,QSTRCPY1                 ; loop until finished
	MOVEM.L	(A7)+,D0/A0-A1              ; restore saved registers
	RTS

;=========================================================================
;                           CONFIG BLOCK
;
;   This sets up a CONFIG block for options that the user might want
;   to pre-set.  The aim is to avoid having to have different
;   versions of this program for different defaults.
;-------------------------------------------------------------------------

; Config ID
	DC.L	'<<QC','FX>>'           ; Configuration ID
	DC.W	'01'                    ; Configuration level
CFGNAME	DC.W	CFGNAMEX-CFGNAME-2      ; Software name
	DC.B	'GW_disassembler'
CFGNAMEX	DS.B	0
CFGVER	DC.W	CFGVERX-CFGVER-2        ; Software Version
	DC.B	VERSION
CFGVERX	DS.B	0

item1	DS.W	0                       ; Word align

	DC.B	0
	DC.B	'D'
	DC.W	FILEDEV_MAX-*
	DC.W	0
	DC.W	0
	DC.W	DESCDEV-*
	DC.W	STRATT-*
term
	DC.W	-1                      ; Terminate list

;   description strings

DESCDEV	DC.W	DESCDEVX-DESCDEV-2
	DC.B	'Default source device'
DESCDEVX	DS.B	0

;   attributes

STRATT	DC.W	0                       ; No special attributes

FILEDEV_MAX	DC.W	20
FILEDEV	DC.W	FILEDEVX-FILEDEV-2
	DC.B	'RAM1_'
FILEDEVX	DS.B	16
MRN0	DC.W	2,'TC'
MRN1	DC.W	3,'DRP'
MRN2	DC.W	3,'SRP'
MRN3	DC.W	3,'CRP'
MRN4	DC.W	3,'CAL'
MRN5	DC.W	3,'VAL'
MRN6	DC.W	3,'SCC'
MRN7	DC.W	2,'AC'
MRN8	DC.W	3,'PSR'
MRN9	DC.W	4,'PCSR'
MRN10	DC.W	3,'BAD'
MRN11	DC.W	3,'BAC'
MRN12	DC.W	3,'TT0'
MRN13	DC.W	3,'TT1'
MRN14	DC.W	3,'SRP'
MRN15	DC.W	3,'CRP'
MRN16	DC.W	5,'ERROR'
;
MR1_L	DC.W	MRN0-MR1_L
	DC.W	MRN1-MR1_L
	DC.W	MRN2-MR1_L
	DC.W	MRN3-MR1_L
	DC.W	MRN4-MR1_L
	DC.W	MRN5-MR1_L
	DC.W	MRN6-MR1_L
	DC.W	MRN7-MR1_L
;
MR2_L	DC.W	MRN8-MR2_L
	DC.W	MRN9-MR2_L
	DC.W	MRN16-MR2_L
	DC.W	MRN16-MR2_L
	DC.W	MRN10-MR2_L
	DC.W	MRN11-MR2_L
	DC.W	MRN16-MR2_L
	DC.W	MRN16-MR2_L
;
MR3_L	DC.W	MRN16-MR3_L
	DC.W	MRN16-MR3_L
	DC.W	MRN12-MR3_L
	DC.W	MRN13-MR3_L
	DC.W	MRN16-MR3_L
	DC.W	MRN16-MR3_L
	DC.W	MRN16-MR3_L
	DC.W	MRN16-MR3_L
;
MR4_L	DC.W	MRN0-MR4_L
	DC.W	MRN16-MR4_L
	DC.W	MRN2-MR4_L
	DC.W	MRN3-MR4_L
	DC.W	MRN16-MR4_L
	DC.W	MRN16-MR4_L
	DC.W	MRN16-MR4_L
	DC.W	MRN16-MR4_L
;
PR	DC.W	PR0-PR
	DC.W	PR1-PR
	DC.W	PR2-PR
	DC.W	PR3-PR
	DC.W	PR4-PR
	DC.W	PR5-PR
	DC.W	PR6-PR
	DC.W	PR7-PR
	DC.W	PR8-PR
	DC.W	PR9-PR
	DC.W	PR10-PR
	DC.W	PR11-PR
	DC.W	PR12-PR
	DC.W	PR13-PR
	DC.W	PR14-PR
	DC.W	PR15-PR
	DC.W	PR16-PR
	DC.W	PR17-PR
	DC.W	PR18-PR
	DC.W	PR19-PR
	DC.W	PR20-PR
	DC.W	PR21-PR
	DC.W	PR22-PR
	DC.W	PR23-PR
	DC.W	PR24-PR
	DC.W	PR25-PR
	DC.W	PR26-PR
	DC.W	PR27-PR
	DC.W	PR28-PR
	DC.W	PR29-PR
	DC.W	PR30-PR
	DC.W	PR31-PR
	DC.W	PR32-PR
	DC.W	PR33-PR
	DC.W	PR34-PR
	DC.W	PR35-PR
	DC.W	PR36-PR
	DC.W	PR37-PR
	DC.W	PR38-PR
	DC.W	PR39-PR
	DC.W	PR40-PR
	DC.W	PR41-PR
	DC.W	PR42-PR
	DC.W	PR43-PR
	DC.W	PR44-PR
	DC.W	PR45-PR
	DC.W	PR46-PR
	DC.W	PR47-PR
	DC.W	PR48-PR
	DC.W	PR49-PR
	DC.W	PR50-PR
	DC.W	PR51-PR
	DC.W	PR52-PR
	DC.W	PR53-PR
	DC.W	PR54-PR
	DC.W	PR55-PR
	DC.W	PR56-PR
	DC.W	PR57-PR
	DC.W	PR58-PR
	DC.W	PR59-PR
	DC.W	PR60-PR
	DC.W	PR61-PR
;
FPR	DC.W	FPR1-FPR
	DC.W	FPR2-FPR
	DC.W	FPR3-FPR
	DC.W	FPR4-FPR
	DC.W	FPR5-FPR
	DC.W	FPR6-FPR
	DC.W	FPR7-FPR
	DC.W	FPR8-FPR
	DC.W	FPR9-FPR
;
QR	DC.W	QR1-QR
	DC.W	QR2-QR
	DC.W	QR3-QR
	DC.W	QR4-QR
	DC.W	QR5-QR
	DC.W	QR6-QR
	DC.W	QR7-QR
	DC.W	QR8-QR
	DC.W	QR9-QR
	DC.W	QR10-QR
	DC.W	QR11-QR
	DC.W	QR12-QR
	DC.W	QR13-QR
	DC.W	QR14-QR
;
MC_L	LIB	WIN1_ASS_GWDIS_MC_L_BIN
TYPE	LIB	WIN1_ASS_GWDIS_TYPE_BIN
NLIST	LIB	WIN1_ASS_GWDIS_NLIST_BIN
NAMES	LIB	WIN1_ASS_GWDIS_NAMES_BIN
;
FMC_L	LIB	WIN1_ASS_GWDIS_FMC_L_BIN
FTYPE	LIB	WIN1_ASS_GWDIS_FTYPE_BIN
FNLIST	LIB	WIN1_ASS_GWDIS_FNLIST_BIN
FNAMES	LIB	WIN1_ASS_GWDIS_FNAMES_BIN
;
PMC_L	LIB	WIN1_ASS_GWDIS_PMC_L_BIN
PTYPE	LIB	WIN1_ASS_GWDIS_PTYPE_BIN
PNLIST	LIB	WIN1_ASS_GWDIS_PNLIST_BIN
PNAMES	LIB	WIN1_ASS_GWDIS_PNAMES_BIN
;
CON_WW	DC.B	0,0
	DC.B	BLACK,BLACK
	DC.W	6,10,0,214
SCR_OP	DC.B	214,2
	DC.B	BLACK,WHITE
	DC.W	512,210,0,0
CON_CM	DC.B	214,2
	DC.B	RED,WHITE
	DC.W	512,14,0,208
EDL_WIN	DC.B	0,0
	DC.B	RED,WHITE
	DC.W	242,10,266,210
;
HEAD1	DC.W	16
	DC.B	"1 DISASSEMBLE   "
HEAD2	DC.W	6
	DC.B	"2 QUIT"
HEAD3	DC.W	19
	DC.B	"       Output file "
HEAD4	DC.W	19
	DC.B	"     Start address "
HEAD5	DC.W	19
	DC.B	"Start for printing "
HEAD6	DC.W	3
	DC.B	"F1 "
HEAD7	DC.W	15
	DC.B	"toggles PAUSE  "
HEAD8	DC.W	7
	DC.B	":  ESC "
HEAD9	DC.W	5
	DC.B	"stops"
EMESS	DC.W	50
	DC.B	"File exists : Try again, overwrite or add (T/O/A)?"
EMESS1	DC.W	31
	DC.B	"   This machine is not a 68020+"

