home *** CD-ROM | disk | FTP | other *** search
- * 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
-
-