home *** CD-ROM | disk | FTP | other *** search
/ Frozen Fish 1: Amiga / FrozenFish-Apr94.iso / bbs / alib / d1xx / d160 / dis.lha / Dis / dis.asm < prev    next >
Assembly Source File  |  1988-10-02  |  59KB  |  2,474 lines

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