home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Club Amiga de Montreal - CAM
/
CAM_CD_1.iso
/
files
/
092.lha
/
68KDis.asm
< prev
next >
Wrap
Assembly Source File
|
1986-11-20
|
44KB
|
2,388 lines
* Dis, 680000 disassembler
* Greg Lee, Feb. 6, 1986
*
* The program Dis, this source code, and
* the accompanying document are in the public domain
*
* To ma with Metacomco assembler (v10.178):
* assem dis.s -o dis.o -c W150000
* alink dis.o to dis
idnt Dis
section one
lref macro
_LVO\1 equ -6*(\2+4)
endm
call macro
jsr _LVO\1(A6)
endm
print macro
lea \1,A0
bsr msg
endm
char macro
move.b #'\1',D0
bsr prtchr
endm
comma macro
move.b #',',D0
bsr prtchr
endm
ifnot macro
cmp.b #'\1',D0
bne \2
endm
SysBase equ 4
*--Definitions of library references
* Exec
lref AllocMem,29
lref FreeMem,31
lref OpenLibrary,88
* AmigaDOS
lref Open,1
lref Close,2
lref Read,3
lref Write,4
lref Input,5
lref Output,6
lref DeleteFile,8
lref IoErr,18
lref LoadSeg,21
lref UnLoadSeg,22
SegMax equ 255
SymMax equ 3200
IbufLen equ 80
main
lea symtab,A0 * to find symtab when debugging
clr.l (A0)
lea segtable,A0
clr.l (A0)
bsr ioinit
********************** end initialization **************
* A6 holds DOS pointer; A5 holds address to show
* D5 has code; D6 has type; D7 has address offset
moveq #0,D7
print hello
bsr leftprint
lea main,A5
move.l A5,lastadr
.mloop
move.b #0,kflag
moveq #50,D0
bsr column
char *
bsr getstr
cmp.b #1,D3
bne 1$
move.w reqlines,linecount
bra .mdoit
1$ clr.b bflag
ifnot r,10$
bsr symread
bra .mloop
10$
ifnot s,11$
bsr symsave
bra .mloop
11$
cmp.b #2,D3
beq 3$
ifnot =,12$
bsr addsym
move.l lastadr,A5
bra .mdoit
12$
ifnot /,13$
bsr getaddress
beq .mloop
move.l D0,A5
bra .mloop
13$
ifnot o,14$
bsr getaddress
beq .mloop
move.l D0,D7
bra .mdoit
14$
ifnot w,15$
bsr getnum
bne .mloop
move.l D2,D0
bsr findword
bra 2$
15$
ifnot W,16$
bsr getaddress
beq .mloop
bsr findWord
bra 2$
16$
ifnot f,17$
bsr fload
bra 2$
17$
ifnot k,18$
bsr ksave
bra .mloop
18$
ifnot n,19$
bsr getnum
bne .mloop
move.w D2,reqlines
move.w D2,linecount
bra .mdoit
19$
move.b D0,lastcmd
bsr getaddress
beq .mdoit
bsr realaddress
add.l D7,D0
move.l D0,A5
bra .mdoit
2$ tst.l D0
beq .mloop
move.l D0,A5
bra .mdoit
3$ cmp.b lastcmd,D0
beq 31$
move.l lastadr,A5
31$
cmp.b #'>',D0
bne 32$
bsr nextfseg
bra 2$
32$
cmp.b #'<',D0
bne 33$
bsr firstfseg
bra 2$
33$
cmp.b #'q',D0
beq .mdone
ifnot o,34$
move.l lastadr,D7
bra .mdoit
34$
ifnot ?,35$
print helpmsg
print helpmsg2
print helpmsg3
bsr leftprint
bra .mloop
35$
ifnot t,36$
move.b tflag,D0
not.b D0
move.b D0,tflag
bra .mloop
36$
ifnot p,6$
move.b pflag,D0
not.b D0
move.b D0,pflag
bra .mloop
6$ move.b D0,lastcmd
.mdoit
move.b #1,kflag
move.l khandle,D0
bne 2$
1$ move.l A5,lastadr
bsr shlabel
bsr aline
bsr dline
bsr iline
tst.w linecount
bmi .mloop
2$ bsr newline
bra 1$
.mdone
bsr funload
move.l khandle,D1
beq 1$
call Close
1$ moveq #0,D0 * no error return
.mreturn
rts
********************* end main ************************
findword
move.l D0,D2
move.l A5,A0
1$ cmp.w (A0)+,D2
bne 2$
move.l A0,D0
subq.l #2,D0
rts
2$ cmp.l #$80000,A0
bcs 1$
cmp.l #$FFFFFE,A0
bhi 4$
cmp.l #$FC0000,A0
bhi 1$
move.l #$FC0000,A0
bra 1$
4$ moveq #0,D0
rts
findWord
move.l D0,D2
move.l A5,A0
bsr 1$
tst.l D0
bne 5$
move.l A5,A0
addq.l #2,A0
1$ cmp.l (A0)+,D2
bne 2$
move.l A0,D0
subq.l #4,D0
rts
2$ cmp.l #$80000,A0
bcs 1$
cmp.l #$FFFFFE,A0
bhi 4$
cmp.l #$FC0000,A0
bhi 1$
move.l #$FC0000,A0
bra 1$
4$ moveq #0,D0
5$ rts
addsym
move.b stfflag,D0
bne sayisfull
move.l lastadr,D0
bsr pseudoaddress
sub.l D7,D0
move.l endsym,A1
lea endsymtab,A0
cmp.l A0,A1
bhi marksyfull
beq marksyfull
lea ibuf,A0
addq.l #1,A0
cmp.b #'*',(A0)
beq 1$
lea symtab,A1
1$ move.l (A1),D1
beq 2$
cmp.l D1,D0
beq 2$
addq.l #6,A1
bra 1$
2$ move.l D0,(A1)+
move.w farea,D2
move.w D2,(A1)+
tst.l D1
bne 20$
clr.l (A1)
move.l A1,endsym
20$
lea sarea,A1
add.w D2,A1
lea endsarea,A2
cmp.l A2,A1
bhi marksyfull
beq marksyfull
moveq #0,D3
move.l A1,-(SP)
addq.l #1,A1
3$ move.b (A0)+,D0
cmp.b #' ',D0
blt 4$
move.b D0,(A1)+
addq.b #1,D3
bra 3$
4$ cmp.l A2,A1
bhi marksfull
beq marksfull
move.l (SP)+,A1
move.b D3,(A1)
addq #1,D3
add.w D3,D2
move.w D2,farea
5$ rts
marksyfull
move.b #1,stfflag
move.l endsym,A1
subq.l #6,A1
clr.l (A1)
move.l A1,endsym
sayisfull
move.w #-1,linecount
print fullmsg
bra leftprint
buildsym
move.b bflag,D1
beq 8$
move.b stfflag,D1
bne sayisfull
lea obuf,A0
moveq #8,D3
move.w #ByteSize,D1
and.w D6,D1
beq 2$
subq.l #1,A0
move.l A0,-(SP)
move.b D3,(A0)+
addq #1,D3
move.b #'.',(A0)+
cmp.w #LongSize,D1
beq 3$
move.b #'w',(A0)
cmp.w #WordSize,D1
beq 1$
move.b #'b',(A0)
1$ addq.l #1,A0
cmp.b #'0',(A0)
beq 3$
bra 5$
2$ move.l A0,-(SP)
move.b #7,(A0)+
move.w #SubCall,D1
and.w D1,D6
beq 3$
move.b #'R',(A0)+
bra 5$
3$ move.b #'l',(A0)+
4$ cmp.b #'0',(A0)
bne 5$
move.b #'a',(A0)+
cmp.b #'0',(A0)
bne 5$
move.b #'b',(A0)
5$
move.l endsym,A1
lea endsymtab,A0
cmp.l A0,A1
bhi marksfull
beq marksfull
move.l D0,(A1)+
move.w farea,D2
move.w D2,(A1)+
clr.l (A1)
move.l A1,endsym
lea sarea,A1
add.w D2,A1
lea endsarea,A0
cmp.l A0,A1
bhi marksfull
beq marksfull
add.w D3,D2
move.w D2,farea
move.l (SP)+,A0
bra 7$
6$ move.b (A0)+,(A1)+
7$ dbra D3,6$
8$ rts
9$ addq.l #4,SP
rts
marksfull
addq.l #4,SP
bra marksyfull
shlabel
move.l A5,D0
bsr pseudoaddress
move.l D0,D2
sub.l D7,D2
clr.l D1
move.b #'i',D3
lea sarea,A1
lea symtab,A0
bra 2$
1$ addq.l #2,A0
2$ move.l (A0)+,D0
beq 5$
cmp.l D0,D2
beq 3$
bls 1$
cmp.l D0,D1
bhi 1$
move.l D0,D1
move.w (A0)+,D0
cmp.b #'*',1(A1,D0.W)
beq 2$
move.b #'i',D3
cmp.b #'.',1(A1,D0.W)
bne 2$
move.b 2(A1,D0.W),D3
bra 2$
3$ moveq #-1,D1
move.w (A0)+,D0
cmp.b #'*',1(A1,D0.W)
beq 4$
move.b #'i',D3
cmp.b #'.',1(A1,D0.W)
bne 4$
move.b 2(A1,D0.W),D3
cmp.b #2,0(A1,D0.W)
beq 2$
4$ movem.l D1-D3/A0/A1,-(SP)
lea 0(A1,D0.W),A0
cmp.b #'R',1(A0)
bne 40$
move.l A0,-(SP)
bsr newline
move.l (SP)+,A0
40$
bsr substlocal
bsr msg
bsr newline
movem.l (SP)+,D1-D3/A0/A1
bra 2$
5$ tst.l D1
bmi 6$ * change this
beq 6$
cmp.b #'l',D3
bne 6$
eor D1,D2
and.b #%11,D2
beq 6$
move.b #'b',D3
6$ move.b D3,itype
rts
substlocal
lea lastlocal,A1
cmp.b #'B',lastcmd
bne 30$
cmp.b #7,(A0)
bne 30$
cmp.b #'l',1(A0)
bne 30$
move.b #'0',D0
cmp.b #'z',(A1)
bne 1$
move.b D0,(A1)
move.b D0,1(A1)
move.b D0,2(A1)
1$ add.b #1,2(A1)
cmp.b #'9',2(A1)
ble 2$
move.b D0,2(A1)
add.b #1,1(A1)
cmp.b #'9',1(A1)
ble 2$
move.b D0,1(A1)
add.b #1,(A1)
cmp.b #'9',(A1)
bgt 6$
2$ moveq #4,D1
cmp.b (A1)+,D0
bne 3$
subq #1,D1
cmp.b (A1)+,D0
bne 3$
subq #1,D1
cmp.b (A1)+,D0
3$ subq #1,A1
move.l A0,D0
move.b D1,(A0)+
bra 5$
4$ move.b (A1)+,(A0)+
5$ dbra D1,4$
move.l D0,A0
6$ rts
30$
move.b #'z',(A1)
rts
lastlocal
dc.b 'zzz$'
shopdlabel
movem.l D1-D3/A0/A1,-(SP)
bsr pseudoaddress
bra .shpdlbl
shoplabel
movem.l D1-D3/A0/A1,-(SP)
bsr pseudoaddress
moveq #0,D2
sub.l D7,D0
tst.l D1
bne .shplbl
.shpdlbl
moveq #-1,D2
.shplbl
lea symtab,A0
1$ move.l (A0)+,D1
beq 5$
cmp.l D1,D0
bne 2$
move.w (A0),D1
lea sarea,A0
add.w D1,A0
cmp.b #'*',1(A0)
beq 5$
cmp.b #2,(A0)
bne 10$
cmp.b #'.',1(A0)
beq 5$
10$
bsr msg
bra 7$
2$ addq.l #2,A0
bra 1$
5$ tst.l D2
beq 50$
tst.l D0
beq 50$
move.l D0,-(SP)
char $
move.l (SP)+,D0
50$
cmp.l #$FFFFFF,D0
bhi 6$
movem.l D0/D2,-(SP)
tst.l D0
bne 51$
char 0
bra 52$
51$
bsr show6x
52$
movem.l (SP)+,D0/D2
tst.l D2
bne 7$
tst.l D0
beq 7$
bsr buildsym
bra 7$
6$ bsr show8x
7$ movem.l (SP)+,D1-D3/A0/A1
rts
getaddress
bsr getnum
bne findsym
move.l D2,D0
bne 1$
cmp.l #1,D0
1$ rts
findsym
moveq #0,D3
move.b ilen,D3
subq.b #2,D3
lea ibuf,A0
move.b D3,(A0)
lea symtab,A1
2$ move.l (A1)+,D0
beq 30$
move.l D3,D1
move.w (A1)+,D2
move.l A0,-(SP)
move.l A1,-(SP)
lea sarea,A1
add.w D2,A1
3$ cmp.b (A1)+,(A0)+
dbne D1,3$
beq 4$
move.l (SP)+,A1
move.l (SP)+,A0
bra 2$
4$ addq.l #8,SP
30$
tst.l D0
rts
aline
cmp.b #'a',lastcmd
bne .mreturn
bsr showadr
moveq #7,D0
bsr column
move.w #32,D3
move.b D3,olen
lea obuf,A0
subq.w #1,D3
1$ move.b (A5)+,D0
cmp.b #' ',D0
blt 2$
cmp.b #127,D0
blt 3$
2$ move.b #'.',D0
3$ move.b D0,(A0)+
dbra D3,1$
print olen
rts
dline
cmp.b #'d',lastcmd
bne .mreturn
bsr wordalign
bsr showadr
moveq #7,D0
bsr column
bsr 1$
1$ bsr 2$
2$ move.l (A5)+,D0
bsr show8x
bra prtspc
checkcwbreak
move.l A5,D0
addq.l #2,D0
bra .ccbrk1
checkcbreak
move.l A5,D0
.ccbrk1
bsr pseudoaddress
tst.l D1
beq 2$
sub.l D7,D0
lea symtab,A0
1$ move.l (A0)+,D1
beq 3$
addq.l #2,A0
cmp.l D0,D1
bne 1$
2$ tst.l D0
3$ rts
iline
cmp.b #'B',lastcmd
beq 101$
cmp.b #'b',lastcmd
bne 100$
move.b #1,bflag
bra 101$
100$
cmp.b #'l',lastcmd
bne .mreturn
101$
bsr showadr
moveq #8,D0
move.b tflag,D1
beq 102$
moveq #3,D0
102$
bsr column
move.b itype,D0
move.l D0,-(SP)
cmp.b #'w',D0
beq 1$
cmp.b #'l',D0
bne 107$
* covering up references on next
* word boundary to be avoided
bsr checkcwbreak
bne 105$
move.l (SP),D0
bra 1$
105$
move.b #'b',D0
move.l D0,(SP)
107$
cmp.b #'b',D0
beq 1$
cmp.b #'c',D0
bne 103$
lea dcbinst,A0
bra 104$
103$
cmp.b #'a',D0
bne 5$
move.b #'b',D0
1$ lea dcinst,A0
move.b D0,4(A0)
104$
bsr msg
bra 6$
5$ bsr showi
6$ moveq #18,D0
move.b tflag,D1
beq 50$
moveq #13,D0
50$
bsr column
move.l (SP)+,D0
cmp.b #'c',D0
bne 600$
moveq #0,D0
501$
addq.l #1,D0
addq.l #1,A5
move.l D0,-(SP)
pea 503$
pea 502$
bra 62$
502$
addq.l #4,SP
move.l (SP)+,D0
move.b (A5),D1
cmp.b -1(A5),D1
beq 501$
bra 504$
503$
move.l (SP)+,D0
504$
bsr show4x
comma
move.b -1(A5),D0
bra show2x
600$
cmp.b #'b',D0
bne 7$
bra 61$
60$
comma
61$
move.b (A5)+,D0
bsr show2x
pea 60$
62$
move.b printhead,D0
cmp.b #40,D0
bhi 63$
bsr checkcbreak
beq 64$
63$
addq.l #4,SP
64$
rts
7$ cmp.b #'a',D0
bne 8$
bra 74$
70$
addq.l #4,SP
move.b #'''',D0
bsr prtchr
71$
comma
72$
move.b (A5)+,D0
bsr show2x
pea 73$
bra 62$
73$
comma
74$
cmp.b #' ',(A5)
bcs 72$
cmp.b #126,(A5)
bhi 72$
move.b #'''',D0
bsr prtchr
pea 77$
75$
move.b (A5)+,D0
cmp.b #'''',D0
bne 750$
bsr prtchr
move.b #'''',D0
750$
bsr prtchr
pea 76$
bra 62$
76$
cmp.b #' ',(A5)
bcs 70$
cmp.b #126,(A5)
bhi 70$
bra 75$
77$
move.b #'''',D0
bra prtchr
8$ bsr wordalign
cmp.b #'w',D0
bne 9$
bra 81$
80$
comma
81$
move.w (A5)+,D0
bsr show4x
pea 80$
bra 62$
9$ cmp.b #'l',D0
bne showarg
bra 91$
90$
comma
91$
move.l (A5)+,D0
bsr shopdlabel
pea 90$
bra 62$
itype dc.b 'i'
dcinst dc.b 4,'dc.w'
dcbinst dc.b 5,'dcb.b'
cnop 0,2
* search table for instruction
showi
bsr wordalign
move.w (A5)+,D5 * get machine code
move.b #$C0,D1 * extract size field for later
and.b D5,D1
move.b D1,isize
lea mtab,A0
moveq #8,D2 * to pass name (6) and arg type (2)
1$ move.w D5,D1 * start search -- copy code to D1
and.w (A0)+,D1 * use mask
cmp.w (A0)+,D1 * desired op code?
adda D2,A0 * point next entry
bne 1$ * if not, try next
move.w -(A0),D6 * get arg type
lea olen,A1 * ready copy name to obuf
moveq #6,D2 * length of name
move.b D2,(A1)+
adda D2,A1 * after place for name in obuf
subq #1,D2 * move 6 bytes
2$ move.b -(A0),-(A1) * move the name
dbra D2,2$
* here code in D5 and arg type in D6
* now do condition code
move.l A1,A0
addq.l #1,A0
cmp.b #'@',(A0)+
beq 20$
cmp.b #'@',(A0)+
bne 21$
20$
subq.l #1,A0
move.w D5,D0
lsr.w #7,D0
and.w #%00011110,D0 * cond. code times 2
lea condlets,A3
add.w D0,A3
move.b (A3)+,(A0)+
move.b (A3),(A0)
21$
* adjust size and mode for MOVEP
move.w D5,D0
and.w #%1111000100111000,D0
cmp.w #%0000000100001000,D0
bne 22$
or.w #%0000000000100000,D5 * mode is x(An)
or.b #%10000000,isize
bra 23$ * so size like that of MOVEM
22$
* adjust size for MOVEM
move.w #FlagMovem,D0
and.w D6,D0
beq 24$
23$
sub.b #%1000000,isize
add.b #1,olen
bra 3$
24$
move.w #Size,D0
and.w D6,D0
beq ..shx
3$ cmp.b #'.',(A1)+
bne 3$
move.b isize,D0
move.b #'l',(A1)
cmp.b #LongSize,D0
beq 4$
move.b #'w',(A1)
cmp.b #WordSize,D0
beq 4$
move.b #'b',(A1)
move.b #ByteSize,D0
4$ or.b D0,D6
..shx
print olen
rts
* display operand(s) -- code in D5 and type in D6
showarg
move.w D5,D0 * check for no operand
and.w #%1111111111111000,D0
cmp.w #%0100111001110000,D0
bne 100$
rts
100$
lea nameUSP,A0
move.w D5,D0 * move to/from USP
and.w #%1111111111110000,D0
cmp.w #%0100111001100000,D0
bne 311$
move.w D5,D0 * make mode An
and.w #%1111111111000111,D5
move.w #%0000000000001000,D1
or.w D1,D5
and.w D1,D0 * test dir.
bne 310$
300$
move.l A0,-(SP)
bsr 101$
comma
move.l (SP)+,A0
bra msg
310$
bsr msg
bra 105$
311$
cmp.w #%0100111001000000,D0 * TRAP ?
bne 312$
char #
move.w D5,D0
and.w #%00001111,D0
bra show2x
312$
lea nameSR,A0
and.w #%1111111111000000,D0
cmp.w #%0100000011000000,D0
beq 310$
cmp.w #%0100011011000000,D0
beq 300$
lea nameCCR,A0
cmp.w #%0100010011000000,D0
beq 300$
move.w D6,D0 * second operand reg in 1st field?
and.w #ARegField2,D0
beq 201$
cmp.w #RegField1,D0
beq 201$
bsr 101$ * do first operand
comma
move.w D6,D1
moveq #001,D0 * assign An mode
and.w #ARegField2,D1
cmp.w #ARegField2,D1
beq 200$
moveq #0,D0 * else is RegField2, so assign Dn mode
200$
bsr ex11.10.9
bra showea
201$
move.w D5,D0 * test for DBcc
and.w #%1111000011111000,D0
cmp.w #%0101000011001000,D0
bne 202$
and.w #%0000000000000111,D5 * make it look like:
or.w #%0001010111000000,D5 * MOVE EA=x(PC) EA=modeDn,reg
202$
move.w D6,D0 * test for CMPM
and.w #FlagCmpm,D0
beq 203$
and.w #%0000111000000111,D5 * make like MOVE.B with m. (An)+
or.w #%0001000011011000,D5
203$
move.w D6,D0
and.w #PreDecr,D0
beq 204$
move.w D5,D1
and.w #%0000111000000111,D5 * save reg's
or.w #%0001000000000000,D5 * fake MOVE.B
and.w #%0000000000001000,D1 * reg or mem?
beq 204$
or.w #%0000000100100000,D5 * if mem, modes are -(An)
204$
move.w D5,D0
and.w #%1100000000000000,D0
bne 101$
move.w D5,D0
and.w #%0011000000000000,D0 * check for move with 2 EA's
beq 101$
bsr 101$ * got one -- do source
comma
* move 1st EA to pos'n of 2nd
bsr ex11.10.9
move.w D5,D0
and.w #%0000000111000000,D0
lsr.w #3,D0
and.w #%1111000000000000,D5
or.w D1,D5
or.w D0,D5
101$
move.w D5,D0 * test for bit static
and.w #%1111111100000000,D0
cmp.w #%0000100000000000,D0
bne 111$
char #
move.w (A5)+,D1
and.w #%0000000000011111,D1
bra 108$
111$
move.w D6,D0
and.w #SmallImmed,D0
beq 103$
move.w D5,D0 * test for shift inst. with Dn source
and.w #%1111000000100000,D0
cmp.w #%1110000000100000,D0
bne 112$
and.w #%1111111111000111,D5 * zero bits for Dn mode
bra 104$ * go extract Dn field
112$
cmp.w #%1110000000000000,D0
bne 102$
and.w #%1111111111000111,D5
102$
and.w #%1111000000000000,D0
cmp.w #%0111000000000000,D0 * check for moveq
bne 109$
char #
clr.w D0
move.b D5,D0
bpl 110$
move.l D0,-(SP)
char -
move.l (SP)+,D0
ext.w D0
neg.w D0
110$
bra show2x
109$
* here is addq, subq, or shift inst. with 3 bit immed. data
char #
bsr ex11.10.9 * so extract the data
tst.w D1 * 0 represents 8
bne 108$
moveq #8,D1
108$
move.w D1,D0
bsr show2x
bra 105$ * show comma and continue
103$
move.w D6,D0
and.w #ARegField2,D0
cmp.w #RegField1,D0
bne 106$
104$
clr.w D0 * mode 0
bsr ex11.10.9
bsr showea
105$
comma
106$
move.w D6,D0
and.w #Displ,D0
beq .sarg3
* here it's a branch
move.w D5,D0
ext.w D0 * test for displ in next word
bne .shoffs2
shoffs
move.w (A5)+,D0
.shoffs1
ext.l D0
subq.l #2,D0 * since added before pc advanced
.shoffs2
ext.l D0 * add displ to pc
add.l A5,D0
bra shoplabel
.sarg3
move.w D6,D0 * MOVEM ?
and.w #FlagMovem,D0
beq .sarg5
move.w D5,D0
and.w #%0000010000000000,D0
beq .sarg4
move.w (A5)+,D0 * mask is here, even if EA is 1st arg
move.w D0,-(SP)
bsr .sarg5
comma
move.w (SP)+,D0
bra mmask1
.sarg4
bsr mmask
comma
.sarg5
move.w D5,D0 * change mode for LINK & UNLK
and.w #%1111111111110000,D0
cmp.w #%0100111001010000,D0
bne .sarg6
btst #3,D5 * LINK?
bne 1$
bsr 1$
comma
char #
move.w (A5)+,D0
bra shsigned4x
1$ and.w #%1111111111000111,D5
or.w #%0000000000001000,D5
.sarg6
move.w D6,D0
and.w #EffAdr,D0
beq .mreturn * was '.shstub'
* here source is effective address
move.w D6,D0
and.w #Immed,D0
beq 4$
bsr imsrce
comma
4$ move.w D5,D0
and.w #%0111111,D0
move.w D0,D1 * save eff. adr
cmp.w #%0111010,D0
beq shoffs * pc with displacement?
* + abs. short and long, immediate
cmp.w #%0111000,D0 * abs. short?
bne 40$
move.w (A5)+,D0
bra show4x
40$
cmp.w #%0111001,D0 * abs. long?
bne 5$
move.l (A5)+,D0
bra shoplabel
5$ cmp.w #%0111100,D0 * immediate?
beq imsrce.d
cmp.w #%0111011,D0 * pc with index?
beq 50$
and.w #%0111000,D0 * other mode 7 illegal
cmp.w #%0111000,D0
beq .shstub
50$
* here mode not 7 unless pc with index
move.w D1,D0
and.w #%0000111,D1 * get reg bits
and.w #%0111000,D0 * get mode bits
lsr.b #3,D0
showea
bsr depmode
lea olen,A0
move.b D3,(A0)
bra msg
depmode
clr.b D3 * holds length
lea obuf,A0
dbra D0,6$
*Dn
50$
move.b #'D',D0
bsr depbyte
bra depreg
6$ dbra D0,7$
*An
60$
cmp.b #7,D1
bne 61$
move.b #'S',D0
bsr depbyte
move.b #'P',D0
bra depbyte
61$
move.b #'A',D0
bsr depbyte
bra depreg
7$ dbra D0,8$
*(An)
70$
move.b #'(',D0
bsr depbyte
bsr 60$
move.b #')',D0
bra depbyte
8$ dbra D0,9$
*(An)+
bsr 70$
move.b #'+',D0
bra depbyte
9$ dbra D0,10$
*-(An)
move.b #'-',D0
bsr depbyte
bra 70$
10$
dbra D0,11$
*x(An)
*??
move.w (A5)+,D0
bsr shsigned4x
bra 70$
11$
dbra D0,12$
*x(An,D/An.)
*??
move.w (A5),D0
ext.w D0
bsr shsigned4x
move.b #'(',D0
bsr depbyte
bsr 60$
*111$
move.b #',',D0
bsr depbyte
111$
move.w (A5),D1 * get number of index reg
moveq #12,D0
lsr.w D0,D1
and.w #%0111,D1
move.w (A5),D0 * An or Dn?
bmi 112$
bsr 50$
bra 113$
112$
bsr 60$
113$
move.b #'.',D0
bsr depbyte
move.b #'w',D0
move.w (A5)+,D1
btst #11,D1 * .W or .L ?
beq 114$
move.b #'l',D0
114$
bsr depbyte
move.b #')',D0
bra depbyte
12$
move.w (A5),D0
ext.w D0
movem.l D1/D3/A0,-(SP)
bsr .shoffs2
movem.l (SP)+,D1/D3/A0
move.b #'(',D0
bsr depbyte
bra 111$
shsigned4x
movem.l D1/D3/A0,-(SP)
tst.w D0
bpl 1$
neg.w D0
move.w D0,-(SP)
char -
move.w (SP)+,D0
1$ bsr show4x
movem.l (SP)+,D1/D3/A0
rts
mmask
move.w (A5)+,D0 * get mask
mmask1
* if '-(An)', reverse bits
move.w D5,D1
and.w #%0000000000111000,D1
cmp.w #%0000000000100000,D1
bne 20$
move.w #15,D3
10$
roxr.w #1,D0
roxl.w #1,D1
dbra D3,10$
move.w D1,D0
20$
clr.b D2 * last bit not set
clr.l D1 * start with bit 0
clr.b D3 * no bytes deposited yet
lea obuf,A0 * deposit bytes here
1$ btst D1,D0
bne 2$
clr.b D2
bra 4$
* have bit 1 -- should we just put in '-'?
2$ addq.b #1,D1 * glance next bit
tst.b D2 * last bit set?
beq 3$
cmp.b #8,D1 * last D-register?
beq 3$
cmp.b #9,D1 * first A-register?
beq 3$
cmp.b #16,D1 * was last register?
beq 3$
btst D1,D0 * end of range?
beq 3$
cmp.b #'-',D2 * already have hyphen?
beq 5$
move.b #'-',D2
move.b D2,(A0)+
addq.b #1,D3
bra 5$
3$ subq.b #1,D1
bsr mdepreg
st D2
4$ addq.b #1,D1
5$ cmp.b #16,D1
blt 1$
lea olen,A0
move.b D3,(A0)
bra msg
mdepreg
movem.l D0/D1,-(SP)
tst.b D3
beq 1$
cmp.b #'-',D2
beq 1$
move.b #'/',D0
bsr depbyte
1$ move.b #'D',D0
cmp.b #8,D1
blt 2$
move.b #'A',D0
2$ bsr depbyte
and.b #%0111,D1
bsr depreg
movem.l (SP)+,D0/D1
rts
depreg
move.b #'0',D0
add.b D1,D0
depbyte
move.b D0,(A0)+
addq.b #1,D3
rts
ex11.10.9
move.w D5,D1
and.w #%0000111000000000,D1
lsr.w #4,D1
lsr.w #5,D1
rts
.shstub
print _astub
rts
_astub dc.b 6,'oprand'
smodenames
nameSR dc.b 2,'SR'
nameCCR dc.b 3,'CCR'
nameUSP dc.b 3,'USP'
cnop 0,2
imsrce.d
move.w D6,D0
and.w #StatusMode,D0
beq imsrce
lea smodenames,A0
move.w D6,D0
and.w #ByteSize,D0
cmp.w #WordSize,D0
bne msg
lea 3(A0),A0
bra msg
imsrce
char #
move.w D6,D0
and.w #ByteSize,D0
cmp.w #LongSize,D0
bne 1$
move.l (A5),D0
bsr pseudoaddress * no symbol if ref. outside file
move.l (A5)+,D0
tst.l D1
bne shopdlabel
move.l D0,-(SP)
char $
move.l (SP)+,D0
bra show8x
1$ cmp.w #WordSize,D0
beq 2$
move.w (A5)+,D0
bra showbyte
2$ move.w (A5)+,D0
bra show4x
wordalign
move.l D0,-(SP)
move.l A5,D0
bclr #0,D0
move.l D0,A5
move.l (SP)+,D0
rts
showadr
move.l A5,D0
bsr pseudoaddress
tst.l D1
bne 2$
move.w #-1,linecount
addq.l #4,SP
1$ rts
2$ move.b tflag,D1
bne 1$
sub.l D7,D0
bmi show8x
show6x
bsr binhex
lea obuf,A0
addq #1,A0
move.b #6,(A0)
bra msg
showbyte
cmp.b #' ',D0
blt show2x
cmp.b #126,D0
bhi show2x
move.l D0,-(SP)
cmp.b #'''',D0
bne 1$
bsr prtchr
1$ move.b #'''',D0
bsr prtchr
move.l (SP)+,D0
bsr prtchr
move.b #'''',D0
bra prtchr
show2x
cmp.b #9,D0
bhi 1$
add.b #$30,D0
bra prtchr
1$ bsr binhex
lea obuf,A0
addq #5,A0
move.b #'$',(A0)
subq.l #1,A0
move.b #3,(A0)
bra msg
show4x
cmp.w #$FF,D0
bls show2x
bsr binhex
lea obuf,A0
addq #3,A0
move.b #'$',(A0)
subq.l #1,A0
move.b #5,(A0)
bra msg
show8x
bsr binhex
lea olen,A0
bra msg
* D0 to hex in obuf
binhex
move.b #8,olen
lea obuf,A0
add.l #8,A0
lea hextab,A1
moveq #7,D1
1$ move.l D0,D2
and.l #15,D2
move.b 0(A1,D2),-(A0)
lsr.l #4,D0
dbra D1,1$
rts
getsnum
movem.l D0/D1,-(SP)
move.b #'0',D1
bra .gtnm
* hex in ibuf to D2
getnum
lea ibuf,A0
addq.l #1,A0
movem.l D0/D1,-(SP)
move.b (A0)+,D1
.gtnm
clr.l D2
clr.l D0
cmp.b #'0',D1 * is it a decimal digit?
bcs 9$
cmp.b #'9',D1
bhi 9$
lea hextab,A1
1$ moveq #15,D3
2$ cmp.b 0(A1,D3),D1
dbeq D3,2$
bne 8$ * if not hex digit, done
lsl.l #4,D2
add.l D3,D2
move.b (A0)+,D1
addq.b #1,D0
cmp.b #'a',D1
blt 1$
sub.b #32,D1
bra 1$
8$ move.b D0,D3
cmp.l D2,D2 * signal ok
9$ movem.l (SP)+,D0/D1
rts
hextab dc.b '0123456789ABCDEF'
symread
moveq #0,D0
move.w D0,farea
move.b D0,bufchcount
move.l D0,bufptr
move.b D0,stfflag
move.w #SymMax,-(SP)
lea symtab,A1
1$ subq.w #1,(SP)
beq 10$
move.l A1,-(SP)
bsr readln
move.l (SP)+,A1
tst.b D3
bne 2$
10$
addq #2,SP
move.l A1,endsym
clr.l (A1) * terminate table
rts
2$ movem.l D3/A1,-(SP)
bsr getsnum * leaves A0 at beginning of symbol
move.b D3,D0
movem.l (SP)+,D3/A1
sub.b D0,D3 * just scanned 9(?) bytes
move.l D2,(A1)+ * put number in table
move.w farea,D2
move.w D2,(A1)+
move.l A1,-(SP)
lea sarea,A1
add.w D2,A1
move.b D3,(A1)+ * length to table
add.w D3,D2
addq.w #1,D2
move.w D2,farea
* move the symbol
subq #1,D3
3$ move.b (A0)+,(A1)+
dbra D3,3$
move.l (SP)+,A1
bra 1$
* return A0 pointing to line and D3 length of line
readln
move.l bufptr,A0
move.l A0,-(SP)
moveq #0,D3 * no chars in line yet
* back to here when was necessary to read more from file
.rdln.cont
moveq #0,D2
move.b bufchcount,D2
bmi 5$ * this means file is exhausted
beq .rdln.more
subq.b #1,D2
2$ cmp.b #10,(A0)+
beq 4$
addq.b #1,D3
3$ dbra D2,2$
* ran out of chars -- go get more
bra .rdln.more
* have one line -- check not empty
4$ tst.b D3
bne 5$
move.l A0,(SP) * replace pointer to ret.
bra 3$
5$ move.l A0,bufptr
move.b D2,bufchcount
move.l (SP)+,A0
rts
.rdln.more
* have partial line in buffer with D3 chars in it
move.l (SP)+,A1 * beginning of partial line
* while D3>0 move chars back to beginning of buffer
lea ibuf,A0
move.l A0,-(SP) * for ret.
move.l D3,-(SP)
subq.b #1,D3
bmi 7$ * if line was of 0 length
6$ move.b (A1)+,(A0)+
dbra D3,6$
* if file is not yet open, A1 will be 0, since
* that is initial value of bufptr
7$ move.l A1,D0
bne 8$
* open the file
bsr seename
move.l #1005,D2
call Open
tst.l D0
bne 71$
bsr .symerr
addq.l #8,SP * ptr and char count were on stack
moveq #0,D3
rts
71$
move.l D0,symhandle
* fill remainder of buffer with 80-(D3) chars
8$ move.l #80,D3
move.l (SP)+,D0
sub.b D0,D3
move.l D0,-(SP)
lea ibuf,A1
add.l D0,A1
* save where to continue processing line
move.l A1,-(SP)
move.l symhandle,D1
move.l A1,D2
call Read
tst.b D0
bne 9$
move.l symhandle,D1
call Close
st D0
9$ move.b D0,bufchcount
move.l (SP)+,A0 * continue processing here
move.l (SP)+,D3 * chars scanned so far
bra .rdln.cont
seename
lea ibuf,A0
addq.l #1,A0
tst.b (A0)
bne 1$
lea symfilename,A0
1$ move.l A0,D1
rts
symsave
bsr seename
move.l D1,-(SP)
call DeleteFile
move.l (SP)+,D1
move.l #1006,D2
call Open
tst.l D0
beq .symerr
move.l D0,D1 * keep handle in D1 throughout
lea symtab,A1
1$ move.l (A1)+,D0
beq .symclose
movem.l D1/A1,-(SP)
bsr binhex
movem.l (SP)+,D1/A1
move.w (A1)+,D2
* lea SymLen-4(A1),A0
move.l A1,-(SP) * save pointer to next symtab entry
lea sarea,A1
add.w D2,A1
lea obuf,A0
move.l A0,-(SP) * save for pass to WRITE
lea 8(A0),A0
move.b #' ',(A0)+
moveq #0,D3
move.b (A1)+,D3 * length of symbol
move.l D3,D2 * count letters to move
add.w #10,D3 * chars to write
subq #1,D2
2$ move.b (A1)+,(A0)+
dbra D2,2$
move.b #10,(A0)
move.l (SP)+,D2 * obuf is buffer
movem.l D1/D3,-(SP) * save handle & len
call Write
movem.l (SP)+,D1/D3
move.l (SP)+,A1
cmp.l D0,D3
beq 1$ * loop if OK
bsr .symclose
bra .symerr
.symclose
call Close
rts
.symerr
call IoErr
jmp show4x
funload
move.l fileseg,D1
beq 1$
call UnLoadSeg
moveq #0,D0
move.l D0,fileseg
move.l D0,foreseg
move.l D0,segtable
1$ rts
fload
bsr funload
bsr seename
call LoadSeg
move.l D0,fileseg
beq .linkseg
move.b #-1,pflag
move.w #SegMax,D3
lea segtable,A0
move.l D0,A1
1$ add.l A1,A1
add.l A1,A1
move.l A1,D1
addq.l #4,D1
move.l D1,(A0)+
move.l -4(A1),D1
subq.l #8,D1
move.l D1,(A0)+
clr.l (A0)
subq.w #1,D3
beq .linkseg
move.l (A1),A1
move.l A1,D1
bne 1$
.linkseg
tst.l D0
beq 2$
lsl.l #2,D0
move.l D0,A5
move.l (A5)+,D0
move.l D0,foreseg
move.l A5,D0
2$ rts
firstfseg
move.l fileseg,D0
bra .linkseg
nextfseg
move.l foreseg,D0
bra .linkseg
pseudoaddress
moveq #-1,D1
move.b pflag,D1
beq 2$
lea segtable,A0
moveq #0,D4
1$ move.l (A0)+,D1
beq 2$
move.l (A0)+,D2
add.l D2,D4
move.l D0,D3
sub.l D1,D3
bmi 1$
cmp.l D2,D3
bge 1$
sub.l D2,D4
add.l D4,D3
move.l D3,D0
2$ rts
realaddress
move.b pflag,D1
beq 2$
lea segtable,A0
moveq #0,D4
1$ move.l (A0)+,D1
beq 2$
move.l (A0)+,D2
add.l D2,D4
move.l D0,D3
cmp.l D4,D3
bge 1$
sub.l D2,D4
sub.l D4,D3
add.l D3,D1
move.l D1,D0
2$ rts
ksave
lea ibuf,A0
addq.l #1,A0
tst.b (A0)
bne 1$
rts
1$ move.l A0,D1
move.l D1,-(SP)
call DeleteFile
move.l (SP)+,D1
move.l #1006,D2
call Open
move.l D0,khandle
tst.l D0
beq .symerr
rts
khandle dc.l 0
fileseg dc.l 0
foreseg dc.l 0
symhandle dc.l 0
bufptr dc.l 0
bufchcount dc.b 0
symfilename dc.b 'symtab',0
cnop 0,2
* string from console to obuf
getstr
move.l ihandle,D1
lea ibuf,A1
move.l A1,D2
moveq #80,D3
move.l A1,-(SP)
call Read
move.l (SP)+,A1
move.b #0,-1(A1,D0.W)
move.b D0,ilen
move.b D0,D3
move.b (A1),D0
leftprint
move.b #0,printhead
rts
column
move.b D0,D3
sub.b printhead,D0
beq 2$
bpl 1$
move.w D3,-(SP)
bsr newline
move.w (SP)+,D0
1$ move.b D0,splen
lea splen,A0
bra msg
2$ rts
newline
sub.w #1,linecount
move.b #10,D0
bsr prtchr
bra leftprint
prtspc
move.b #' ',D0
* char in D0 to console
prtchr
move.b D0,obuf
move.l ohandle,D1
lea obuf,A1
move.l A1,D2
moveq #1,D3
bra .msg1
* message to console
msg
move.l ohandle,D1
clr.l D3
move.b (A0)+,D3
move.l A0,D2
.msg1
add.b D3,printhead
movem.l D2/D3,-(SP)
call Write
movem.l (SP)+,D2/D3
move.l khandle,D1
beq 1$
move.b kflag,D0
beq 1$
call Write
1$ rts
* obtain pointer to AmigaDOS
ioinit
move.l SysBase,A6 * ready call to OpenLibrary
lea libname,A1
moveq #0,D0
call OpenLibrary
move.l D0,A6
move.l D0,DOS_point
* obtain file handles for output and input opened by CLI
call Output
move.l D0,ohandle
call Input
move.l D0,ihandle
rts
cnop 0,4
section three,bss
DOS_point ds.l 1
ohandle ds.l 1
ihandle ds.l 1
olen ds.b 1
obuf ds.b 80
ilen ds.b 1
ibuf ds.b IbufLen
* now on word boundary
segtable ds.l SegMax*2
ds.l 1
symtab ds.b SymMax*6
endsymtab ds.b 6
sarea ds.b SymMax*7
endsarea ds.b 30
section two,data
kflag dc.b 0
tflag dc.b 0
pflag dc.b 0
bflag dc.b 0
stfflag dc.b 0
splen dc.b 0
dcb.b 80,' '
printhead dc.b 0
lastcmd dc.b 'l'
cnop 0,2
reqlines dc 20
linecount dc -1
farea dc 0
lastadr dc.l 0
endsym dc.l symtab
libname dc.b 'dos.library',0
hello dc.b 26,'Disassemble (? for info).',10
fullmsg dc.b 1$-*-1
dc.b 10,'Symbol table is full',10
1$
helpmsg dc.b 1$-*-1
dc.b 'l[addr] list instructions',10
dc.b 'd[addr] dump in hex',10
dc.b 'a[addr] ascii dump',10
dc.b '/addr address is this',10
dc.b '=<symbol> add symbol to table',10
dc.b 'r[<name>] read file (symtab)',10
dc.b 's[<name>] save to file (symtab)',10
dc.b 'q quit',10
1$
helpmsg2 dc.b 1$-*-1
dc.b 'w<num> where is this word?',10
dc.b 'W<addr> where is this longword?',10
dc.b 'f<name> file to disassemble',10
dc.b '> next code segment',10
dc.b '< first code segment',10
dc.b 'o[num] offset addresses',10
1$
helpmsg3 dc.b 1$-*-1
dc.b 'p offset by segment toggle',10
dc.b 'k<name> keep output in file',10
dc.b 't trim toggle',10
dc.b 'b[addr] build symbols',10
dc.b 'n<num> print n lines after <CR>',10
1$
isize dc.b 0
condlets dc.b 't rahilscccsneeqvcvsplmigeltgtle'
Size equ %0000000000000001
EffAdr equ %0000000000000010
Displ equ %0000000000000100
Immed equ %0000000000001000
RegField1 equ %0000000000010000
RegField2 equ %0000000000100000
ARegField2 equ %0000000000110000
ByteSize equ %0000000011000000
WordSize equ %0000000001000000
LongSize equ %0000000010000000
SmallImmed equ %0000000100000000
FlagMovem equ %0000001000000000
FlagCmpm equ %0000010000000000
StatusMode equ %0000100000000000
PreDecr equ %0001000000000000
SubCall equ %0010000000000000
cnop 0,2
mtab
dc %1111111100000000,%0000000000000000
dc.b 'or. '
dc EffAdr!Size!Immed!StatusMode
dc %1111000110111000,%0000000100001000
dc.b 'movep.'
dc EffAdr!RegField2
dc %1111000110111000,%0000000110001000
dc.b 'movep.'
dc EffAdr!RegField1
dc %1111000111000000,%0000000100000000
dc.b 'btst '
dc EffAdr!RegField1
dc %1111000111000000,%0000000101000000
dc.b 'bchg '
dc EffAdr!RegField1
dc %1111000111000000,%0000000110000000
dc.b 'bclr '
dc EffAdr!RegField1
dc %1111000111000000,%0000000111000000
dc.b 'bset '
dc EffAdr!RegField1
dc %1111111100000000,%0000001000000000
dc.b 'and. '
dc EffAdr!Size!Immed!StatusMode
dc %1111111100000000,%0000010000000000
dc.b 'sub. '
dc EffAdr!Size!Immed
dc %1111111100000000,%0000011000000000
dc.b 'add. '
dc EffAdr!Size!Immed
dc %1111111111000000,%0000100000000000
dc.b 'btst '
dc EffAdr
dc %1111111111000000,%0000100001000000
dc.b 'bchg '
dc EffAdr
dc %1111111111000000,%0000100010000000
dc.b 'bclr '
dc EffAdr
dc %1111111111000000,%0000100011000000
dc.b 'bset '
dc EffAdr
dc %1111111100000000,%0000101000000000
dc.b 'eor. '
dc EffAdr!Size!Immed!StatusMode
dc %1111111100000000,%0000110000000000
dc.b 'cmp. '
dc EffAdr!Size!Immed
dc %1111000000000000,%0001000000000000
dc.b 'move.b'
dc EffAdr!ByteSize
dc %1111000000000000,%0010000000000000
dc.b 'move.l'
dc EffAdr!LongSize
dc %1111000000000000,%0011000000000000
dc.b 'move.w'
dc EffAdr!WordSize
dc %1111111111000000,%0100000011000000
dc.b 'move ' * from SR
dc EffAdr
dc %1111111100000000,%0100000000000000
dc.b 'negx. '
dc EffAdr!Size
dc %1111000111000000,%0100000110000000
dc.b 'chk '
dc EffAdr!RegField2
dc %1111000111000000,%0100000111000000
dc.b 'lea '
dc EffAdr!ARegField2
dc %1111111100000000,%0100001000000000
dc.b 'clr. '
dc EffAdr!Size
dc %1111111111000000,%0100010011000000
dc.b 'move ' * to CCR
dc EffAdr
dc %1111111100000000,%0100010000000000
dc.b 'neg. '
dc EffAdr!Size
dc %1111111111000000,%0100011011000000
dc.b 'move ' * to SR
dc EffAdr
dc %1111111100000000,%0100011000000000
dc.b 'not. '
dc EffAdr!Size
dc %1111111111000000,%0100100000000000
dc.b 'nbcd '
dc EffAdr
dc %1111111111111000,%0100100001000000
dc.b 'swap '
dc EffAdr
dc %1111111111111000,%0100100010000000
dc.b 'ext.w '
dc EffAdr!WordSize
dc %1111111111111000,%0100100011000000
dc.b 'ext.l '
dc EffAdr!LongSize
dc %1111111111000000,%0100100001000000
dc.b 'pea '
dc EffAdr
dc %1111111110000000,%0100100010000000
dc.b 'movem.' ;has size!
dc EffAdr!FlagMovem
dc %1111111100000000,%0100101000000000
dc.b 'tst. '
dc EffAdr!Size
dc %1111111111000000,%0100101011000000
dc.b 'tas '
dc EffAdr
dc %1111111111111111,%0100101011111100
dc.b 'illegl'
dc 0
dc %1111111110000000,%0100110010000000
dc.b 'movem.'
dc EffAdr!FlagMovem
dc %1111111111110000,%0100111001000000
dc.b 'trap '
dc 0
dc %1111111111111000,%0100111001010000
dc.b 'link '
dc EffAdr
dc %1111111111111000,%0100111001011000
dc.b 'unlk '
dc EffAdr
*MOVE to USP
*MOVE from USP
dc %1111111111110000,%0100111001100000
dc.b 'move ' * USP
dc EffAdr
dc %1111111111111111,%0100111001110000
dc.b 'reset '
dc 0
dc %1111111111111111,%0100111001110001
dc.b 'nop '
dc 0
dc %1111111111111111,%0100111001110010
dc.b 'stop '
dc 0
dc %1111111111111111,%0100111001110011
dc.b 'rte '
dc 0
*RTD
dc %1111111111111111,%0100111001110101
dc.b 'rts '
dc 0
dc %1111111111111111,%0100111001110110
dc.b 'trapv '
dc 0
dc %1111111111111111,%0100111001110111
dc.b 'rtr '
dc 0
*MOVEC
dc %1111111111000000,%0100111010000000
dc.b 'jsr '
dc EffAdr!SubCall
dc %1111111111000000,%0100111011000000
dc.b 'jmp '
dc EffAdr
dc %1111000011111000,%0101000011001000
dc.b 'db@@ '
dc EffAdr * lie required by showarg
dc %1111111111000000,%0101000111000000
dc.b 'sf '
dc EffAdr
dc %1111000011000000,%0101000011000000
dc.b 's@@ '
dc EffAdr
dc %1111000100000000,%0101000000000000
dc.b 'addq. '
dc EffAdr!Size!SmallImmed
dc %1111000100000000,%0101000100000000
dc.b 'subq. '
dc EffAdr!Size!SmallImmed
dc %1111111100000000,%0110000100000000
dc.b 'bsr '
dc Displ!SubCall
dc %1111111100000000,%0110000000000000
dc.b 'bra '
dc Displ
dc %1111000000000000,%0110000000000000
dc.b 'b@@ '
dc Displ
dc %1111000100000000,%0111000000000000
dc.b 'moveq '
dc RegField2!SmallImmed
dc %1111000111000000,%1000000011000000
dc.b 'divu '
dc EffAdr!RegField2
dc %1111000111110000,%1000000100000000
dc.b 'sbcd '
dc EffAdr!PreDecr
dc %1111000111000000,%1000000111000000
dc.b 'divs '
dc EffAdr!RegField2
dc %1111000100000000,%1000000000000000
dc.b 'or. '
dc EffAdr!Size!RegField2
dc %1111000100000000,%1000000100000000
dc.b 'or. '
dc EffAdr!Size!RegField1
dc %1111000111000000,%1001000011000000
dc.b 'sub.w '
dc EffAdr!WordSize!ARegField2
dc %1111000111000000,%1001000111000000
dc.b 'sub.l '
dc EffAdr!LongSize!ARegField2
dc %1111000100110000,%1001000100000000
dc.b 'subx. '
dc EffAdr!Size!PreDecr
dc %1111000100000000,%1001000000000000
dc.b 'sub. '
dc EffAdr!Size!RegField2
dc %1111000100000000,%1001000100000000
dc.b 'sub. '
dc EffAdr!Size!RegField1
dc %1111000111000000,%1011000011000000
dc.b 'cmp.w '
dc EffAdr!WordSize!ARegField2
dc %1111000111000000,%1011000111000000
dc.b 'cmp.l '
dc EffAdr!LongSize!ARegField2
dc %1111000100000000,%1011000000000000
dc.b 'cmp. '
dc EffAdr!Size!RegField2
dc %1111000100111000,%1011000100001000
dc.b 'cmpm. '
dc EffAdr!Size!FlagCmpm
dc %1111000100000000,%1011000100000000
dc.b 'eor. '
dc EffAdr!Size!RegField1
dc %1111000111110000,%1100000100000000
dc.b 'abcd '
dc EffAdr!PreDecr
dc %1111000111000000,%1100000011000000
dc.b 'mulu '
dc EffAdr!RegField2
dc %1111000111111000,%1100000101000000
dc.b 'exg '
dc EffAdr!RegField2
dc %1111000111111000,%1100000101001000
dc.b 'exg '
dc EffAdr!ARegField2
dc %1111000111111000,%1100000110001000
dc.b 'exg '
dc EffAdr!RegField2
dc %1111000111000000,%1100000111000000
dc.b 'muls '
dc EffAdr!RegField2
dc %1111000100000000,%1100000000000000
dc.b 'and. '
dc EffAdr!Size!RegField2
dc %1111000100000000,%1100000100000000
dc.b 'and. '
dc EffAdr!Size!RegField1
dc %1111000111000000,%1101000011000000
dc.b 'add.w '
dc EffAdr!WordSize!ARegField2
dc %1111000111000000,%1101000111000000
dc.b 'add.l '
dc EffAdr!LongSize!ARegField2
dc %1111000100110000,%1101000100000000
dc.b 'addx. '
dc EffAdr!Size!PreDecr
dc %1111000100000000,%1101000000000000
dc.b 'add. '
dc EffAdr!Size!RegField2
dc %1111000100000000,%1101000100000000
dc.b 'add. '
dc EffAdr!Size!RegField1
dc %1111111111000000,%1110000011000000
dc.b 'asr '
dc EffAdr
dc %1111111111000000,%1110000111000000
dc.b 'asl '
dc EffAdr
dc %1111111111000000,%1110001011000000
dc.b 'lsr '
dc EffAdr
dc %1111111111000000,%1110001111000000
dc.b 'lsl '
dc EffAdr
dc %1111111111000000,%1110010011000000
dc.b 'roxr '
dc EffAdr
dc %1111111111000000,%1110010111000000
dc.b 'roxl '
dc EffAdr
dc %1111111111000000,%1110011011000000
dc.b 'ror '
dc EffAdr
dc %1111111111000000,%1110011111000000
dc.b 'rol '
dc EffAdr
dc %1111000100011000,%1110000000000000
dc.b 'asr. '
dc EffAdr!Size!SmallImmed
dc %1111000100011000,%1110000100000000
dc.b 'asl. '
dc EffAdr!Size!SmallImmed
dc %1111000100011000,%1110000000001000
dc.b 'lsr. '
dc EffAdr!Size!SmallImmed
dc %1111000100011000,%1110000100001000
dc.b 'lsl. '
dc EffAdr!Size!SmallImmed
dc %1111000100011000,%1110000000010000
dc.b 'roxr. '
dc EffAdr!Size!SmallImmed
dc %1111000100011000,%1110000100010000
dc.b 'roxl. '
dc EffAdr!Size!SmallImmed
dc %1111000100011000,%1110000000011000
dc.b 'ror. '
dc EffAdr!Size!SmallImmed
dc %1111000100011000,%1110000100011000
dc.b 'rol. '
dc EffAdr!Size!SmallImmed
dc 0,0
dc.b '???? '
dc 0
end