home *** CD-ROM | disk | FTP | other *** search
/ Club Amiga de Montreal - CAM / CAM_CD_1.iso / files / 092.lha / 68KDis.asm < prev    next >
Assembly Source File  |  1986-11-20  |  44KB  |  2,388 lines

  1. * Dis, 680000 disassembler
  2. * Greg Lee, Feb. 6, 1986
  3. *
  4. * The program Dis, this source code, and
  5. * the accompanying document are in the public domain
  6. *
  7.  
  8. * To ma with Metacomco assembler (v10.178):
  9. *  assem dis.s -o dis.o -c W150000
  10. *  alink dis.o to dis
  11.  
  12.     idnt  Dis
  13.  
  14.     section  one
  15.  
  16. lref    macro
  17. _LVO\1  equ     -6*(\2+4)
  18.     endm
  19.  
  20. call  macro
  21.     jsr     _LVO\1(A6)
  22.     endm
  23. print macro
  24.     lea     \1,A0
  25.     bsr     msg
  26.     endm
  27. char  macro
  28.     move.b  #'\1',D0
  29.     bsr     prtchr
  30.     endm
  31. comma macro
  32.     move.b  #',',D0
  33.     bsr     prtchr
  34.     endm
  35. ifnot macro
  36.     cmp.b   #'\1',D0
  37.     bne     \2
  38.     endm
  39.  
  40. SysBase equ     4
  41.  
  42.  
  43. *--Definitions of library references
  44.  
  45.  
  46. *       Exec
  47.     lref    AllocMem,29
  48.     lref    FreeMem,31
  49.     lref    OpenLibrary,88
  50.  
  51. *       AmigaDOS
  52.     lref    Open,1
  53.     lref    Close,2
  54.     lref    Read,3
  55.     lref    Write,4
  56.     lref    Input,5
  57.     lref    Output,6
  58.     lref    DeleteFile,8
  59.     lref    IoErr,18
  60.     lref    LoadSeg,21
  61.     lref    UnLoadSeg,22
  62.  
  63.  
  64. SegMax  equ     255
  65. SymMax  equ     3200
  66. IbufLen equ     80
  67.  
  68. main
  69.     lea     symtab,A0       * to find symtab when debugging
  70.     clr.l   (A0)
  71.     lea     segtable,A0
  72.     clr.l   (A0)
  73.  
  74.     bsr     ioinit
  75. ********************** end initialization **************
  76. *  A6 holds DOS pointer; A5 holds address to show
  77. *  D5 has code; D6 has type; D7 has address offset
  78.     moveq   #0,D7
  79.  
  80.     print   hello
  81.     bsr     leftprint
  82.  
  83.  
  84.     lea     main,A5
  85.     move.l  A5,lastadr
  86. .mloop
  87.     move.b  #0,kflag
  88.     moveq   #50,D0
  89.     bsr     column
  90.     char    *
  91.     bsr     getstr
  92.     cmp.b   #1,D3
  93.     bne     1$
  94.     move.w  reqlines,linecount
  95.     bra     .mdoit
  96.  
  97. 1$      clr.b   bflag
  98.  
  99.     ifnot   r,10$
  100.     bsr     symread
  101.     bra     .mloop
  102.  
  103. 10$
  104.     ifnot   s,11$
  105.     bsr     symsave
  106.     bra     .mloop
  107.  
  108. 11$
  109.     cmp.b   #2,D3
  110.     beq     3$
  111.  
  112.     ifnot   =,12$
  113.     bsr     addsym
  114.     move.l  lastadr,A5
  115.     bra     .mdoit
  116. 12$
  117.     ifnot   /,13$
  118.     bsr     getaddress
  119.     beq     .mloop
  120.     move.l  D0,A5
  121.     bra     .mloop
  122. 13$
  123.     ifnot   o,14$
  124.     bsr     getaddress
  125.     beq     .mloop
  126.     move.l  D0,D7
  127.     bra     .mdoit
  128. 14$
  129.     ifnot   w,15$
  130.     bsr     getnum
  131.     bne     .mloop
  132.     move.l  D2,D0
  133.     bsr     findword
  134.     bra     2$
  135.  
  136. 15$
  137.     ifnot   W,16$
  138.     bsr     getaddress
  139.     beq     .mloop
  140.     bsr     findWord
  141.     bra     2$
  142.  
  143. 16$
  144.     ifnot   f,17$
  145.     bsr     fload
  146.     bra     2$
  147. 17$
  148.     ifnot   k,18$
  149.     bsr     ksave
  150.     bra     .mloop
  151. 18$
  152.     ifnot   n,19$
  153.     bsr     getnum
  154.     bne     .mloop
  155.     move.w  D2,reqlines
  156.     move.w  D2,linecount
  157.     bra     .mdoit
  158.  
  159. 19$
  160.     move.b  D0,lastcmd
  161.     bsr     getaddress
  162.     beq     .mdoit
  163.     bsr     realaddress
  164.     add.l   D7,D0
  165.     move.l  D0,A5
  166.     bra     .mdoit
  167.  
  168.  
  169. 2$      tst.l   D0
  170.     beq     .mloop
  171.     move.l  D0,A5
  172.     bra     .mdoit
  173.  
  174.  
  175. 3$      cmp.b   lastcmd,D0
  176.     beq     31$
  177.     move.l  lastadr,A5
  178. 31$
  179.     cmp.b   #'>',D0
  180.     bne     32$
  181.     bsr     nextfseg
  182.     bra     2$
  183. 32$
  184.     cmp.b   #'<',D0
  185.     bne     33$
  186.     bsr     firstfseg
  187.     bra     2$
  188. 33$
  189.     cmp.b   #'q',D0
  190.     beq     .mdone
  191.  
  192.     ifnot   o,34$
  193.     move.l  lastadr,D7
  194.     bra     .mdoit
  195.  
  196. 34$
  197.     ifnot   ?,35$
  198.     print   helpmsg
  199.     print   helpmsg2
  200.     print   helpmsg3
  201.     bsr     leftprint
  202.     bra     .mloop
  203. 35$
  204.     ifnot   t,36$
  205.     move.b  tflag,D0
  206.     not.b   D0
  207.     move.b  D0,tflag
  208.     bra     .mloop
  209. 36$
  210.     ifnot   p,6$
  211.     move.b  pflag,D0
  212.     not.b   D0
  213.     move.b  D0,pflag
  214.     bra     .mloop
  215.  
  216. 6$      move.b  D0,lastcmd
  217.  
  218. .mdoit
  219.     move.b  #1,kflag
  220.     move.l  khandle,D0
  221.     bne     2$
  222. 1$      move.l  A5,lastadr
  223.     bsr     shlabel
  224.     bsr     aline
  225.     bsr     dline
  226.     bsr     iline
  227.     tst.w   linecount
  228.     bmi     .mloop
  229. 2$      bsr     newline
  230.     bra     1$
  231.  
  232. .mdone
  233.     bsr     funload
  234.     move.l  khandle,D1
  235.     beq     1$
  236.     call    Close
  237. 1$      moveq   #0,D0   * no error return
  238. .mreturn
  239.     rts
  240. ********************* end main ************************
  241.  
  242.  
  243.  
  244. findword
  245.     move.l  D0,D2
  246.     move.l  A5,A0
  247. 1$      cmp.w   (A0)+,D2
  248.     bne     2$
  249.     move.l  A0,D0
  250.     subq.l  #2,D0
  251.     rts
  252. 2$      cmp.l   #$80000,A0
  253.     bcs     1$
  254.     cmp.l   #$FFFFFE,A0
  255.     bhi     4$
  256.     cmp.l   #$FC0000,A0
  257.     bhi     1$
  258.     move.l  #$FC0000,A0
  259.     bra     1$
  260. 4$      moveq   #0,D0
  261.     rts
  262.  
  263. findWord
  264.     move.l  D0,D2
  265.     move.l  A5,A0
  266.     bsr     1$
  267.     tst.l   D0
  268.     bne     5$
  269.     move.l  A5,A0
  270.     addq.l  #2,A0
  271. 1$      cmp.l   (A0)+,D2
  272.     bne     2$
  273.     move.l  A0,D0
  274.     subq.l  #4,D0
  275.     rts
  276. 2$      cmp.l   #$80000,A0
  277.     bcs     1$
  278.     cmp.l   #$FFFFFE,A0
  279.     bhi     4$
  280.     cmp.l   #$FC0000,A0
  281.     bhi     1$
  282.     move.l  #$FC0000,A0
  283.     bra     1$
  284. 4$      moveq   #0,D0
  285. 5$      rts
  286.  
  287.  
  288. addsym
  289.     move.b  stfflag,D0
  290.     bne     sayisfull
  291.     move.l  lastadr,D0
  292.     bsr     pseudoaddress
  293.     sub.l   D7,D0
  294.     move.l  endsym,A1
  295.     lea     endsymtab,A0
  296.     cmp.l   A0,A1
  297.     bhi     marksyfull
  298.     beq     marksyfull
  299.     lea     ibuf,A0
  300.     addq.l  #1,A0
  301.     cmp.b   #'*',(A0)
  302.     beq     1$
  303.     lea     symtab,A1
  304. 1$      move.l  (A1),D1
  305.     beq     2$
  306.     cmp.l   D1,D0
  307.     beq     2$
  308.     addq.l  #6,A1
  309.     bra     1$
  310. 2$      move.l  D0,(A1)+
  311.     move.w  farea,D2
  312.     move.w  D2,(A1)+
  313.     tst.l   D1
  314.     bne     20$
  315.     clr.l   (A1)
  316.     move.l  A1,endsym
  317. 20$
  318.     lea     sarea,A1
  319.     add.w   D2,A1
  320.     lea     endsarea,A2
  321.     cmp.l   A2,A1
  322.     bhi     marksyfull
  323.     beq     marksyfull
  324.     moveq   #0,D3
  325.     move.l  A1,-(SP)
  326.  
  327.     addq.l  #1,A1
  328. 3$      move.b  (A0)+,D0
  329.     cmp.b   #' ',D0
  330.     blt     4$
  331.     move.b  D0,(A1)+
  332.     addq.b  #1,D3
  333.     bra     3$
  334. 4$      cmp.l   A2,A1
  335.     bhi     marksfull
  336.     beq     marksfull
  337.  
  338.     move.l  (SP)+,A1
  339.     move.b  D3,(A1)
  340.  
  341.     addq    #1,D3
  342.     add.w   D3,D2
  343.     move.w  D2,farea
  344. 5$      rts
  345. marksyfull
  346.     move.b  #1,stfflag
  347.     move.l  endsym,A1
  348.     subq.l  #6,A1
  349.     clr.l   (A1)
  350.     move.l  A1,endsym
  351. sayisfull
  352.     move.w  #-1,linecount
  353.     print   fullmsg
  354.     bra     leftprint
  355.  
  356. buildsym
  357.     move.b  bflag,D1
  358.     beq     8$
  359.     move.b  stfflag,D1
  360.     bne     sayisfull
  361.     lea     obuf,A0
  362.     moveq   #8,D3
  363.  
  364.     move.w  #ByteSize,D1
  365.     and.w   D6,D1
  366.     beq     2$
  367.     subq.l  #1,A0
  368.     move.l  A0,-(SP)
  369.     move.b  D3,(A0)+
  370.     addq    #1,D3
  371.     move.b  #'.',(A0)+
  372.     cmp.w   #LongSize,D1
  373.     beq     3$
  374.     move.b  #'w',(A0)
  375.     cmp.w   #WordSize,D1
  376.     beq     1$
  377.     move.b  #'b',(A0)
  378. 1$      addq.l  #1,A0
  379.     cmp.b   #'0',(A0)
  380.     beq     3$
  381.     bra     5$
  382.  
  383. 2$      move.l  A0,-(SP)
  384.     move.b  #7,(A0)+
  385.     move.w  #SubCall,D1
  386.     and.w   D1,D6
  387.     beq     3$
  388.     move.b  #'R',(A0)+
  389.     bra     5$
  390. 3$      move.b  #'l',(A0)+
  391. 4$      cmp.b   #'0',(A0)
  392.     bne     5$
  393.     move.b  #'a',(A0)+
  394.     cmp.b   #'0',(A0)
  395.     bne     5$
  396.     move.b  #'b',(A0)
  397. 5$
  398.     move.l  endsym,A1
  399.     lea     endsymtab,A0
  400.     cmp.l   A0,A1
  401.     bhi     marksfull
  402.     beq     marksfull
  403.     move.l  D0,(A1)+
  404.     move.w  farea,D2
  405.     move.w  D2,(A1)+
  406.     clr.l   (A1)
  407.     move.l  A1,endsym
  408.     lea     sarea,A1
  409.     add.w   D2,A1
  410.     lea     endsarea,A0
  411.     cmp.l   A0,A1
  412.     bhi     marksfull
  413.     beq     marksfull
  414.     add.w   D3,D2
  415.     move.w  D2,farea
  416.  
  417.     move.l  (SP)+,A0
  418.     bra     7$
  419. 6$      move.b  (A0)+,(A1)+
  420. 7$      dbra    D3,6$
  421. 8$      rts
  422. 9$      addq.l  #4,SP
  423.     rts
  424. marksfull
  425.     addq.l  #4,SP
  426.     bra     marksyfull
  427.  
  428.  
  429. shlabel
  430.     move.l  A5,D0
  431.     bsr     pseudoaddress
  432.     move.l  D0,D2
  433.     sub.l   D7,D2
  434.     clr.l   D1
  435.     move.b  #'i',D3
  436.     lea     sarea,A1
  437.     lea     symtab,A0
  438.     bra     2$
  439. 1$      addq.l  #2,A0
  440. 2$      move.l  (A0)+,D0
  441.     beq     5$
  442.     cmp.l   D0,D2
  443.     beq     3$
  444.     bls     1$
  445.     cmp.l   D0,D1
  446.     bhi     1$
  447.     move.l  D0,D1
  448.     move.w  (A0)+,D0
  449.     cmp.b   #'*',1(A1,D0.W)
  450.     beq     2$
  451.     move.b  #'i',D3
  452.     cmp.b   #'.',1(A1,D0.W)
  453.     bne     2$
  454.     move.b  2(A1,D0.W),D3
  455.     bra     2$
  456.  
  457. 3$      moveq   #-1,D1
  458.     move.w  (A0)+,D0
  459.     cmp.b   #'*',1(A1,D0.W)
  460.     beq     4$
  461.     move.b  #'i',D3
  462.     cmp.b   #'.',1(A1,D0.W)
  463.     bne     4$
  464.     move.b  2(A1,D0.W),D3
  465.     cmp.b   #2,0(A1,D0.W)
  466.     beq     2$
  467. 4$      movem.l  D1-D3/A0/A1,-(SP)
  468.     lea     0(A1,D0.W),A0
  469.     cmp.b   #'R',1(A0)
  470.     bne     40$
  471.     move.l  A0,-(SP)
  472.     bsr     newline
  473.     move.l  (SP)+,A0
  474. 40$
  475.     bsr     substlocal
  476.     bsr     msg
  477.     bsr     newline
  478.     movem.l (SP)+,D1-D3/A0/A1
  479.     bra     2$
  480.  
  481. 5$      tst.l   D1
  482.     bmi     6$      * change this
  483.     beq     6$
  484.     cmp.b   #'l',D3
  485.     bne     6$
  486.     eor     D1,D2
  487.     and.b   #%11,D2
  488.     beq     6$
  489.     move.b  #'b',D3
  490. 6$      move.b  D3,itype
  491.     rts
  492.  
  493. substlocal
  494.     lea     lastlocal,A1
  495.     cmp.b   #'B',lastcmd
  496.     bne     30$
  497.     cmp.b   #7,(A0)
  498.     bne     30$
  499.     cmp.b   #'l',1(A0)
  500.     bne     30$
  501.     move.b  #'0',D0
  502.     cmp.b   #'z',(A1)
  503.     bne     1$
  504.     move.b  D0,(A1)
  505.     move.b  D0,1(A1)
  506.     move.b  D0,2(A1)
  507. 1$      add.b   #1,2(A1)
  508.     cmp.b   #'9',2(A1)
  509.     ble     2$
  510.     move.b  D0,2(A1)
  511.     add.b   #1,1(A1)
  512.     cmp.b   #'9',1(A1)
  513.     ble     2$
  514.     move.b  D0,1(A1)
  515.     add.b   #1,(A1)
  516.     cmp.b   #'9',(A1)
  517.     bgt     6$
  518. 2$      moveq   #4,D1
  519.     cmp.b   (A1)+,D0
  520.     bne     3$
  521.     subq    #1,D1
  522.     cmp.b   (A1)+,D0
  523.     bne     3$
  524.     subq    #1,D1
  525.     cmp.b   (A1)+,D0
  526. 3$      subq    #1,A1
  527.     move.l  A0,D0
  528.     move.b  D1,(A0)+
  529.     bra     5$
  530. 4$      move.b  (A1)+,(A0)+
  531. 5$      dbra    D1,4$
  532.     move.l  D0,A0
  533. 6$      rts
  534. 30$
  535.     move.b  #'z',(A1)
  536.     rts
  537.  
  538. lastlocal
  539.     dc.b    'zzz$'
  540.  
  541. shopdlabel
  542.     movem.l  D1-D3/A0/A1,-(SP)
  543.     bsr     pseudoaddress
  544.     bra     .shpdlbl
  545. shoplabel
  546.     movem.l  D1-D3/A0/A1,-(SP)
  547.     bsr     pseudoaddress
  548.     moveq   #0,D2
  549.     sub.l   D7,D0
  550.     tst.l   D1
  551.     bne     .shplbl
  552. .shpdlbl
  553.     moveq   #-1,D2
  554. .shplbl
  555.     lea     symtab,A0
  556. 1$      move.l  (A0)+,D1
  557.     beq     5$
  558.     cmp.l   D1,D0
  559.     bne     2$
  560.     move.w  (A0),D1
  561.     lea     sarea,A0
  562.     add.w   D1,A0
  563.     cmp.b   #'*',1(A0)
  564.     beq     5$
  565.     cmp.b   #2,(A0)
  566.     bne     10$
  567.     cmp.b   #'.',1(A0)
  568.     beq     5$
  569. 10$
  570.     bsr     msg
  571.     bra     7$
  572. 2$      addq.l  #2,A0
  573.     bra     1$
  574. 5$      tst.l   D2
  575.     beq     50$
  576.     tst.l   D0
  577.     beq     50$
  578.     move.l  D0,-(SP)
  579.     char    $
  580.     move.l  (SP)+,D0
  581. 50$
  582.     cmp.l   #$FFFFFF,D0
  583.     bhi     6$
  584.     movem.l  D0/D2,-(SP)
  585.     tst.l   D0
  586.     bne     51$
  587.     char    0
  588.     bra     52$
  589. 51$
  590.     bsr     show6x
  591. 52$
  592.     movem.l  (SP)+,D0/D2
  593.     tst.l   D2
  594.     bne     7$
  595.     tst.l   D0
  596.     beq     7$
  597.     bsr     buildsym
  598.     bra     7$
  599. 6$      bsr     show8x
  600. 7$      movem.l  (SP)+,D1-D3/A0/A1
  601.     rts
  602.  
  603. getaddress
  604.     bsr     getnum
  605.     bne     findsym
  606.     move.l  D2,D0
  607.     bne     1$
  608.     cmp.l   #1,D0
  609. 1$      rts
  610.  
  611. findsym
  612.     moveq   #0,D3
  613.     move.b  ilen,D3
  614.     subq.b  #2,D3
  615.     lea     ibuf,A0
  616.     move.b  D3,(A0)
  617.  
  618.     lea     symtab,A1
  619. 2$      move.l  (A1)+,D0
  620.     beq     30$
  621.     move.l  D3,D1
  622.     move.w  (A1)+,D2
  623.  
  624.     move.l  A0,-(SP)
  625.     move.l  A1,-(SP)
  626.     lea     sarea,A1
  627.     add.w   D2,A1
  628. 3$      cmp.b   (A1)+,(A0)+
  629.     dbne    D1,3$
  630.     beq     4$
  631.     move.l  (SP)+,A1
  632.     move.l  (SP)+,A0
  633.     bra     2$
  634. 4$      addq.l  #8,SP
  635. 30$
  636.     tst.l   D0
  637.     rts
  638.  
  639. aline
  640.     cmp.b   #'a',lastcmd
  641.     bne     .mreturn
  642.     bsr     showadr
  643.     moveq   #7,D0
  644.     bsr     column
  645.     move.w  #32,D3
  646.     move.b  D3,olen
  647.     lea     obuf,A0
  648.     subq.w  #1,D3
  649. 1$      move.b  (A5)+,D0
  650.     cmp.b   #' ',D0
  651.     blt     2$
  652.     cmp.b   #127,D0
  653.     blt     3$
  654. 2$      move.b  #'.',D0
  655. 3$      move.b  D0,(A0)+
  656.     dbra    D3,1$
  657.     print   olen
  658.     rts
  659.  
  660. dline
  661.     cmp.b   #'d',lastcmd
  662.     bne     .mreturn
  663.     bsr     wordalign
  664.     bsr     showadr
  665.     moveq   #7,D0
  666.     bsr     column
  667.  
  668.     bsr     1$
  669. 1$      bsr     2$
  670. 2$      move.l  (A5)+,D0
  671.     bsr     show8x
  672.     bra     prtspc
  673.  
  674. checkcwbreak
  675.     move.l  A5,D0
  676.     addq.l  #2,D0
  677.     bra     .ccbrk1
  678.  
  679. checkcbreak
  680.     move.l  A5,D0
  681. .ccbrk1
  682.     bsr     pseudoaddress
  683.     tst.l   D1
  684.     beq     2$
  685.     sub.l   D7,D0
  686.     lea     symtab,A0
  687. 1$      move.l  (A0)+,D1
  688.     beq     3$
  689.     addq.l  #2,A0
  690.     cmp.l   D0,D1
  691.     bne     1$
  692. 2$      tst.l   D0
  693. 3$      rts
  694.  
  695. iline
  696.     cmp.b   #'B',lastcmd
  697.     beq     101$
  698.     cmp.b   #'b',lastcmd
  699.     bne     100$
  700.     move.b  #1,bflag
  701.     bra     101$
  702. 100$
  703.     cmp.b   #'l',lastcmd
  704.     bne     .mreturn
  705. 101$
  706.     bsr     showadr
  707.  
  708.     moveq   #8,D0
  709.     move.b  tflag,D1
  710.     beq     102$
  711.     moveq   #3,D0
  712. 102$
  713.     bsr     column
  714.  
  715.     move.b  itype,D0
  716.     move.l  D0,-(SP)
  717.  
  718.     cmp.b   #'w',D0
  719.     beq     1$
  720.     cmp.b   #'l',D0
  721.     bne     107$
  722. * covering up references on next
  723. *  word boundary to be avoided
  724.     bsr     checkcwbreak
  725.     bne     105$
  726.     move.l  (SP),D0
  727.     bra     1$
  728. 105$
  729.     move.b  #'b',D0
  730.     move.l  D0,(SP)
  731. 107$
  732.     cmp.b   #'b',D0
  733.     beq     1$
  734.     cmp.b   #'c',D0
  735.     bne     103$
  736.     lea     dcbinst,A0
  737.     bra     104$
  738. 103$
  739.     cmp.b   #'a',D0
  740.     bne     5$
  741.     move.b  #'b',D0
  742. 1$      lea     dcinst,A0
  743.     move.b  D0,4(A0)
  744. 104$
  745.     bsr     msg
  746.     bra     6$
  747.  
  748. 5$      bsr     showi
  749.  
  750. 6$      moveq   #18,D0
  751.     move.b  tflag,D1
  752.     beq     50$
  753.     moveq   #13,D0
  754. 50$
  755.     bsr     column
  756.  
  757.     move.l  (SP)+,D0
  758.  
  759.     cmp.b   #'c',D0
  760.     bne     600$
  761.     moveq   #0,D0
  762. 501$
  763.     addq.l  #1,D0
  764.     addq.l  #1,A5
  765.     move.l  D0,-(SP)
  766.     pea     503$
  767.     pea     502$
  768.     bra     62$
  769. 502$
  770.     addq.l  #4,SP
  771.     move.l  (SP)+,D0
  772.     move.b  (A5),D1
  773.     cmp.b   -1(A5),D1
  774.     beq     501$
  775.     bra     504$
  776. 503$
  777.     move.l  (SP)+,D0
  778. 504$
  779.     bsr     show4x
  780.     comma
  781.     move.b  -1(A5),D0
  782.     bra     show2x
  783.  
  784. 600$
  785.     cmp.b   #'b',D0
  786.     bne     7$
  787.  
  788.     bra     61$
  789. 60$
  790.     comma
  791. 61$
  792.     move.b  (A5)+,D0
  793.     bsr     show2x
  794.     pea     60$
  795. 62$
  796.     move.b  printhead,D0
  797.     cmp.b   #40,D0
  798.     bhi     63$
  799.     bsr     checkcbreak
  800.     beq     64$
  801. 63$
  802.     addq.l  #4,SP
  803. 64$
  804.     rts
  805.  
  806.  
  807. 7$      cmp.b   #'a',D0
  808.     bne     8$
  809.     bra     74$
  810.  
  811. 70$
  812.     addq.l  #4,SP
  813.     move.b  #'''',D0
  814.     bsr     prtchr
  815. 71$
  816.     comma
  817. 72$
  818.     move.b  (A5)+,D0
  819.     bsr     show2x
  820.     pea     73$
  821.     bra     62$
  822. 73$
  823.     comma
  824. 74$
  825.     cmp.b   #' ',(A5)
  826.     bcs     72$
  827.     cmp.b   #126,(A5)
  828.     bhi     72$
  829.  
  830.     move.b  #'''',D0
  831.     bsr     prtchr
  832.     pea     77$
  833. 75$
  834.     move.b  (A5)+,D0
  835.     cmp.b   #'''',D0
  836.     bne     750$
  837.     bsr     prtchr
  838.     move.b  #'''',D0
  839. 750$
  840.     bsr     prtchr
  841.     pea     76$
  842.     bra     62$
  843. 76$
  844.     cmp.b   #' ',(A5)
  845.     bcs     70$
  846.     cmp.b   #126,(A5)
  847.     bhi     70$
  848.     bra     75$
  849. 77$
  850.     move.b  #'''',D0
  851.     bra     prtchr
  852.  
  853. 8$      bsr     wordalign
  854.  
  855.     cmp.b   #'w',D0
  856.     bne     9$
  857.  
  858.     bra     81$
  859. 80$
  860.     comma
  861. 81$
  862.     move.w  (A5)+,D0
  863.     bsr     show4x
  864.     pea     80$
  865.     bra     62$
  866.  
  867. 9$      cmp.b   #'l',D0
  868.     bne     showarg
  869.  
  870.     bra     91$
  871. 90$
  872.     comma
  873. 91$
  874.     move.l  (A5)+,D0
  875.     bsr     shopdlabel
  876.     pea     90$
  877.     bra     62$
  878.  
  879.  
  880. itype   dc.b    'i'
  881. dcinst  dc.b    4,'dc.w'
  882. dcbinst dc.b    5,'dcb.b'
  883.     cnop    0,2
  884.  
  885. * search table for instruction
  886. showi
  887.     bsr     wordalign
  888.  
  889.     move.w  (A5)+,D5    * get machine code
  890.     move.b  #$C0,D1     * extract size field for later
  891.     and.b   D5,D1
  892.     move.b  D1,isize
  893.     lea     mtab,A0
  894.     moveq   #8,D2       * to pass name (6) and arg type (2)
  895. 1$      move.w  D5,D1       * start search -- copy code to D1
  896.     and.w   (A0)+,D1    * use mask
  897.     cmp.w   (A0)+,D1    * desired op code?
  898.     adda    D2,A0       * point next entry
  899.     bne     1$          * if not, try next
  900.     move.w  -(A0),D6    * get arg type
  901.     lea     olen,A1     * ready copy name to obuf
  902.     moveq   #6,D2       * length of name
  903.     move.b  D2,(A1)+
  904.     adda    D2,A1       * after place for name in obuf
  905.     subq    #1,D2       * move 6 bytes
  906. 2$      move.b  -(A0),-(A1)     * move the name
  907.     dbra    D2,2$
  908. * here code in D5 and arg type in D6
  909. * now do condition code
  910.     move.l  A1,A0
  911.     addq.l  #1,A0
  912.     cmp.b   #'@',(A0)+
  913.     beq     20$
  914.     cmp.b   #'@',(A0)+
  915.     bne     21$
  916. 20$
  917.     subq.l  #1,A0
  918.     move.w  D5,D0
  919.     lsr.w   #7,D0
  920.     and.w   #%00011110,D0  * cond. code times 2
  921.     lea     condlets,A3
  922.     add.w   D0,A3
  923.     move.b  (A3)+,(A0)+
  924.     move.b  (A3),(A0)
  925. 21$
  926. * adjust size and mode for MOVEP
  927.     move.w  D5,D0
  928.     and.w   #%1111000100111000,D0
  929.     cmp.w   #%0000000100001000,D0
  930.     bne     22$
  931.     or.w    #%0000000000100000,D5   * mode is x(An)
  932.     or.b    #%10000000,isize
  933.     bra     23$     * so size like that of MOVEM
  934. 22$
  935. * adjust size for MOVEM
  936.     move.w  #FlagMovem,D0
  937.     and.w   D6,D0
  938.     beq     24$
  939. 23$
  940.     sub.b   #%1000000,isize
  941.     add.b   #1,olen
  942.     bra     3$
  943. 24$
  944.     move.w  #Size,D0
  945.     and.w   D6,D0
  946.     beq     ..shx
  947. 3$      cmp.b   #'.',(A1)+
  948.     bne     3$
  949.     move.b  isize,D0
  950.     move.b  #'l',(A1)
  951.     cmp.b   #LongSize,D0
  952.     beq     4$
  953.     move.b  #'w',(A1)
  954.     cmp.b   #WordSize,D0
  955.     beq     4$
  956.     move.b  #'b',(A1)
  957.     move.b  #ByteSize,D0
  958. 4$      or.b    D0,D6
  959. ..shx
  960.     print   olen
  961.     rts
  962.  
  963. * display operand(s) -- code in D5 and type in D6
  964. showarg
  965.     move.w  D5,D0   * check for no operand
  966.     and.w   #%1111111111111000,D0
  967.     cmp.w   #%0100111001110000,D0
  968.     bne     100$
  969.     rts
  970. 100$
  971.     lea     nameUSP,A0
  972.     move.w  D5,D0   * move to/from USP
  973.     and.w   #%1111111111110000,D0
  974.     cmp.w   #%0100111001100000,D0
  975.     bne     311$
  976.     move.w  D5,D0   * make mode An
  977.     and.w   #%1111111111000111,D5
  978.     move.w  #%0000000000001000,D1
  979.     or.w    D1,D5
  980.     and.w   D1,D0   * test dir.
  981.     bne     310$
  982. 300$
  983.     move.l  A0,-(SP)
  984.     bsr     101$
  985.     comma
  986.     move.l  (SP)+,A0
  987.     bra     msg
  988. 310$
  989.     bsr     msg
  990.     bra     105$
  991. 311$
  992.     cmp.w   #%0100111001000000,D0   * TRAP ?
  993.     bne     312$
  994.     char    #
  995.     move.w  D5,D0
  996.     and.w   #%00001111,D0
  997.     bra     show2x
  998. 312$
  999.     lea     nameSR,A0
  1000.     and.w   #%1111111111000000,D0
  1001.     cmp.w   #%0100000011000000,D0
  1002.     beq     310$
  1003.     cmp.w   #%0100011011000000,D0
  1004.     beq     300$
  1005.     lea     nameCCR,A0
  1006.     cmp.w   #%0100010011000000,D0
  1007.     beq     300$
  1008.  
  1009.     move.w  D6,D0   * second operand reg in 1st field?
  1010.     and.w   #ARegField2,D0
  1011.     beq     201$
  1012.     cmp.w   #RegField1,D0
  1013.     beq     201$
  1014.     bsr     101$    * do first operand
  1015.     comma
  1016.     move.w  D6,D1
  1017.     moveq   #001,D0 * assign An mode
  1018.     and.w   #ARegField2,D1
  1019.     cmp.w   #ARegField2,D1
  1020.     beq     200$
  1021.     moveq   #0,D0   * else is RegField2, so assign Dn mode
  1022. 200$
  1023.     bsr     ex11.10.9
  1024.     bra     showea
  1025. 201$
  1026.     move.w  D5,D0   * test for DBcc
  1027.     and.w   #%1111000011111000,D0
  1028.     cmp.w   #%0101000011001000,D0
  1029.     bne     202$
  1030.     and.w   #%0000000000000111,D5   * make it look like:
  1031.     or.w    #%0001010111000000,D5   *  MOVE EA=x(PC) EA=modeDn,reg
  1032. 202$
  1033.     move.w  D6,D0   * test for CMPM
  1034.     and.w   #FlagCmpm,D0
  1035.     beq     203$
  1036.     and.w   #%0000111000000111,D5   * make like MOVE.B with m. (An)+
  1037.     or.w    #%0001000011011000,D5
  1038. 203$
  1039.     move.w  D6,D0
  1040.     and.w   #PreDecr,D0
  1041.     beq     204$
  1042.     move.w  D5,D1
  1043.     and.w   #%0000111000000111,D5   * save reg's
  1044.     or.w    #%0001000000000000,D5   * fake MOVE.B
  1045.     and.w   #%0000000000001000,D1   * reg or mem?
  1046.     beq     204$
  1047.     or.w    #%0000000100100000,D5   * if mem, modes are -(An)
  1048. 204$
  1049.     move.w  D5,D0
  1050.     and.w   #%1100000000000000,D0
  1051.     bne     101$
  1052.     move.w  D5,D0
  1053.     and.w   #%0011000000000000,D0   * check for move with 2 EA's
  1054.     beq     101$
  1055.     bsr     101$    * got one -- do source
  1056.     comma
  1057. * move 1st EA to pos'n of 2nd
  1058.     bsr     ex11.10.9
  1059.     move.w  D5,D0
  1060.     and.w   #%0000000111000000,D0
  1061.     lsr.w   #3,D0
  1062.     and.w   #%1111000000000000,D5
  1063.     or.w    D1,D5
  1064.     or.w    D0,D5
  1065. 101$
  1066.     move.w  D5,D0   * test for bit static
  1067.     and.w   #%1111111100000000,D0
  1068.     cmp.w   #%0000100000000000,D0
  1069.     bne     111$
  1070.     char    #
  1071.     move.w  (A5)+,D1
  1072.     and.w   #%0000000000011111,D1
  1073.     bra     108$
  1074. 111$
  1075.     move.w  D6,D0
  1076.     and.w   #SmallImmed,D0
  1077.     beq     103$
  1078.     move.w  D5,D0   * test for shift inst. with Dn source
  1079.     and.w   #%1111000000100000,D0
  1080.     cmp.w   #%1110000000100000,D0
  1081.     bne     112$
  1082.     and.w   #%1111111111000111,D5   * zero bits for Dn mode
  1083.     bra     104$    * go extract Dn field
  1084. 112$
  1085.     cmp.w   #%1110000000000000,D0
  1086.     bne     102$
  1087.     and.w   #%1111111111000111,D5
  1088. 102$
  1089.     and.w   #%1111000000000000,D0
  1090.     cmp.w   #%0111000000000000,D0   * check for moveq
  1091.     bne     109$
  1092.     char    #
  1093.     clr.w   D0
  1094.     move.b  D5,D0
  1095.     bpl     110$
  1096.     move.l  D0,-(SP)
  1097.     char    -
  1098.     move.l  (SP)+,D0
  1099.     ext.w   D0
  1100.     neg.w   D0
  1101. 110$
  1102.     bra     show2x
  1103. 109$
  1104. * here is addq, subq, or shift inst. with 3 bit immed. data
  1105.     char    #
  1106.     bsr     ex11.10.9       * so extract the data
  1107.     tst.w   D1      * 0 represents 8
  1108.     bne     108$
  1109.     moveq   #8,D1
  1110. 108$
  1111.     move.w  D1,D0
  1112.     bsr     show2x
  1113.     bra     105$    * show comma and continue
  1114. 103$
  1115.     move.w  D6,D0
  1116.     and.w   #ARegField2,D0
  1117.     cmp.w   #RegField1,D0
  1118.     bne     106$
  1119. 104$
  1120.     clr.w   D0      * mode 0
  1121.     bsr     ex11.10.9
  1122.     bsr     showea
  1123. 105$
  1124.     comma
  1125. 106$
  1126.     move.w  D6,D0
  1127.     and.w   #Displ,D0
  1128.     beq     .sarg3
  1129. * here it's a branch
  1130.     move.w  D5,D0
  1131.     ext.w   D0      * test for displ in next word
  1132.     bne     .shoffs2
  1133. shoffs
  1134.     move.w  (A5)+,D0
  1135. .shoffs1
  1136.     ext.l   D0
  1137.     subq.l  #2,D0   * since added before pc advanced
  1138. .shoffs2
  1139.     ext.l   D0      * add displ to pc
  1140.     add.l   A5,D0
  1141.     bra     shoplabel
  1142. .sarg3
  1143.     move.w  D6,D0   * MOVEM ?
  1144.     and.w   #FlagMovem,D0
  1145.     beq     .sarg5
  1146.     move.w  D5,D0
  1147.     and.w   #%0000010000000000,D0
  1148.     beq     .sarg4
  1149.     move.w  (A5)+,D0    * mask is here, even if EA is 1st arg
  1150.     move.w  D0,-(SP)
  1151.     bsr     .sarg5
  1152.     comma
  1153.     move.w  (SP)+,D0
  1154.     bra     mmask1
  1155. .sarg4
  1156.     bsr     mmask
  1157.     comma
  1158. .sarg5
  1159.     move.w  D5,D0   * change mode for LINK & UNLK
  1160.     and.w   #%1111111111110000,D0
  1161.     cmp.w   #%0100111001010000,D0
  1162.     bne     .sarg6
  1163.     btst    #3,D5   * LINK?
  1164.     bne     1$
  1165.     bsr     1$
  1166.     comma
  1167.     char    #
  1168.     move.w  (A5)+,D0
  1169.     bra     shsigned4x
  1170. 1$      and.w   #%1111111111000111,D5
  1171.     or.w    #%0000000000001000,D5
  1172. .sarg6
  1173.     move.w  D6,D0
  1174.     and.w   #EffAdr,D0
  1175.     beq     .mreturn    * was '.shstub'
  1176. * here source is effective address
  1177.     move.w  D6,D0
  1178.     and.w   #Immed,D0
  1179.     beq     4$
  1180.     bsr     imsrce
  1181.     comma
  1182. 4$      move.w  D5,D0
  1183.     and.w   #%0111111,D0
  1184.     move.w  D0,D1   * save eff. adr
  1185.     cmp.w   #%0111010,D0
  1186.     beq     shoffs  * pc with displacement?
  1187. * + abs. short and long, immediate
  1188.     cmp.w   #%0111000,D0    * abs. short?
  1189.     bne     40$
  1190.     move.w  (A5)+,D0
  1191.     bra     show4x
  1192. 40$
  1193.     cmp.w   #%0111001,D0    * abs. long?
  1194.     bne     5$
  1195.     move.l  (A5)+,D0
  1196.     bra     shoplabel
  1197. 5$      cmp.w   #%0111100,D0    * immediate?
  1198.     beq     imsrce.d
  1199.     cmp.w   #%0111011,D0    * pc with index?
  1200.     beq     50$
  1201.     and.w   #%0111000,D0    * other mode 7 illegal
  1202.     cmp.w   #%0111000,D0
  1203.     beq     .shstub
  1204. 50$
  1205. * here mode not 7 unless pc with index
  1206.     move.w  D1,D0
  1207.     and.w   #%0000111,D1    * get reg bits
  1208.     and.w   #%0111000,D0    * get mode bits
  1209.     lsr.b   #3,D0
  1210. showea
  1211.     bsr     depmode
  1212.     lea     olen,A0
  1213.     move.b  D3,(A0)
  1214.     bra     msg
  1215.  
  1216. depmode
  1217.     clr.b   D3      * holds length
  1218.     lea     obuf,A0
  1219.     dbra    D0,6$
  1220. *Dn
  1221. 50$
  1222.     move.b  #'D',D0
  1223.     bsr     depbyte
  1224.     bra     depreg
  1225. 6$      dbra    D0,7$
  1226. *An
  1227. 60$
  1228.     cmp.b   #7,D1
  1229.     bne     61$
  1230.     move.b  #'S',D0
  1231.     bsr     depbyte
  1232.     move.b  #'P',D0
  1233.     bra     depbyte
  1234. 61$
  1235.     move.b  #'A',D0
  1236.     bsr     depbyte
  1237.     bra     depreg
  1238. 7$      dbra    D0,8$
  1239. *(An)
  1240. 70$
  1241.     move.b  #'(',D0
  1242.     bsr     depbyte
  1243.     bsr     60$
  1244.     move.b  #')',D0
  1245.     bra     depbyte
  1246. 8$      dbra    D0,9$
  1247. *(An)+
  1248.     bsr     70$
  1249.     move.b  #'+',D0
  1250.     bra     depbyte
  1251. 9$      dbra    D0,10$
  1252. *-(An)
  1253.     move.b  #'-',D0
  1254.     bsr     depbyte
  1255.     bra     70$
  1256. 10$
  1257.     dbra    D0,11$
  1258. *x(An)
  1259. *??
  1260.     move.w  (A5)+,D0
  1261.     bsr     shsigned4x
  1262.     bra     70$
  1263. 11$
  1264.     dbra    D0,12$
  1265. *x(An,D/An.)
  1266. *??
  1267.     move.w  (A5),D0
  1268.     ext.w   D0
  1269.     bsr     shsigned4x
  1270.     move.b  #'(',D0
  1271.     bsr     depbyte
  1272.     bsr     60$
  1273. *111$
  1274.     move.b  #',',D0
  1275.     bsr     depbyte
  1276. 111$
  1277.     move.w  (A5),D1 * get number of index reg
  1278.     moveq   #12,D0
  1279.     lsr.w   D0,D1
  1280.     and.w   #%0111,D1
  1281.     move.w  (A5),D0 * An or Dn?
  1282.     bmi     112$
  1283.     bsr     50$
  1284.     bra     113$
  1285. 112$
  1286.     bsr     60$
  1287. 113$
  1288.     move.b  #'.',D0
  1289.     bsr     depbyte
  1290.     move.b  #'w',D0
  1291.     move.w  (A5)+,D1
  1292.     btst    #11,D1  * .W or .L ?
  1293.     beq     114$
  1294.     move.b  #'l',D0
  1295. 114$
  1296.     bsr     depbyte
  1297.     move.b  #')',D0
  1298.     bra     depbyte
  1299. 12$
  1300.     move.w  (A5),D0
  1301.     ext.w   D0
  1302.     movem.l  D1/D3/A0,-(SP)
  1303.     bsr     .shoffs2
  1304.     movem.l  (SP)+,D1/D3/A0
  1305.     move.b  #'(',D0
  1306.     bsr     depbyte
  1307.     bra     111$
  1308.  
  1309.  
  1310. shsigned4x
  1311.     movem.l  D1/D3/A0,-(SP)
  1312.     tst.w   D0
  1313.     bpl     1$
  1314.     neg.w   D0
  1315.     move.w  D0,-(SP)
  1316.     char    -
  1317.     move.w  (SP)+,D0
  1318. 1$      bsr     show4x
  1319.     movem.l  (SP)+,D1/D3/A0
  1320.     rts
  1321.  
  1322. mmask
  1323.     move.w  (A5)+,D0 * get mask
  1324. mmask1
  1325. * if '-(An)', reverse bits
  1326.     move.w  D5,D1
  1327.     and.w   #%0000000000111000,D1
  1328.     cmp.w   #%0000000000100000,D1
  1329.     bne     20$
  1330.     move.w  #15,D3
  1331. 10$
  1332.     roxr.w  #1,D0
  1333.     roxl.w  #1,D1
  1334.     dbra    D3,10$
  1335.     move.w  D1,D0
  1336. 20$
  1337.     clr.b   D2      * last bit not set
  1338.     clr.l   D1      * start with bit 0
  1339.     clr.b   D3      * no bytes deposited yet
  1340.     lea     obuf,A0  * deposit bytes here
  1341.  
  1342. 1$      btst    D1,D0
  1343.     bne     2$
  1344.     clr.b   D2
  1345.     bra     4$
  1346. * have bit 1 -- should we just put in '-'?
  1347. 2$      addq.b  #1,D1   * glance next bit
  1348.     tst.b   D2      * last bit set?
  1349.     beq     3$
  1350.     cmp.b   #8,D1   * last D-register?
  1351.     beq     3$
  1352.     cmp.b   #9,D1   * first A-register?
  1353.     beq     3$
  1354.     cmp.b   #16,D1  * was last register?
  1355.     beq     3$
  1356.     btst    D1,D0   * end of range?
  1357.     beq     3$
  1358.     cmp.b   #'-',D2 * already have hyphen?
  1359.     beq     5$
  1360.     move.b  #'-',D2
  1361.     move.b  D2,(A0)+
  1362.     addq.b  #1,D3
  1363.     bra     5$
  1364. 3$      subq.b  #1,D1
  1365.     bsr     mdepreg
  1366.     st      D2
  1367. 4$      addq.b  #1,D1
  1368. 5$      cmp.b   #16,D1
  1369.     blt     1$
  1370.     lea     olen,A0
  1371.     move.b  D3,(A0)
  1372.     bra     msg
  1373.  
  1374. mdepreg
  1375.     movem.l  D0/D1,-(SP)
  1376.     tst.b   D3
  1377.     beq     1$
  1378.     cmp.b   #'-',D2
  1379.     beq     1$
  1380.     move.b  #'/',D0
  1381.     bsr     depbyte
  1382. 1$      move.b  #'D',D0
  1383.     cmp.b   #8,D1
  1384.     blt     2$
  1385.     move.b  #'A',D0
  1386. 2$      bsr     depbyte
  1387.     and.b   #%0111,D1
  1388.     bsr     depreg
  1389.     movem.l  (SP)+,D0/D1
  1390.     rts
  1391.  
  1392. depreg
  1393.     move.b  #'0',D0
  1394.     add.b   D1,D0
  1395. depbyte
  1396.     move.b  D0,(A0)+
  1397.     addq.b  #1,D3
  1398.     rts
  1399.  
  1400. ex11.10.9
  1401.     move.w  D5,D1
  1402.     and.w   #%0000111000000000,D1
  1403.     lsr.w   #4,D1
  1404.     lsr.w   #5,D1
  1405.     rts
  1406.  
  1407. .shstub
  1408.     print   _astub
  1409.     rts
  1410.  
  1411. _astub  dc.b    6,'oprand'
  1412. smodenames
  1413. nameSR  dc.b    2,'SR'
  1414. nameCCR dc.b    3,'CCR'
  1415. nameUSP dc.b    3,'USP'
  1416.     cnop    0,2
  1417.  
  1418. imsrce.d
  1419.     move.w  D6,D0
  1420.     and.w   #StatusMode,D0
  1421.     beq     imsrce
  1422.     lea     smodenames,A0
  1423.     move.w  D6,D0
  1424.     and.w   #ByteSize,D0
  1425.     cmp.w   #WordSize,D0
  1426.     bne     msg
  1427.     lea     3(A0),A0
  1428.     bra     msg
  1429. imsrce
  1430.     char    #
  1431.     move.w  D6,D0
  1432.     and.w   #ByteSize,D0
  1433.     cmp.w   #LongSize,D0
  1434.     bne     1$
  1435.  
  1436.     move.l  (A5),D0
  1437.     bsr     pseudoaddress   * no symbol if ref. outside file
  1438.     move.l  (A5)+,D0
  1439.     tst.l   D1
  1440.     bne     shopdlabel
  1441.     move.l  D0,-(SP)
  1442.     char    $
  1443.     move.l  (SP)+,D0
  1444.     bra     show8x
  1445.  
  1446. 1$      cmp.w   #WordSize,D0
  1447.     beq     2$
  1448.     move.w  (A5)+,D0
  1449.     bra     showbyte
  1450. 2$      move.w  (A5)+,D0
  1451.     bra     show4x
  1452.  
  1453. wordalign
  1454.     move.l  D0,-(SP)
  1455.     move.l  A5,D0
  1456.     bclr    #0,D0
  1457.     move.l  D0,A5
  1458.     move.l  (SP)+,D0
  1459.     rts
  1460.  
  1461.  
  1462. showadr
  1463.     move.l  A5,D0
  1464.     bsr     pseudoaddress
  1465.     tst.l   D1
  1466.     bne     2$
  1467.     move.w  #-1,linecount
  1468.     addq.l  #4,SP
  1469. 1$      rts
  1470. 2$      move.b  tflag,D1
  1471.     bne     1$
  1472.     sub.l   D7,D0
  1473.     bmi     show8x
  1474. show6x
  1475.     bsr     binhex
  1476.     lea     obuf,A0
  1477.     addq    #1,A0
  1478.     move.b  #6,(A0)
  1479.     bra     msg
  1480. showbyte
  1481.     cmp.b   #' ',D0
  1482.     blt     show2x
  1483.     cmp.b   #126,D0
  1484.     bhi     show2x
  1485.     move.l  D0,-(SP)
  1486.     cmp.b   #'''',D0
  1487.     bne     1$
  1488.     bsr     prtchr
  1489. 1$      move.b  #'''',D0
  1490.     bsr     prtchr
  1491.     move.l  (SP)+,D0
  1492.     bsr     prtchr
  1493.     move.b  #'''',D0
  1494.     bra     prtchr
  1495.  
  1496. show2x
  1497.     cmp.b   #9,D0
  1498.     bhi     1$
  1499.     add.b   #$30,D0
  1500.     bra     prtchr
  1501. 1$      bsr     binhex
  1502.     lea     obuf,A0
  1503.     addq    #5,A0
  1504.     move.b  #'$',(A0)
  1505.     subq.l  #1,A0
  1506.     move.b  #3,(A0)
  1507.     bra     msg
  1508. show4x
  1509.     cmp.w   #$FF,D0
  1510.     bls     show2x
  1511.     bsr     binhex
  1512.     lea     obuf,A0
  1513.     addq    #3,A0
  1514.     move.b  #'$',(A0)
  1515.     subq.l  #1,A0
  1516.     move.b  #5,(A0)
  1517.     bra     msg
  1518. show8x
  1519.     bsr     binhex
  1520.     lea     olen,A0
  1521.     bra     msg
  1522.  
  1523.  
  1524. * D0 to hex in obuf
  1525. binhex
  1526.     move.b  #8,olen
  1527.     lea     obuf,A0
  1528.     add.l   #8,A0
  1529.     lea     hextab,A1
  1530.     moveq   #7,D1
  1531. 1$      move.l  D0,D2
  1532.     and.l   #15,D2
  1533.     move.b  0(A1,D2),-(A0)
  1534.     lsr.l   #4,D0
  1535.     dbra    D1,1$
  1536.     rts
  1537.  
  1538. getsnum
  1539.     movem.l  D0/D1,-(SP)
  1540.     move.b  #'0',D1
  1541.     bra     .gtnm
  1542.  
  1543. * hex in ibuf to D2
  1544. getnum
  1545.     lea     ibuf,A0
  1546.     addq.l  #1,A0
  1547.     movem.l  D0/D1,-(SP)
  1548.     move.b  (A0)+,D1
  1549. .gtnm
  1550.     clr.l   D2
  1551.     clr.l   D0
  1552.     cmp.b   #'0',D1 * is it a decimal digit?
  1553.     bcs     9$
  1554.     cmp.b   #'9',D1
  1555.     bhi     9$
  1556.  
  1557.     lea     hextab,A1
  1558. 1$      moveq   #15,D3
  1559. 2$      cmp.b   0(A1,D3),D1
  1560.     dbeq    D3,2$
  1561.     bne     8$      * if not hex digit, done
  1562.     lsl.l   #4,D2
  1563.     add.l   D3,D2
  1564.     move.b  (A0)+,D1
  1565.     addq.b  #1,D0
  1566.     cmp.b   #'a',D1
  1567.     blt     1$
  1568.     sub.b   #32,D1
  1569.     bra     1$
  1570. 8$      move.b  D0,D3
  1571.     cmp.l   D2,D2   * signal ok
  1572. 9$      movem.l  (SP)+,D0/D1
  1573.     rts
  1574.  
  1575. hextab  dc.b    '0123456789ABCDEF'
  1576.  
  1577. symread
  1578.     moveq   #0,D0
  1579.     move.w  D0,farea
  1580.     move.b  D0,bufchcount
  1581.     move.l  D0,bufptr
  1582.     move.b  D0,stfflag
  1583.  
  1584.     move.w  #SymMax,-(SP)
  1585.     lea     symtab,A1
  1586. 1$      subq.w  #1,(SP)
  1587.     beq     10$
  1588.     move.l  A1,-(SP)
  1589.     bsr     readln
  1590.     move.l  (SP)+,A1
  1591.     tst.b   D3
  1592.     bne     2$
  1593. 10$
  1594.     addq    #2,SP
  1595.     move.l  A1,endsym
  1596.     clr.l   (A1)    * terminate table
  1597.     rts
  1598.  
  1599. 2$      movem.l  D3/A1,-(SP)
  1600.     bsr     getsnum     * leaves A0 at beginning of symbol
  1601.     move.b  D3,D0
  1602.     movem.l  (SP)+,D3/A1
  1603.     sub.b   D0,D3       * just scanned 9(?) bytes
  1604.     move.l  D2,(A1)+    * put number in table
  1605.     move.w  farea,D2
  1606.     move.w  D2,(A1)+
  1607.     move.l  A1,-(SP)
  1608.     lea     sarea,A1
  1609.     add.w   D2,A1
  1610.  
  1611.     move.b  D3,(A1)+    * length to table
  1612.     add.w   D3,D2
  1613.     addq.w  #1,D2
  1614.     move.w  D2,farea
  1615.  
  1616. * move the symbol
  1617.     subq    #1,D3
  1618. 3$      move.b  (A0)+,(A1)+
  1619.     dbra    D3,3$
  1620.     move.l  (SP)+,A1
  1621.     bra     1$
  1622.  
  1623.  
  1624.  
  1625. * return A0 pointing to line and D3 length of line
  1626. readln
  1627.     move.l  bufptr,A0
  1628.     move.l  A0,-(SP)
  1629.     moveq   #0,D3   * no chars in line yet
  1630. * back to here when was necessary to read more from file
  1631. .rdln.cont
  1632.     moveq   #0,D2
  1633.     move.b  bufchcount,D2
  1634.     bmi     5$      * this means file is exhausted
  1635.     beq     .rdln.more
  1636.  
  1637.     subq.b  #1,D2
  1638. 2$      cmp.b   #10,(A0)+
  1639.     beq     4$
  1640.     addq.b  #1,D3
  1641. 3$      dbra    D2,2$
  1642. * ran out of chars -- go get more
  1643.     bra     .rdln.more
  1644. * have one line -- check not empty
  1645. 4$      tst.b   D3
  1646.     bne     5$
  1647.     move.l  A0,(SP) * replace pointer to ret.
  1648.     bra     3$
  1649. 5$      move.l  A0,bufptr
  1650.     move.b  D2,bufchcount
  1651.     move.l  (SP)+,A0
  1652.     rts
  1653.  
  1654.  
  1655. .rdln.more
  1656. * have partial line in buffer with D3 chars in it
  1657.     move.l  (SP)+,A1    * beginning of partial line
  1658. * while D3>0 move chars back to beginning of buffer
  1659.     lea     ibuf,A0
  1660.     move.l  A0,-(SP)    * for ret.
  1661.     move.l  D3,-(SP)
  1662.     subq.b  #1,D3
  1663.     bmi     7$      * if line was of 0 length
  1664. 6$      move.b  (A1)+,(A0)+
  1665.     dbra    D3,6$
  1666.  
  1667. * if file is not yet open, A1 will be 0, since
  1668. *  that is initial value of bufptr
  1669. 7$      move.l  A1,D0
  1670.     bne     8$
  1671.  
  1672. * open the file
  1673.     bsr     seename
  1674.     move.l  #1005,D2
  1675.     call    Open
  1676.     tst.l   D0
  1677.     bne     71$
  1678.     bsr     .symerr
  1679.     addq.l  #8,SP   * ptr and char count were on stack
  1680.     moveq   #0,D3
  1681.     rts
  1682. 71$
  1683.     move.l  D0,symhandle
  1684.  
  1685. * fill remainder of buffer with 80-(D3) chars
  1686. 8$      move.l  #80,D3
  1687.     move.l  (SP)+,D0
  1688.     sub.b   D0,D3
  1689.     move.l  D0,-(SP)
  1690.  
  1691.     lea     ibuf,A1
  1692.     add.l   D0,A1
  1693. * save where to continue processing line
  1694.     move.l  A1,-(SP)
  1695.  
  1696.     move.l  symhandle,D1
  1697.     move.l  A1,D2
  1698.     call    Read
  1699.  
  1700.     tst.b   D0
  1701.     bne     9$
  1702.     move.l  symhandle,D1
  1703.     call    Close
  1704.     st      D0
  1705. 9$      move.b  D0,bufchcount
  1706.  
  1707.     move.l  (SP)+,A0    * continue processing here
  1708.     move.l  (SP)+,D3    * chars scanned so far
  1709.     bra     .rdln.cont
  1710.  
  1711.  
  1712. seename
  1713.     lea     ibuf,A0
  1714.     addq.l  #1,A0
  1715.     tst.b   (A0)
  1716.     bne     1$
  1717.     lea     symfilename,A0
  1718. 1$      move.l  A0,D1
  1719.     rts
  1720.  
  1721. symsave
  1722.     bsr     seename
  1723.     move.l  D1,-(SP)
  1724.     call    DeleteFile
  1725.     move.l  (SP)+,D1
  1726.     move.l  #1006,D2
  1727.     call    Open
  1728.     tst.l   D0
  1729.     beq     .symerr
  1730.  
  1731.     move.l  D0,D1   * keep handle in D1 throughout
  1732.     lea     symtab,A1
  1733. 1$      move.l  (A1)+,D0
  1734.     beq     .symclose
  1735.     movem.l  D1/A1,-(SP)
  1736.     bsr     binhex
  1737.     movem.l  (SP)+,D1/A1
  1738.  
  1739.     move.w  (A1)+,D2
  1740. *       lea     SymLen-4(A1),A0
  1741.     move.l  A1,-(SP)    * save pointer to next symtab entry
  1742.     lea     sarea,A1
  1743.     add.w   D2,A1
  1744.  
  1745.     lea     obuf,A0
  1746.     move.l  A0,-(SP)    * save for pass to WRITE
  1747.     lea     8(A0),A0
  1748.     move.b  #' ',(A0)+
  1749.     moveq   #0,D3
  1750.     move.b  (A1)+,D3    * length of symbol
  1751.     move.l  D3,D2       * count letters to move
  1752.     add.w   #10,D3      * chars to write
  1753.     subq    #1,D2
  1754. 2$      move.b  (A1)+,(A0)+
  1755.     dbra    D2,2$
  1756.     move.b  #10,(A0)
  1757.  
  1758.     move.l  (SP)+,D2    * obuf is buffer
  1759.     movem.l  D1/D3,-(SP)    * save handle & len
  1760.     call    Write
  1761.     movem.l  (SP)+,D1/D3
  1762.  
  1763.     move.l  (SP)+,A1
  1764.     cmp.l   D0,D3
  1765.     beq     1$      * loop if OK
  1766.     bsr     .symclose
  1767.     bra     .symerr
  1768. .symclose
  1769.     call    Close
  1770.     rts
  1771. .symerr
  1772.     call    IoErr
  1773.     jmp     show4x
  1774.  
  1775. funload
  1776.     move.l  fileseg,D1
  1777.     beq     1$
  1778.     call    UnLoadSeg
  1779.     moveq   #0,D0
  1780.     move.l  D0,fileseg
  1781.     move.l  D0,foreseg
  1782.     move.l  D0,segtable
  1783. 1$      rts
  1784.  
  1785. fload
  1786.     bsr     funload
  1787.     bsr     seename
  1788.     call    LoadSeg
  1789.     move.l  D0,fileseg
  1790.     beq     .linkseg
  1791.     move.b  #-1,pflag
  1792.     move.w  #SegMax,D3
  1793.     lea     segtable,A0
  1794.     move.l  D0,A1
  1795. 1$      add.l   A1,A1
  1796.     add.l   A1,A1
  1797.     move.l  A1,D1
  1798.     addq.l  #4,D1
  1799.     move.l  D1,(A0)+
  1800.     move.l  -4(A1),D1
  1801.     subq.l  #8,D1
  1802.     move.l  D1,(A0)+
  1803.     clr.l   (A0)
  1804.     subq.w  #1,D3
  1805.     beq     .linkseg
  1806.     move.l  (A1),A1
  1807.     move.l  A1,D1
  1808.     bne     1$
  1809. .linkseg
  1810.     tst.l   D0
  1811.     beq     2$
  1812.     lsl.l   #2,D0
  1813.     move.l  D0,A5
  1814.     move.l  (A5)+,D0
  1815.     move.l  D0,foreseg
  1816.     move.l  A5,D0
  1817. 2$      rts
  1818.  
  1819. firstfseg
  1820.     move.l  fileseg,D0
  1821.     bra     .linkseg
  1822.  
  1823. nextfseg
  1824.     move.l  foreseg,D0
  1825.     bra     .linkseg
  1826.  
  1827. pseudoaddress
  1828.     moveq   #-1,D1
  1829.     move.b  pflag,D1
  1830.     beq     2$
  1831.     lea     segtable,A0
  1832.     moveq   #0,D4
  1833. 1$      move.l  (A0)+,D1
  1834.     beq     2$
  1835.     move.l  (A0)+,D2
  1836.     add.l   D2,D4
  1837.     move.l  D0,D3
  1838.     sub.l   D1,D3
  1839.     bmi     1$
  1840.     cmp.l   D2,D3
  1841.     bge     1$
  1842.     sub.l   D2,D4
  1843.     add.l   D4,D3
  1844.     move.l  D3,D0
  1845. 2$      rts
  1846.  
  1847. realaddress
  1848.     move.b  pflag,D1
  1849.     beq     2$
  1850.     lea     segtable,A0
  1851.     moveq   #0,D4
  1852. 1$      move.l  (A0)+,D1
  1853.     beq     2$
  1854.     move.l  (A0)+,D2
  1855.     add.l   D2,D4
  1856.     move.l  D0,D3
  1857.     cmp.l   D4,D3
  1858.     bge     1$
  1859.     sub.l   D2,D4
  1860.     sub.l   D4,D3
  1861.     add.l   D3,D1
  1862.     move.l  D1,D0
  1863. 2$      rts
  1864.  
  1865. ksave
  1866.     lea     ibuf,A0
  1867.     addq.l  #1,A0
  1868.     tst.b   (A0)
  1869.     bne     1$
  1870.     rts
  1871. 1$      move.l  A0,D1
  1872.     move.l  D1,-(SP)
  1873.     call    DeleteFile
  1874.     move.l  (SP)+,D1
  1875.     move.l  #1006,D2
  1876.     call    Open
  1877.     move.l  D0,khandle
  1878.     tst.l   D0
  1879.     beq     .symerr
  1880.     rts
  1881.  
  1882. khandle     dc.l    0
  1883. fileseg     dc.l    0
  1884. foreseg     dc.l    0
  1885. symhandle       dc.l    0
  1886. bufptr      dc.l    0
  1887. bufchcount      dc.b    0
  1888. symfilename     dc.b    'symtab',0
  1889.     cnop    0,2
  1890.  
  1891. * string from console to obuf
  1892. getstr
  1893.     move.l  ihandle,D1
  1894.     lea     ibuf,A1
  1895.     move.l  A1,D2
  1896.     moveq   #80,D3
  1897.     move.l  A1,-(SP)
  1898.     call    Read
  1899.     move.l  (SP)+,A1
  1900.     move.b  #0,-1(A1,D0.W)
  1901.     move.b  D0,ilen
  1902.     move.b  D0,D3
  1903.     move.b  (A1),D0
  1904. leftprint
  1905.     move.b  #0,printhead
  1906.     rts
  1907.  
  1908. column
  1909.     move.b  D0,D3
  1910.     sub.b   printhead,D0
  1911.     beq     2$
  1912.     bpl     1$
  1913.     move.w  D3,-(SP)
  1914.     bsr     newline
  1915.     move.w  (SP)+,D0
  1916. 1$      move.b  D0,splen
  1917.     lea     splen,A0
  1918.     bra     msg
  1919. 2$      rts
  1920.  
  1921. newline
  1922.     sub.w   #1,linecount
  1923.     move.b  #10,D0
  1924.     bsr     prtchr
  1925.     bra     leftprint
  1926. prtspc
  1927.     move.b  #' ',D0
  1928. * char in D0 to console
  1929. prtchr
  1930.     move.b  D0,obuf
  1931.     move.l  ohandle,D1
  1932.     lea     obuf,A1
  1933.     move.l  A1,D2
  1934.     moveq   #1,D3
  1935.     bra     .msg1
  1936.  
  1937. *  message to console
  1938. msg
  1939.     move.l  ohandle,D1
  1940.     clr.l   D3
  1941.     move.b  (A0)+,D3
  1942.     move.l  A0,D2
  1943. .msg1
  1944.     add.b   D3,printhead
  1945.     movem.l  D2/D3,-(SP)
  1946.     call    Write
  1947.     movem.l  (SP)+,D2/D3
  1948.     move.l  khandle,D1
  1949.     beq     1$
  1950.     move.b  kflag,D0
  1951.     beq     1$
  1952.     call    Write
  1953. 1$      rts
  1954.  
  1955. * obtain pointer to AmigaDOS
  1956. ioinit
  1957.     move.l  SysBase,A6      * ready call to OpenLibrary
  1958.     lea     libname,A1
  1959.     moveq   #0,D0
  1960.     call    OpenLibrary
  1961.     move.l  D0,A6
  1962.     move.l  D0,DOS_point
  1963. * obtain file handles for output and input opened by CLI
  1964.     call    Output
  1965.     move.l  D0,ohandle
  1966.     call    Input
  1967.     move.l  D0,ihandle
  1968.     rts
  1969.     cnop  0,4
  1970.  
  1971.     section  three,bss
  1972.  
  1973. DOS_point       ds.l  1
  1974. ohandle     ds.l  1
  1975. ihandle     ds.l  1
  1976.  
  1977. olen        ds.b  1
  1978. obuf        ds.b  80
  1979. ilen        ds.b  1
  1980. ibuf        ds.b  IbufLen
  1981. * now on word boundary
  1982.  
  1983. segtable    ds.l SegMax*2
  1984.         ds.l  1
  1985. symtab      ds.b  SymMax*6
  1986. endsymtab       ds.b  6
  1987. sarea       ds.b  SymMax*7
  1988. endsarea    ds.b  30
  1989.  
  1990.     section two,data
  1991.  
  1992. kflag       dc.b    0
  1993. tflag       dc.b    0
  1994. pflag       dc.b    0
  1995. bflag       dc.b    0
  1996. stfflag     dc.b    0
  1997.  
  1998. splen       dc.b    0
  1999.         dcb.b   80,' '
  2000. printhead       dc.b    0
  2001. lastcmd     dc.b    'l'
  2002.     cnop  0,2
  2003. reqlines    dc      20
  2004. linecount       dc      -1
  2005. farea       dc      0
  2006. lastadr     dc.l    0
  2007. endsym      dc.l    symtab
  2008.  
  2009. libname     dc.b    'dos.library',0
  2010. hello       dc.b    26,'Disassemble (? for info).',10
  2011. fullmsg     dc.b    1$-*-1
  2012.         dc.b    10,'Symbol table is full',10
  2013. 1$
  2014. helpmsg     dc.b    1$-*-1
  2015.         dc.b    'l[addr]    list instructions',10
  2016.         dc.b    'd[addr]    dump in hex',10
  2017.         dc.b    'a[addr]    ascii dump',10
  2018.         dc.b    '/addr      address is this',10
  2019.         dc.b    '=<symbol>  add symbol to table',10
  2020.         dc.b    'r[<name>]  read file (symtab)',10
  2021.         dc.b    's[<name>]  save to file (symtab)',10
  2022.         dc.b    'q          quit',10
  2023. 1$
  2024. helpmsg2    dc.b    1$-*-1
  2025.         dc.b    'w<num>     where is this word?',10
  2026.         dc.b    'W<addr>    where is this longword?',10
  2027.         dc.b    'f<name>    file to disassemble',10
  2028.         dc.b    '>          next code segment',10
  2029.         dc.b    '<          first code segment',10
  2030.         dc.b    'o[num]     offset addresses',10
  2031. 1$
  2032. helpmsg3    dc.b    1$-*-1
  2033.         dc.b    'p          offset by segment toggle',10
  2034.         dc.b    'k<name>    keep output in file',10
  2035.         dc.b    't          trim toggle',10
  2036.         dc.b    'b[addr]    build symbols',10
  2037.         dc.b    'n<num>     print n lines after <CR>',10
  2038. 1$
  2039.  
  2040. isize       dc.b    0
  2041.  
  2042. condlets    dc.b    't rahilscccsneeqvcvsplmigeltgtle'
  2043.  
  2044. Size        equ     %0000000000000001
  2045. EffAdr      equ     %0000000000000010
  2046. Displ       equ     %0000000000000100
  2047. Immed       equ     %0000000000001000
  2048. RegField1       equ     %0000000000010000
  2049. RegField2       equ     %0000000000100000
  2050. ARegField2      equ     %0000000000110000
  2051. ByteSize    equ     %0000000011000000
  2052. WordSize    equ     %0000000001000000
  2053. LongSize    equ     %0000000010000000
  2054. SmallImmed      equ     %0000000100000000
  2055. FlagMovem       equ     %0000001000000000
  2056. FlagCmpm    equ     %0000010000000000
  2057. StatusMode      equ     %0000100000000000
  2058. PreDecr     equ     %0001000000000000
  2059. SubCall     equ     %0010000000000000
  2060.  
  2061.     cnop  0,2
  2062. mtab
  2063.     dc      %1111111100000000,%0000000000000000
  2064.     dc.b    'or.   '
  2065.     dc      EffAdr!Size!Immed!StatusMode
  2066.     dc      %1111000110111000,%0000000100001000
  2067.     dc.b    'movep.'
  2068.     dc      EffAdr!RegField2
  2069.     dc      %1111000110111000,%0000000110001000
  2070.     dc.b    'movep.'
  2071.     dc      EffAdr!RegField1
  2072.     dc      %1111000111000000,%0000000100000000
  2073.     dc.b    'btst  '
  2074.     dc      EffAdr!RegField1
  2075.     dc      %1111000111000000,%0000000101000000
  2076.     dc.b    'bchg  '
  2077.     dc      EffAdr!RegField1
  2078.     dc      %1111000111000000,%0000000110000000
  2079.     dc.b    'bclr  '
  2080.     dc      EffAdr!RegField1
  2081.     dc      %1111000111000000,%0000000111000000
  2082.     dc.b    'bset  '
  2083.     dc      EffAdr!RegField1
  2084.     dc      %1111111100000000,%0000001000000000
  2085.     dc.b    'and.  '
  2086.     dc      EffAdr!Size!Immed!StatusMode
  2087.     dc      %1111111100000000,%0000010000000000
  2088.     dc.b    'sub.  '
  2089.     dc      EffAdr!Size!Immed
  2090.     dc      %1111111100000000,%0000011000000000
  2091.     dc.b    'add.  '
  2092.     dc      EffAdr!Size!Immed
  2093.     dc      %1111111111000000,%0000100000000000
  2094.     dc.b    'btst  '
  2095.     dc      EffAdr
  2096.     dc      %1111111111000000,%0000100001000000
  2097.     dc.b    'bchg  '
  2098.     dc      EffAdr
  2099.     dc      %1111111111000000,%0000100010000000
  2100.     dc.b    'bclr  '
  2101.     dc      EffAdr
  2102.     dc      %1111111111000000,%0000100011000000
  2103.     dc.b    'bset  '
  2104.     dc      EffAdr
  2105.     dc      %1111111100000000,%0000101000000000
  2106.     dc.b    'eor.  '
  2107.     dc      EffAdr!Size!Immed!StatusMode
  2108.     dc      %1111111100000000,%0000110000000000
  2109.     dc.b    'cmp.  '
  2110.     dc      EffAdr!Size!Immed
  2111.     dc      %1111000000000000,%0001000000000000
  2112.     dc.b    'move.b'
  2113.     dc      EffAdr!ByteSize
  2114.     dc      %1111000000000000,%0010000000000000
  2115.     dc.b    'move.l'
  2116.     dc      EffAdr!LongSize
  2117.     dc      %1111000000000000,%0011000000000000
  2118.     dc.b    'move.w'
  2119.     dc      EffAdr!WordSize
  2120.     dc      %1111111111000000,%0100000011000000
  2121.     dc.b    'move  '    * from SR
  2122.     dc      EffAdr
  2123.     dc      %1111111100000000,%0100000000000000
  2124.     dc.b    'negx. '
  2125.     dc      EffAdr!Size
  2126.     dc      %1111000111000000,%0100000110000000
  2127.     dc.b    'chk   '
  2128.     dc      EffAdr!RegField2
  2129.     dc      %1111000111000000,%0100000111000000
  2130.     dc.b    'lea   '
  2131.     dc      EffAdr!ARegField2
  2132.     dc      %1111111100000000,%0100001000000000
  2133.     dc.b    'clr.  '
  2134.     dc      EffAdr!Size
  2135.     dc      %1111111111000000,%0100010011000000
  2136.     dc.b    'move  '    * to CCR
  2137.     dc      EffAdr
  2138.     dc      %1111111100000000,%0100010000000000
  2139.     dc.b    'neg.  '
  2140.     dc      EffAdr!Size
  2141.     dc      %1111111111000000,%0100011011000000
  2142.     dc.b    'move  '    * to SR
  2143.     dc      EffAdr
  2144.     dc      %1111111100000000,%0100011000000000
  2145.     dc.b    'not.  '
  2146.     dc      EffAdr!Size
  2147.     dc      %1111111111000000,%0100100000000000
  2148.     dc.b    'nbcd  '
  2149.     dc      EffAdr
  2150.     dc      %1111111111111000,%0100100001000000
  2151.     dc.b    'swap  '
  2152.     dc      EffAdr
  2153.     dc      %1111111111111000,%0100100010000000
  2154.     dc.b    'ext.w '
  2155.     dc      EffAdr!WordSize
  2156.     dc      %1111111111111000,%0100100011000000
  2157.     dc.b    'ext.l '
  2158.     dc      EffAdr!LongSize
  2159.     dc      %1111111111000000,%0100100001000000
  2160.     dc.b    'pea   '
  2161.     dc      EffAdr
  2162.     dc      %1111111110000000,%0100100010000000
  2163.     dc.b    'movem.' ;has size!
  2164.     dc      EffAdr!FlagMovem
  2165.     dc      %1111111100000000,%0100101000000000
  2166.     dc.b    'tst.  '
  2167.     dc      EffAdr!Size
  2168.     dc      %1111111111000000,%0100101011000000
  2169.     dc.b    'tas   '
  2170.     dc      EffAdr
  2171.     dc      %1111111111111111,%0100101011111100
  2172.     dc.b    'illegl'
  2173.     dc      0
  2174.     dc      %1111111110000000,%0100110010000000
  2175.     dc.b    'movem.'
  2176.     dc      EffAdr!FlagMovem
  2177.     dc      %1111111111110000,%0100111001000000
  2178.     dc.b    'trap  '
  2179.     dc      0
  2180.     dc      %1111111111111000,%0100111001010000
  2181.     dc.b    'link  '
  2182.     dc      EffAdr
  2183.     dc      %1111111111111000,%0100111001011000
  2184.     dc.b    'unlk  '
  2185.     dc      EffAdr
  2186. *MOVE to USP
  2187. *MOVE from USP
  2188.     dc      %1111111111110000,%0100111001100000
  2189.     dc.b    'move  '    *  USP
  2190.     dc      EffAdr
  2191.     dc      %1111111111111111,%0100111001110000
  2192.     dc.b    'reset '
  2193.     dc      0
  2194.     dc      %1111111111111111,%0100111001110001
  2195.     dc.b    'nop   '
  2196.     dc      0
  2197.     dc      %1111111111111111,%0100111001110010
  2198.     dc.b    'stop  '
  2199.     dc      0
  2200.     dc      %1111111111111111,%0100111001110011
  2201.     dc.b    'rte   '
  2202.     dc      0
  2203. *RTD
  2204.     dc      %1111111111111111,%0100111001110101
  2205.     dc.b    'rts   '
  2206.     dc      0
  2207.     dc      %1111111111111111,%0100111001110110
  2208.     dc.b    'trapv '
  2209.     dc      0
  2210.     dc      %1111111111111111,%0100111001110111
  2211.     dc.b    'rtr   '
  2212.     dc      0
  2213. *MOVEC
  2214.     dc      %1111111111000000,%0100111010000000
  2215.     dc.b    'jsr   '
  2216.     dc      EffAdr!SubCall
  2217.     dc      %1111111111000000,%0100111011000000
  2218.     dc.b    'jmp   '
  2219.     dc      EffAdr
  2220.     dc      %1111000011111000,%0101000011001000
  2221.     dc.b    'db@@  '
  2222.     dc      EffAdr * lie required by showarg
  2223.     dc      %1111111111000000,%0101000111000000
  2224.     dc.b    'sf    '
  2225.     dc      EffAdr
  2226.     dc      %1111000011000000,%0101000011000000
  2227.     dc.b    's@@   '
  2228.     dc      EffAdr
  2229.     dc      %1111000100000000,%0101000000000000
  2230.     dc.b    'addq. '
  2231.     dc      EffAdr!Size!SmallImmed
  2232.     dc      %1111000100000000,%0101000100000000
  2233.     dc.b    'subq. '
  2234.     dc      EffAdr!Size!SmallImmed
  2235.     dc      %1111111100000000,%0110000100000000
  2236.     dc.b    'bsr   '
  2237.     dc      Displ!SubCall
  2238.     dc      %1111111100000000,%0110000000000000
  2239.     dc.b    'bra   '
  2240.     dc      Displ
  2241.     dc      %1111000000000000,%0110000000000000
  2242.     dc.b    'b@@   '
  2243.     dc      Displ
  2244.     dc      %1111000100000000,%0111000000000000
  2245.     dc.b    'moveq '
  2246.     dc      RegField2!SmallImmed
  2247.     dc      %1111000111000000,%1000000011000000
  2248.     dc.b    'divu  '
  2249.     dc      EffAdr!RegField2
  2250.     dc      %1111000111110000,%1000000100000000
  2251.     dc.b    'sbcd  '
  2252.     dc      EffAdr!PreDecr
  2253.     dc      %1111000111000000,%1000000111000000
  2254.     dc.b    'divs  '
  2255.     dc      EffAdr!RegField2
  2256.     dc      %1111000100000000,%1000000000000000
  2257.     dc.b    'or.   '
  2258.     dc      EffAdr!Size!RegField2
  2259.     dc      %1111000100000000,%1000000100000000
  2260.     dc.b    'or.   '
  2261.     dc      EffAdr!Size!RegField1
  2262.     dc      %1111000111000000,%1001000011000000
  2263.     dc.b    'sub.w '
  2264.     dc      EffAdr!WordSize!ARegField2
  2265.     dc      %1111000111000000,%1001000111000000
  2266.     dc.b    'sub.l '
  2267.     dc      EffAdr!LongSize!ARegField2
  2268.     dc      %1111000100110000,%1001000100000000
  2269.     dc.b    'subx. '
  2270.     dc      EffAdr!Size!PreDecr
  2271.     dc      %1111000100000000,%1001000000000000
  2272.     dc.b    'sub.  '
  2273.     dc      EffAdr!Size!RegField2
  2274.     dc      %1111000100000000,%1001000100000000
  2275.     dc.b    'sub.  '
  2276.     dc      EffAdr!Size!RegField1
  2277.     dc      %1111000111000000,%1011000011000000
  2278.     dc.b    'cmp.w '
  2279.     dc      EffAdr!WordSize!ARegField2
  2280.     dc      %1111000111000000,%1011000111000000
  2281.     dc.b    'cmp.l '
  2282.     dc      EffAdr!LongSize!ARegField2
  2283.     dc      %1111000100000000,%1011000000000000
  2284.     dc.b    'cmp.  '
  2285.     dc      EffAdr!Size!RegField2
  2286.     dc      %1111000100111000,%1011000100001000
  2287.     dc.b    'cmpm. '
  2288.     dc      EffAdr!Size!FlagCmpm
  2289.     dc      %1111000100000000,%1011000100000000
  2290.     dc.b    'eor.  '
  2291.     dc      EffAdr!Size!RegField1
  2292.     dc      %1111000111110000,%1100000100000000
  2293.     dc.b    'abcd  '
  2294.     dc      EffAdr!PreDecr
  2295.     dc      %1111000111000000,%1100000011000000
  2296.     dc.b    'mulu  '
  2297.     dc      EffAdr!RegField2
  2298.     dc      %1111000111111000,%1100000101000000
  2299.     dc.b    'exg   '
  2300.     dc      EffAdr!RegField2
  2301.     dc      %1111000111111000,%1100000101001000
  2302.     dc.b    'exg   '
  2303.     dc      EffAdr!ARegField2
  2304.     dc      %1111000111111000,%1100000110001000
  2305.     dc.b    'exg   '
  2306.     dc      EffAdr!RegField2
  2307.     dc      %1111000111000000,%1100000111000000
  2308.     dc.b    'muls  '
  2309.     dc      EffAdr!RegField2
  2310.     dc      %1111000100000000,%1100000000000000
  2311.     dc.b    'and.  '
  2312.     dc      EffAdr!Size!RegField2
  2313.     dc      %1111000100000000,%1100000100000000
  2314.     dc.b    'and.  '
  2315.     dc      EffAdr!Size!RegField1
  2316.     dc      %1111000111000000,%1101000011000000
  2317.     dc.b    'add.w '
  2318.     dc      EffAdr!WordSize!ARegField2
  2319.     dc      %1111000111000000,%1101000111000000
  2320.     dc.b    'add.l '
  2321.     dc      EffAdr!LongSize!ARegField2
  2322.     dc      %1111000100110000,%1101000100000000
  2323.     dc.b    'addx. '
  2324.     dc      EffAdr!Size!PreDecr
  2325.     dc      %1111000100000000,%1101000000000000
  2326.     dc.b    'add.  '
  2327.     dc      EffAdr!Size!RegField2
  2328.     dc      %1111000100000000,%1101000100000000
  2329.     dc.b    'add.  '
  2330.     dc      EffAdr!Size!RegField1
  2331.  
  2332.     dc      %1111111111000000,%1110000011000000
  2333.     dc.b    'asr   '
  2334.     dc      EffAdr
  2335.     dc      %1111111111000000,%1110000111000000
  2336.     dc.b    'asl   '
  2337.     dc      EffAdr
  2338.     dc      %1111111111000000,%1110001011000000
  2339.     dc.b    'lsr   '
  2340.     dc      EffAdr
  2341.     dc      %1111111111000000,%1110001111000000
  2342.     dc.b    'lsl   '
  2343.     dc      EffAdr
  2344.     dc      %1111111111000000,%1110010011000000
  2345.     dc.b    'roxr  '
  2346.     dc      EffAdr
  2347.     dc      %1111111111000000,%1110010111000000
  2348.     dc.b    'roxl  '
  2349.     dc      EffAdr
  2350.     dc      %1111111111000000,%1110011011000000
  2351.     dc.b    'ror   '
  2352.     dc      EffAdr
  2353.     dc      %1111111111000000,%1110011111000000
  2354.     dc.b    'rol   '
  2355.     dc      EffAdr
  2356.  
  2357.     dc      %1111000100011000,%1110000000000000
  2358.     dc.b    'asr.  '
  2359.     dc      EffAdr!Size!SmallImmed
  2360.     dc      %1111000100011000,%1110000100000000
  2361.     dc.b    'asl.  '
  2362.     dc      EffAdr!Size!SmallImmed
  2363.     dc      %1111000100011000,%1110000000001000
  2364.     dc.b    'lsr.  '
  2365.     dc      EffAdr!Size!SmallImmed
  2366.     dc      %1111000100011000,%1110000100001000
  2367.     dc.b    'lsl.  '
  2368.     dc      EffAdr!Size!SmallImmed
  2369.     dc      %1111000100011000,%1110000000010000
  2370.     dc.b    'roxr. '
  2371.     dc      EffAdr!Size!SmallImmed
  2372.     dc      %1111000100011000,%1110000100010000
  2373.     dc.b    'roxl. '
  2374.     dc      EffAdr!Size!SmallImmed
  2375.     dc      %1111000100011000,%1110000000011000
  2376.     dc.b    'ror.  '
  2377.     dc      EffAdr!Size!SmallImmed
  2378.     dc      %1111000100011000,%1110000100011000
  2379.     dc.b    'rol.  '
  2380.     dc      EffAdr!Size!SmallImmed
  2381.  
  2382.     dc      0,0
  2383.     dc.b    '????  '
  2384.     dc      0
  2385.  
  2386.     end
  2387.  
  2388.