home *** CD-ROM | disk | FTP | other *** search
/ Magazyn Exec 5 / CD_Magazyn_EXEC_nr_5.iso / Programy / Programowanie / AmigaE / 2b_CrtvE_src.lha / assembler.s < prev    next >
Encoding:
Text File  |  2001-01-29  |  73.2 KB  |  3,994 lines

  1. ;; Assembler part
  2.  
  3. ; ''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' ;
  4. ;   The ASSEMBLER part !!!!!!!              ;
  5. ; ,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, ;
  6. ;; Parse
  7. ASM_PARSE:
  8.     MOVE.L  #ASM_KWORDS,D2
  9.     MOVE.L  A2,D0
  10.     MOVE.L  (A2),D1
  11.     AND.L   #$FFFFFF00,D1
  12.     CMP.L   #'PC'*$10000,D1
  13.     BEQ ASM_PC
  14.  
  15. ;; Check for keywords
  16.     MOVE.L  HASHVAL(PC),D7
  17.     LSL.L   #2,D7
  18.     ADD.L   #AKWHASH,D7
  19.     MOVE.L  D7,A6
  20. .LOOPZ:
  21.     MOVE.L  (A6),A6
  22.     MOVE.L  A6,D6
  23.     BEQ     .SKIP_GO1
  24.     MOVE.L  (A6)+,A4
  25.     MOVE.L  D0,A2
  26. .3Z:CMPM.B  (A4)+,(A2)+
  27.     BNE     .LOOPZ
  28.     TST.B   -1(A2)
  29.     BNE     .3Z
  30.     SUB.L   D2,D6
  31.     LSR.L   #3,D6
  32.     MOVEQ   #47,D4
  33.     MOVE.W  D4,(A1)+
  34.     MOVE.W  D6,(A1)+
  35.     MOVEQ   #-1,D0
  36.     RTS
  37. ;*-*
  38. ;; Check for commands
  39. .SKIP_GO1:
  40.     TST.W   GENERATE_PPC
  41.     BNE     .2
  42. .2BACK:
  43.     MOVE.L  #ASM_INSTAB,D2
  44.     MOVE.L  HASHVAL(PC),D7
  45.     LSL.L   #2,D7
  46.     ADD.L   #ASMHASH,D7
  47.     MOVE.L  D7,A6
  48. .LOOP:
  49.     MOVE.L  (A6),A6         ; A6 _NOW_ POINTS TO ENTRY IN INSTABLE
  50.     MOVE.L  A6,D6
  51.     BNE     .33
  52.     TST.W   GENERATE_PPC
  53.     BNE     .FAIL
  54.     BRA     .2
  55. .33:
  56.     MOVE.L  (A6)+,A4
  57.     MOVE.L  D0,A2
  58. .3: CMPM.B  (A4)+,(A2)+
  59.     BNE.S   .LOOP
  60.     TST.B   -1(A2)
  61.     BNE.S   .3
  62.     SUB.L   D2,D6
  63.     LSR.L   #3,D6
  64.     MOVE.L  D6,D0           ; D0=1..112
  65.     ADD.L   #$100,D0
  66. ;*-*
  67. ;; Check for sizes
  68.     TST.W   GENERATE_PPC
  69.     BNE     iERROR98
  70.     MOVEQ   #0,D1
  71.     CMP.B   #'.',(A0)       ; SEE IF THERE'S A:     .B .W .L .S
  72.     BNE.S   .4
  73.     ADDQ.L  #1,A0
  74.     MOVE.B  (A0)+,D2
  75.     LEA     .SIZES(PC),A6
  76.     MOVEQ   #7,D4
  77. .CHKSIZE:
  78.     ADDQ.L  #1,D1
  79.     CMP.B   (A6)+,D2
  80.     BEQ     .4
  81.     DBF     D4,.CHKSIZE
  82.     BRA     iERROR31
  83. .4: MOVE.W  D0,D4
  84.     MOVE.W  D0,(A1)+
  85.     MOVE.W  D1,(A1)+
  86.     RTS
  87. .SIZES:
  88.     DC.B    "BWLSXPDQ",0,0
  89. ;*-*
  90. ;; Check for ppc commands
  91. .2:
  92.     MOVE.L  #PPC_INSTAB,D2
  93.     MOVE.L  HASHVAL(PC),D7
  94.     LSL.L   #2,D7
  95.     ADD.L   #PPCHASH,D7
  96.     MOVE.L  D7,A6
  97. .PLOOP:
  98.     MOVE.L  (A6),A6         ; A6 _NOW_ POINTS TO ENTRY IN INSTABLE
  99.     MOVE.L  A6,D6
  100.     BNE     .P2
  101.     TST.W   GENERATE_PPC
  102.     BEQ     .FAIL
  103.     BRA     .2BACK
  104. .P2:
  105.     MOVE.L  (A6)+,A4
  106.     MOVE.L  D0,A2
  107. .P3:CMPM.B  (A4)+,(A2)+
  108.     BNE.S   .PLOOP
  109.     TST.B   -1(A2)
  110.     BNE.S   .P3
  111.     SUB.L   D2,D6
  112.     LSR.L   #3,D6
  113.     MOVE.L  D6,D0
  114.     MOVEQ   #48,D4
  115.     MOVE.W  D4,(A1)+
  116.     MOVE.L  D0,(A1)+
  117.     CMP.B   #".",(A0)
  118.     SEQ     D0
  119.     EXT.W   D0
  120.     MOVE.W  D0,(A1)+
  121.     neg.w   d0
  122.     add.w   d0,a0
  123.     TST.W   GENERATE_PPC
  124.     BEQ iERROR99
  125.     MOVEQ   #-1,D0
  126.     RTS
  127. ;*-*
  128. ;; Fail
  129. .FAIL:
  130.     MOVE.L  WORK(PC),A2
  131.     MOVEQ   #0,D0           ; 0=FAIL, ELSE=ISASM
  132.     RTS
  133. ;*-*
  134. ;*-*
  135. ;; PC
  136. ASM_PC:
  137.     CMP.W   #17,D4
  138.     BNE .2
  139.     CMP.B   #')',(A0)
  140.     BEQ.S   .1
  141. .2:
  142.     MOVE.W  #$E00,D4
  143.     MOVE.W  D4,(A1)+
  144.     MOVEQ   #-1,D0
  145.     RTS
  146. .1: CMP.W   #17,D4          ;-(A1)
  147.     BNE iERROR19
  148.     SUBQ.L  #2,A1
  149.     ADDQ.L  #1,A0
  150.     SUBQ.W  #1,PARSEBRACKET
  151.     MOVE.W  #$D00,D4
  152.     MOVE.W  D4,(A1)+
  153.     MOVEQ   #-1,D0
  154.     RTS
  155. ;*-*
  156. ;; IMM
  157. ASM_PARSEIMM:
  158.     BTST    #7,CODEPREFS+1
  159.     BEQ.S   .1
  160.     MOVE.L  STARTINTERIM(PC),A6
  161.     SUBQ.L  #2,A6
  162.     CMPA.L  A6,A1
  163.     BEQ PREP
  164. .1: MOVE.W  #$F00,D4
  165.     MOVE.W  D4,(A1)+        ; 11+4
  166.     BRA PARSELOOP
  167. ;*-*
  168. ;; ParseReg
  169. ASM_PARSEREG:
  170.     CMP.B   #0,2(A2)
  171.     BNE REGBACK
  172.     MOVE.B  (A2),D1         ; D1="A" OR "D"
  173.     CMP.B   #'D',D1
  174.     BEQ.S   .1
  175.     CMP.B   #'A',D1
  176.     BNE REGBACK
  177. .1: MOVEQ   #0,D0
  178.     MOVE.B  1(A2),D0        ; D0="0" .. "9"
  179.     SUB.W   #48,D0
  180.     MOVE.L  D0,D7           ; =>COPY
  181.     CMP.W   #8,D0
  182.     BPL iERROR19
  183.     CMP.B   #'A',D1
  184.     BEQ .2
  185.     MOVEQ   #0,D3           ; D3=ADR.MOD NR.
  186.     BRA.S   .EXIT           ; --> Dx
  187. .2: CMP.W   #17,D4          ;-2(A1)
  188.     BEQ.S   .3
  189. .6: BSET    #3,D0           ; --> Ax
  190.     MOVEQ   #1,D3
  191.     BRA.S   .EXIT
  192. .3: CMP.B   #')',(A0)
  193.     BNE.S   .6
  194.     SUBQ.L  #2,A1
  195.     ADDQ.L  #1,A0
  196.     SUBQ.W  #1,PARSEBRACKET
  197.     CMP.W   #8,-2(A1)
  198.     BEQ.S   .4
  199. .7: CMP.B   #'+',(A0)
  200.     BEQ.S   .5
  201.     BSET    #4,D0           ; --> (Ax)
  202.     MOVEQ   #2,D3
  203.     BRA.S   .EXIT
  204. .4: CMP.L   #$10000,-6(A1)
  205.     BEQ.S   .7
  206.     SUBQ.L  #2,A1           ; --> -(Ax)
  207.     MOVEQ   #4,D3
  208.     BSET    #5,D0
  209.     BRA.S   .EXIT
  210. .5: ADDQ.L  #1,A0           ; --> (Ax)+
  211.     MOVEQ   #3,D3
  212.     ADD.W   #%11000,D0
  213.     BRA .EXIT
  214.  
  215. .EXIT:  ASL.W   #8,D3
  216.     ADD.W   #$400,D3
  217.     CMP.W   #4,D7
  218.     BEQ.S   .8
  219.     CMP.W   #5,D7
  220.     BEQ.S   .8
  221. .9: ADD.W   D3,D0
  222.     MOVE.W  D0,D4
  223.     MOVE.W  D0,(A1)+
  224.     MOVE.L  WORK(PC),A2
  225.     BRA PARSELOOP
  226. .8: CMP.W   #$400,D3
  227.     BEQ.S   .9
  228.     BSET    #0,WARNINGS+3       ; ISSUE A4/A5 USED WARNING
  229.     BRA.S   .9
  230. ;*-*
  231.  
  232. ;; Hash
  233. MAKEASMHASH:
  234.     MOVE.L  #ASMHASH,A0     ; A0=TABEL
  235.     LEA ASM_INSTAB,A1
  236.     MOVE.L  A0,A2
  237.     MOVE.L  #255,D0
  238. .CL:
  239.     CLR.L   (A2)+           ; CLEAR TABLE
  240.     DBRA    D0,.CL
  241. .LOOP:
  242.     MOVE.L  (A1),D0
  243.     BEQ.S   EX_KWORDS
  244.     MOVE.L  D0,A2
  245.     HASH    A2,D0,D1
  246.     LSL.L   #2,D0
  247.     LEA 0(A0,D0.L),A2
  248.     MOVE.L  (A2),D0         ; READ PREVIOUS LIST (OR NIL)
  249.     MOVE.L  A1,(A2)         ; PUT ENTRY IN LIST
  250.     MOVE.L  D0,4(A1)        ; AND LINK TAIL TO IT
  251.     ADDQ.L  #8,A1
  252.     BRA.S   .LOOP
  253. EX_KWORDS:
  254.     MOVE.L  #AKWHASH,A0     ; A0=TABEL
  255.     LEA     ASM_KWORDS,A1
  256.     MOVE.L  A0,A2
  257.     MOVE.L  #255,D0
  258. .CLX:
  259.     CLR.L   (A2)+           ; CLEAR TABLE
  260.     DBRA    D0,.CLX
  261. .LOOPX:
  262.     MOVE.L  (A1),D0
  263.     BEQ.S   PPCASMHASH
  264.     MOVE.L  D0,A2
  265.     HASH    A2,D0,D1
  266.     LSL.L   #2,D0
  267.     LEA     0(A0,D0.L),A2
  268.     MOVE.L  (A2),D0         ; READ PREVIOUS LIST (OR NIL)
  269.     MOVE.L  A1,(A2)         ; PUT ENTRY IN LIST
  270.     MOVE.L  D0,4(A1)        ; AND LINK TAIL TO IT
  271.     ADDQ.L  #8,A1
  272.     BRA.S   .LOOPX
  273. PPCASMHASH:
  274.     MOVE.L  #PPCHASH,A0     ; A0=TABEL
  275.     LEA     PPC_INSTAB,A1
  276.     MOVE.L  A0,A2
  277.     MOVE.L  #255,D0
  278. .CLX:
  279.     CLR.L   (A2)+
  280.     DBRA    D0,.CLX
  281. .LOOPX:
  282.     MOVE.L  (A1),D0
  283.     BEQ.S   .EXX
  284.     MOVE.L  D0,A2
  285.     HASH    A2,D0,D1
  286.     LSL.L   #2,D0
  287.     LEA     0(A0,D0.L),A2
  288.     MOVE.L  (A2),D0
  289.     MOVE.L  A1,(A2)
  290.     MOVE.L  D0,4(A1)
  291.     ADDQ.L  #8,A1
  292.     BRA.S   .LOOPX
  293. .EXX:
  294.     RTS
  295. ;*-*
  296. ;*-*
  297. ;;ASM
  298.  
  299. ASM_COMPILE:          ; GETS INSCODE IN D7
  300.     MOVEM.L A2/A5,-(A7)     ; JUST A3-A4 STAY PRESERVED
  301.     MOVEQ   #0,D0
  302.     MOVE.W  D7,D0           ; D0=INSNR/ADDRESSMODENR
  303.     MOVEQ   #0,D1
  304.     SUB.W   #$100,D0
  305.     MOVE.W  (A3)+,D1
  306.     LEA ASM_INSJOB,A0
  307.     LSL.L   #2,D0
  308.     ADD.L   D0,A0
  309.     MOVE.L  (A0),A0         ; A0=JOBTAB ENTRY
  310.     MOVE.L  A4,A1           ; A1=ptr START INS IN A4
  311.     MOVE.W  (A0)+,(A4)+
  312. ASM_LOOP:
  313.     MOVEQ   #0,D7
  314.     MOVE.W  (A0)+,D7
  315.     BEQ.S   .1
  316.     SUBQ.L  #1,D7
  317.     LSL.L   #2,D7
  318.     MOVE.L  ASM_JOBROUTINES(PC,D7.L),A2
  319.     JSR (A2)
  320.     BRA.S   ASM_LOOP
  321. .1: MOVEM.L (A7)+,A2/A5
  322.     RTS
  323.  
  324. ASM_STOP:             ; EN JOBCODE PROCESSING
  325.     LEA .1(PC),A0
  326.     RTS
  327. .1: DC.W    0
  328.  
  329. SKIP244:
  330.     CMP.W   #44,(A3)
  331.     BNE.S   *+4
  332.     ADDQ.L  #4,A3
  333.     RTS
  334.  
  335.  
  336. XR:
  337.     BSR SKIP244
  338.  
  339. ;; a:REG
  340. ASM_REGID:
  341.     CMP.W   #IDENT,(A3)
  342.     BNE.S   .1
  343.     MOVE.L  A0,-(A7)
  344.     MOVE.L  2(A3),A0
  345.     BTST    #3,5(A0)
  346.     BEQ.S   .2
  347.     MOVE.L  D0,-(A7)
  348.     MOVE.W  #$400,D0
  349.     OR.W    10(A0),D0
  350.     MOVE.W  D0,(A3)
  351.     MOVE.L  #$2C002C,2(A3)
  352.     MOVE.L  (A7)+,D0
  353. .2: MOVE.L  (A7)+,A0
  354. .1: RTS
  355. ;*-*
  356.  
  357. ASM_JOBROUTINES:
  358.     DC.L    ASM_NOTIMPL,ASM_PUTSIZE,ASM_PUTSIZEMOVE,ASM_DOEA
  359.     DC.L    ASM_DOEAMOVEDEST,ASM_COMMA,ASM_ADDSUB,ASM_MOVEQ,ASM_ASQ
  360.     DC.L    ASM_BCC,ASM_DBCC,ASM_GETADRREG,ASM_SHIFT,ASM_DATAREG
  361.     DC.L    ASM_BIT,ASM_SIZEA,ASM_SIZEE,ASM_XREG,ASM_DOEXG
  362.     DC.L    ASM_CMPM,ASM_MOVEM,ASM_TRAP,ASM_MOVEP,ASM_CMPI
  363.     DC.L    ASM_CPUSUP,ASM_SIZEFIXED,ASM_SIZE0,ASM_SIZEO
  364.     DC.L    ASM_MONADIC,ASM_FPUSUP,ASM_46EMUL,ASM_DYADIC
  365.     DC.L    ASM_MMUSUP,ASM_COPY,ASM_FMOVE,ASM_FMOVECR
  366.     DC.L    ASM_FMOVEM,ASM_FSINCOS,ASM_TRAPCC,ASM_FTST
  367.     DC.L    ASM_PMMSTD,ASM_PMMLDX,ASM_PMMTST,ASM_PMMMOVE,ASM_PMMEA
  368.     DC.L    ASM_IMM3B,ASM_MOVEC,ASM_MOVES,ASM_BITFIELD1,ASM_BITFIELD2
  369.     DC.L    ASM_BITFIELD3,ASM_MULDIV,ASM_LINK,ASM_CPCACHE040,ASM_MOVE16
  370.     DC.L    ASM_PULSE,ASM_MOVE,ASM_ANDI,ASM_EORI,ASM_ORI
  371.  
  372. ;; Not implemented      1
  373. ASM_NOTIMPL:          ; 1
  374.     BRA iERROR87      ; TEMP
  375. ;*-*
  376. ;; Put size             2
  377. ASM_PUTSIZE:          ; 2
  378.     TST.L   D1
  379.     BNE     .EXISTS
  380.     MOVE.W  (A0),D1
  381. .EXISTS:
  382.     ADDQ.L  #2,A0
  383.     MOVE.W  (A0)+,D2
  384.     MOVE.L  D1,D0
  385.     SUBQ.L  #1,D0
  386.     BTST    D0,D2
  387.     BEQ     iERROR79         ; 1=B,2=W,3=L...
  388.  
  389.     MOVE.W  (A0)+,D2        ; FIND OFFSET
  390.     LSL.L   D2,D0
  391.     OR.W    D0,(A1)         ; PUT IN INS.WORD
  392.     RTS
  393. ;*-*
  394. ;; Put size (move)      3
  395. ASM_PUTSIZEMOVE:          ; 3
  396.     TST.L   D1
  397.     BNE     .EXISTS
  398.     MOVE.W  (A0),D1
  399. .EXISTS:
  400.     MOVE.L  D1,D0
  401.     sUBQ.L  #1,D0
  402.     ADDQ.L  #2,A0
  403.     MOVE.W  (A0)+,D2
  404.     btst    d0,d2
  405.     beq     iERROR79
  406.  
  407.     MOVE.L  D1,D0
  408.     CMP.W   #1,D0
  409.     BEQ.S   .1
  410.     BCHG    #0,D0
  411. .1: MOVE.W  (A0)+,D2        ; FIND OFFSET
  412.     LSL.L   D2,D0
  413.     OR.W    D0,(A1)         ; PUT IN INS.WORD
  414.     RTS
  415. ;*-*
  416. ;; EA                   4
  417. ASM_DOEA:             ; 4
  418.     BSR.W   ASM_GETEA
  419.     MOVE.W  (A0)+,D2
  420.     BTST    D0,D2
  421.     BEQ iERROR19
  422.     MOVE.W  (A0)+,D2
  423.     TST.W   D2
  424.     BMI.S   .1          ; OFFS=-1 --> NO OR.W EA
  425.     LSL.W   D2,D3
  426.     OR.W    D3,(A1)
  427. .1: RTS
  428. ;*-*
  429. ;; EA (move dest)       5
  430. ASM_DOEAMOVEDEST:         ; 5  MASK IN D3, # IN D0
  431.     BSR.W   ASM_GETEA
  432.     MOVE.W  (A0)+,D2
  433.     BTST    D0,D2
  434.     BEQ iERROR19
  435.     MOVE.L  D3,D0
  436.     LSR.W   #3,D3           ; UPPER BITS
  437.     AND.W   #%111,D0        ; LOWER
  438.     LSL.W   #3,D0
  439.     ADD.W   D3,D0           ; SWAPPED REGISTER AND MODE FIELDS
  440.     MOVE.W  (A0)+,D2
  441.     LSL.W   D2,D0
  442.     OR.W    D0,(A1)
  443.     RTS
  444. ;*-*
  445. ;; Comma                6
  446. ASM_COMMA:            ; 6
  447.     CMP.W   #COM,(A3)+
  448.     BNE iERROR5
  449.     RTS
  450. ;*-*
  451. ;; Add/Sub              7
  452. ASM_ADDSUB:           ; 7
  453.     BSR ASM_REGID
  454.     MOVE.B  (A3),D2
  455.     CMP.B   #4,D2
  456.     BEQ.S   .1
  457.     CMP.B   #15,D2
  458.     BEQ.S   .3
  459. .2: BSR.W   ASM_GETEA       ; EA --> Dx
  460.     BSR SKIP244
  461.     OR.W    D3,(A1)
  462.     BSR.S   ASM_COMMA
  463.     CMP.B   #5,(A3)
  464.     BEQ.S   .4
  465.     MOVEQ   #9,D0
  466.     BSR.W   ASM_GETDATAREG
  467.     ADDQ.L  #2,A0
  468.     RTS
  469. .1: CMP.W   #44,2(A3)
  470.     BEQ.W   .S
  471.     ADDQ.L  #4,A3
  472.     BSR ASM_REGID
  473.     MOVE.B  (A3),D0
  474.     SUBQ.L  #4,A3
  475.     CMP.B   #4,D0
  476.     BEQ.S   .2
  477.     CMP.B   #5,D0
  478.     BEQ.S   .2
  479. .SB:    MOVEQ   #9,D0
  480.     BSR.W   ASM_GETDATAREG      ; Dx --> EA
  481.     BSR.S   ASM_COMMA
  482.     MOVEQ   #0,D7
  483.     BSR.W   ASM_ANYEA
  484.     CMP.W   #8,D3           ; FROM DX TO DX, ALWAYS DEST.
  485.     BMI.S   .DXDX
  486.     BSET    #0,(A1)
  487. .DXDX:  ADDQ.L  #2,A0
  488.     RTS
  489. .3: BSR ASM_GETEA       ; #x --> EA
  490.     BSR ASM_COMMA
  491.     CMP.B   #5,(A3)
  492.     BEQ.S   .8
  493.     BSR ASM_GETEA
  494.     OR.W    D3,(A1)
  495.     MOVE.B  (A0)+,(A1)
  496.     ADDQ.L  #1,A0
  497.     MOVE.W  #DEST,D2
  498.     BTST    D0,D2
  499.     BEQ iERROR19
  500.     RTS
  501. .4: MOVE.B  (A1),D6         ; EA --> Ax
  502.     CMP.B   #13*16,D6
  503.     BEQ.S   .5
  504.     CMP.B   #9*16,D6
  505.     BNE iERROR19
  506. .5: MOVE.W  (A3)+,D6
  507.     AND.W   #7,D6
  508.     LSL.W   #1,D6
  509.     OR.B    D6,(A1)
  510.     MOVE.W  (A1),D6
  511.     AND.W   #%11000000,D6
  512.     TST.W   D6
  513.     BEQ iERROR31
  514.     BTST    #7,D6
  515.     BEQ.S   .7
  516.     BSET    #0,(A1)
  517. .7: OR.B    #%11000000,1(A1)
  518.     ADDQ.L  #2,A0
  519.     RTS
  520. .8: OR.W    #%111100,(A1)
  521.     BRA.S   .4
  522. .S: ADDQ.L  #8,A3
  523.     BSR ASM_REGID
  524.     MOVE.B  (A3),D0
  525.     SUBQ.L  #8,A3
  526.     CMP.B   #4,D0
  527.     BEQ.W   .2
  528.     CMP.B   #5,D0
  529.     BEQ.W   .2
  530.     BRA.W   .SB
  531. ;*-*
  532. ;; Moveq                8
  533. ASM_MOVEQ:            ; 8
  534.     CMP.W   #$0F00,(A3)+
  535.     BNE iERROR30
  536.  
  537.     MOVEM.L A0/D1,-(A7)
  538.     CMP.W   #LIBC,(A3)
  539.     BNE .1_1
  540.     ADDQ.L  #4,A3
  541.     MOVE.W  (A3)+,D1
  542.     EXT.L   D1
  543.     ADDQ.L  #8,A3
  544.     MOVEQ   #0,D0
  545.     BRA .1_2
  546. .1_1:
  547.     BSR ASM_GRABVALUE
  548. .1_2:
  549.     TST.L   D0
  550.     BMI iERROR30
  551.     MOVE.L  D1,D0
  552.     MOVEM.L (A7)+,A0/D1
  553.  
  554.     CMP.L   #128,D0
  555.     BPL iERROR31
  556.     CMP.L   #-127,D0
  557.     BMI iERROR31
  558.     MOVE.B  D0,1(A1)
  559.     BSR.W   ASM_COMMA
  560.     MOVEQ   #9,D0
  561.     BSR     ASM_GETDATAREG
  562.     RTS
  563. ;*-*
  564. ;; Addq/Subq            9
  565. ASM_ASQ:              ; 9
  566.     CMP.W   #$0F00,(A3)+
  567.     BNE iERROR30
  568.  
  569.     MOVEM.L A0/D1,-(A7)
  570.     BSR ASM_GRABVALUE
  571.     TST.L   D0
  572.     BEQ iERROR30
  573.     MOVE.L  D1,D2
  574.     MOVEM.L (A7)+,A0/D1
  575.  
  576.     TST.L   D2
  577.     BEQ iERROR31
  578.     CMP.L   #8,D2
  579.     BNE.S   .1
  580.     MOVEQ   #0,D2
  581. .1: MOVE.L  D2,D3
  582.     AND.L   #$FFFFFFF8,D3
  583.     TST.L   D3
  584.     BNE iERROR31
  585.     AND.W   #%111,D2
  586.     MOVEQ   #9,D3
  587.     LSL.W   D3,D2
  588.     ADD.W   D2,(A1)
  589.     RTS
  590. ;*-*
  591. ;; Bcc                  10
  592. ASM_BCC:              ; 10
  593.     CMP.W   #IDENT,(A3)+
  594.     ADDQ.L  #2,A0
  595.     BNE iERROR4
  596.     MOVE.L  (A3)+,A2
  597.     CMP.B   #LAB,4(A2)
  598.     BNE iERROR4
  599.     BTST    #4,5(A2)        ; CHECK IF METHOD
  600.     BNE iERROR4
  601.  
  602.     CMP.W   #3,D1
  603.     BNE     .X0
  604.     MOVE.W  -2(A0),(A1)     ; Bcc.L....
  605.     MOVEM.L D1/A0,-(A7)
  606.     MOVE.W  10(A2),D0
  607.     BSR     ADDBRANCHPCREL32
  608.     MOVEM.L (A7)+,D1/A0
  609.     RTS
  610.  
  611. .X0:CMP.W   #4,D1
  612.     BEQ.S   .X1
  613.     CMP.W   #1,D1           ; A Bcc.S/Bcc.B ?
  614.     BNE.S   .1
  615. .X1:MOVE.B  #5,1(A1)
  616.     BRA.S   .2
  617. .1: MOVE.W  #0,(A4)+
  618. .2: MOVE.W  10(A2),D0
  619.     MOVEM.L D1/A0,-(A7)
  620.     CLR.W   NEWOP
  621.     BSR ADDBRANCH
  622.     MOVEM.L (A7)+,D1/A0
  623.     RTS
  624.  
  625. ;*-*
  626. ;; DBcc                 11
  627. ASM_DBCC:             ; 11
  628.     BSR ASM_REGID
  629.     CMP.B   #4,(A3)+
  630.     BNE iERROR19
  631.     MOVE.B  (A3)+,D0
  632.     OR.B    D0,1(A1)
  633.     BSR SKIP244
  634.     BSR.W   ASM_COMMA
  635.     CMP.W   #IDENT,(A3)+
  636.     BNE iERROR4
  637.     MOVE.L  (A3)+,A2
  638.     CMP.B   #LAB,4(A2)
  639.     BNE iERROR4
  640.     BTST    #4,5(A2)        ; CHECK IF METHOD
  641.     BNE iERROR4
  642.     MOVE.W  #0,(A4)+
  643.     MOVE.W  10(A2),D0
  644.     MOVEM.L D1/A0,-(A7)
  645.     CLR.W   NEWOP
  646.     BSR ADDBRANCH
  647.     MOVEM.L (A7)+,D1/A0
  648.     RTS
  649. ;*-*
  650. ;; Address reg          12
  651. ASM_GETADRREG:            ; 12
  652.     MOVE.W  (A0)+,D0
  653.     CMP.B   #5,(A3)+
  654.     BNE iERROR19
  655.     MOVE.B  (A3)+,D2
  656.     AND.W   #%111,D2
  657.     LSL.W   D0,D2
  658.     ADD.W   D2,(A1)
  659.     RTS
  660. ;*-*
  661. ;; Shift                13
  662. ASM_SHIFT:            ; 13
  663.     BSR ASM_REGID
  664.     MOVE.B  (A3),D2
  665.     CMP.B   #4,D2
  666.     BEQ.S   .2
  667.     CMP.B   #15,D2
  668.     BNE.W   .1
  669.     ADDQ.L  #2,A3           ; IMM,REG
  670.     CMP.W   #VALUE,(A3)+
  671.     BNE iERROR30
  672.     MOVE.L  (A3)+,D4
  673.     BEQ iERROR31
  674.     CMP.L   #8,D4
  675.     BNE.S   .4
  676.     MOVEQ   #0,D4
  677. .4: CMP.L   #8,D4
  678.     BPL iERROR31
  679.     TST.L   D4
  680.     BMI iERROR31
  681.     BSR ASM_COMMA
  682.     BSR ASM_REGID
  683.     CMP.B   #4,(A3)
  684.     BNE.S   .5
  685.     ADDQ.L  #1,A3
  686.     MOVE.B  (A3)+,D5
  687.     BSR SKIP244
  688.     LSL.W   #1,D4
  689.     OR.B    D4,(A1)
  690.     OR.B    D5,1(A1)
  691.     SUBQ.W  #1,D1
  692.     LSL.W   #6,D1
  693.     OR.W    D1,(A1)
  694.     ADDQ.L  #2,A0
  695.     RTS
  696. .2: BSET    #5,1(A1)        ; REG,REG
  697.     ADDQ.L  #1,A3
  698.     MOVE.B  (A3)+,D3
  699.     LSL.B   #1,D3
  700.     OR.B    D3,(A1)
  701.     BSR SKIP244
  702.     BSR ASM_COMMA
  703.     BSR ASM_REGID
  704.     CMP.B   #4,(A3)+
  705.     BNE iERROR19
  706.     MOVE.B  (A3)+,D3
  707.     BSR SKIP244
  708.     OR.B    D3,1(A1)
  709.     SUBQ.W  #1,D1
  710.     LSL.W   #6,D1
  711.     OR.W    D1,(A1)
  712.     ADDQ.L  #2,A0
  713.     RTS
  714. .5: CMP.W   #1,D4
  715.     BNE iERROR31
  716. .1: CMP.W   #2,D1           ; SHIFT IN MEM NEEDS .W
  717.     BNE iERROR31
  718.     BSR.W   ASM_GETEA
  719.     MOVE.W  #MDEST,D2       ; SHIFT IN MEMORY
  720.     BTST    D0,D2
  721.     BEQ iERROR19
  722.     MOVE.W  (A0)+,(A1)      ; NEW OPCODE
  723.     OR.W    D3,(A1)         ; PUT IN EA
  724.     RTS
  725. ;*-*
  726. ;; Data reg             14
  727. ASM_DATAREG:          ; 14
  728.     MOVE.W  (A0)+,D0
  729.     BSR ASM_REGID
  730.     CMP.B   #4,(A3)+
  731.     BNE iERROR19
  732.     MOVEQ   #0,D2
  733.     MOVE.B  (A3)+,D2
  734.     LSL.W   D0,D2
  735.     ADD.W   D2,(A1)
  736.     BSR SKIP244
  737.     RTS
  738. ;*-*
  739. ;; Bit                  15
  740. ASM_BIT:              ; 15
  741.     CMP.B   #$F,(A3)
  742.     BNE.S   .1
  743.     ADDQ.L  #2,A3           ; #IMM,EA
  744.     CMP.W   #VALUE,(A3)+
  745.     BNE iERROR30
  746.     MOVE.L  (A3)+,D2
  747.     CHKB    D2,D3,iERROR31
  748.     MOVE.W  D2,(A4)+
  749.     MOVE.W  (A0)+,(A1)      ; NEW OPCODE
  750.     BSR ASM_COMMA
  751.     BSR.W   ASM_GETEA
  752.     MOVE.W  #BTDEST,D2
  753.     BTST    D0,D2
  754.     BEQ iERROR19
  755.     OR.W    D3,(A1)
  756.     RTS
  757. .1: BSR ASM_REGID
  758.     CMP.B   #4,(A3)+        ; Dx,EA
  759.     BNE iERROR19
  760.     MOVE.B  (A3)+,D2
  761.     LSL.B   #1,D2
  762.     OR.B    D2,(A1)
  763.     BSR SKIP244
  764.     BSR ASM_COMMA
  765.     BSR.W   ASM_GETEA
  766.     MOVE.W  #BTDEST,D2
  767.     BTST    D0,D2
  768.     BEQ iERROR19
  769.     OR.W    D3,(A1)
  770.     ADDQ.L  #2,A0
  771.     RTS
  772. ;*-*
  773. ;; SizeA                16
  774. ASM_SIZEA:            ; 16
  775.     TST.W   D1
  776.     bNE     .EXISTS
  777.     MOVE.W  (A0),D1
  778. .EXISTS:
  779.     ADDQ.L  #2,A0
  780.     MOVE.L  D1,D0
  781.     SUBQ.L  #1,D0
  782.     MOVE.W  (A0)+,D2
  783.     BTST    D0,D2
  784.     BEQ     iERROR79
  785.  
  786.     CMP.W   #1,D1
  787.     BEQ iERROR79
  788.     CMP.W   #3,D1
  789.     BEQ.S   .1
  790.     RTS
  791. .1: BSET    #0,(A1)
  792.     RTS
  793. ;*-*
  794. ;; SizeE                17
  795. ASM_SIZEE:            ; 17
  796.     TST.W   D1
  797.     bNE     .EXISTS
  798.     MOVE.W  (A0),D1
  799. .EXISTS:
  800.     ADDQ.L  #2,A0
  801.     MOVE.L  D1,D0
  802.     SUBQ.L  #1,D0
  803.     MOVE.W  (A0)+,D2
  804.     BTST    D0,D2
  805.     BEQ     iERROR79
  806.  
  807.     CMP.W   #1,D1
  808.     BEQ iERROR79
  809.     CMP.W   #3,D1
  810.     BEQ.S   .1
  811.     RTS
  812. .1: BSET    #6,1(A1)
  813.     RTS
  814. ;*-*
  815. ;; Xreg                 18
  816. ASM_XREG:             ; 18
  817.     BSR ASM_REGID
  818.     MOVE.B  (A3)+,D2
  819.     MOVE.B  (A3)+,D3
  820.     BSR SKIP244
  821.     BSR ASM_COMMA
  822.     BSR ASM_REGID
  823.     MOVE.B  (A3)+,D4
  824.     MOVE.B  (A3)+,D5
  825.     BSR SKIP244
  826.     CMP.B   D2,D4
  827.     BNE iERROR19
  828.     CMP.B   #4,D2
  829.     BEQ.S   .1
  830.     CMP.B   #8,D2
  831.     BNE iERROR19
  832.     BSET    #3,1(A1)
  833. .1: AND.B   #%111,D3
  834.     AND.B   #%111,D5
  835.     OR.B    D3,1(A1)
  836.     LSL.B   #1,D5
  837.     OR.B    D5,(A1)
  838.     RTS
  839. ;*-*
  840. ;; Exg                  19
  841. ASM_DOEXG:            ; 19
  842.     BSR ASM_REGID
  843.     MOVE.B  (A3)+,D2
  844.     MOVE.B  (A3)+,D3
  845.     CMP.B   #4,D2
  846.     BNE.S   .1
  847.     BSR SKIP244
  848.  
  849.     LSL.B   #1,D3
  850.     OR.B    D3,(A1)
  851.  
  852.     BSR ASM_COMMA
  853.     BSR ASM_REGID
  854.     MOVE.B  (A3)+,D2
  855.     MOVE.B  (A3)+,D3
  856.     AND.B   #%111,D3
  857.  
  858.     OR.B    D3,1(A1)
  859.  
  860.     CMP.B   #4,D2
  861.     BNE.S   .2
  862.     BSR SKIP244
  863.     BSET    #6,1(A1)        ; d,d
  864.     RTS
  865. .2: BSET    #7,1(A1)        ; d,a
  866.     BSET    #3,1(A1)
  867.     RTS
  868. .1: CMP.B   #5,D2
  869.     BNE iERROR19
  870.     AND.B   #%111,D3
  871.  
  872.     OR.B    D3,1(A1)
  873.  
  874.     BSR ASM_COMMA
  875.     BSR ASM_REGID
  876.     MOVE.B  (A3)+,D2
  877.     MOVE.B  (A3)+,D3
  878.     AND.B   #%111,D3
  879.  
  880.     LSL.B   #1,D3
  881.     OR.B    D3,(A1)
  882.  
  883.     CMP.B   #4,D2
  884.     BNE.S   .3
  885.     BSR SKIP244
  886.     BSET    #7,1(A1)        ; d,a
  887.     BSET    #3,1(A1)
  888.     RTS
  889. .3: BSET    #6,1(A1)        ; a,a
  890.     BSET    #3,1(A1)
  891.     RTS
  892. ;*-*
  893. ;; Cmpm                 20
  894. ASM_CMPM:             ; 20
  895.     CMP.B   #7,(A3)+
  896.     BNE iERROR19
  897.     MOVE.B  (A3)+,D2
  898.     BSR ASM_COMMA
  899.     CMP.B   #7,(A3)+
  900.     BNE iERROR19
  901.     AND.W   #$7,D2
  902.     OR.W    D2,(A1)
  903.     MOVE.B  (A3)+,D2
  904.     AND.W   #$7,D2
  905.     LSL.B   #1,D2
  906.     OR.B    D2,(A1)
  907.     RTS
  908. ;*-*
  909. ;; Movem                21
  910. ASM_MOVEM:            ; 21
  911.     BSR ASM_REGID
  912.     MOVE.B  (A3),D0
  913.     BEQ.S   .1B
  914.     CMPI.B  #6,D0
  915.     BMI.S   .1
  916. .1B:    ADDQ.L  #2,A4
  917.     BSR.W   ASM_GETEA       ; (Ax)+,REGLIST
  918.     MOVE.W  #MMSRC,D2
  919.     BTST    D0,D2
  920.     BEQ iERROR19
  921.     OR.W    D3,(A1)
  922.     BSET    #2,(A1)
  923.     BSR ASM_COMMA
  924.     BSR ASM_REGID
  925.     BSR.S   .2
  926.     MOVE.W  D2,2(A1)
  927.     RTS
  928. .1: BSR.S   .2
  929.     MOVE.W  D2,(A4)+
  930.     MOVE.W  D7,-(A7)
  931.     BSR ASM_COMMA
  932.     BSR.W   ASM_GETEA       ; REGLIST,-(Ax)
  933.     MOVE.W  (A7)+,D7
  934.     CMP.W   #4,D0
  935.     BNE.S   .10
  936.     MOVE.W  D7,2(A1)
  937. .10:    MOVE.W  #MMDEST,D2
  938.     BTST    D0,D2
  939.     BEQ iERROR19
  940.     OR.W    D3,(A1)
  941.     RTS
  942. .2: MOVEQ   #0,D2           ; MASK
  943.     MOVEQ   #0,D7
  944.     MOVE.B  (A3)+,D0        ; GET REGLIST
  945.     BEQ iERROR0
  946. .6: MOVEQ   #4,D6
  947.     CMP.B   #4,D0
  948.     BEQ.S   .4
  949.     CMP.B   #5,D0
  950.     BEQ.S   .5
  951.     BRA iERROR19
  952. .X: SUBQ.L  #2,A3
  953.     RTS
  954. .4: MOVEQ   #0,D4
  955.     MOVE.B  (A3)+,D4        ; Dx
  956.     BSR SKIP244
  957.     BSET    D4,D2
  958.     MOVEQ   #15,D3
  959.     SUB.L   D4,D3
  960.     BSET    D3,D7
  961. .9: MOVE.W  (A3)+,D5
  962.     CMP.W   #10,D5
  963.     BEQ.S   .7
  964.     CMP.W   #8,D5
  965.     BNE.S   .X
  966.     BSR ASM_REGID
  967.     CMP.B   (A3)+,D6
  968.     BNE iERROR19
  969.     MOVEQ   #0,D5
  970.     MOVE.B  (A3)+,D5
  971.     BSR SKIP244
  972. .8: ADDQ.L  #1,D4
  973.     BSET    D4,D2
  974.     MOVEQ   #15,D3
  975.     SUB.L   D4,D3
  976.     BSET    D3,D7
  977.     CMP.L   D5,D4
  978.     BMI.S   .8
  979.     BEQ.S   .9
  980.     BRA iERROR19
  981. .5: MOVEQ   #5,D6           ; Ax
  982.     BRA.S   .4
  983. .7: BSR ASM_REGID
  984.     MOVE.B  (A3)+,D0
  985.     BRA.S   .6
  986. ;*-*
  987. ;; Trap                 22
  988. ASM_TRAP:             ; 22
  989.     CMP.L   #$0F000001,(A3)+
  990.     BNE iERROR19
  991.     MOVE.L  (A3)+,D2
  992.     MOVE.L  D2,D3
  993.     AND.L   #$FFFFFFF0,D3
  994.     TST.L   D3
  995.     BNE iERROR31
  996.     OR.W    D2,(A1)
  997.     RTS
  998. ;*-*
  999. ;; Movep                23
  1000. ASM_MOVEP:            ; 23
  1001.     CMP.B   #4,(A3)
  1002.     BNE.S   .1
  1003.     ADDQ.L  #1,A3
  1004.     BSET    #7,1(A1)        ; Dx,x(Ax)
  1005.     MOVE.B  (A3)+,D2
  1006.     LSL.B   #1,D2
  1007.     OR.B    D2,(A1)
  1008.     BSR ASM_COMMA
  1009.     BSR     ASM_GETEA
  1010.     CMP.W   #5,D0
  1011.     BNE iERROR19
  1012.     AND.W   #7,D3
  1013.     OR.W    D3,(A1)
  1014.     RTS
  1015. .1: BSR     ASM_GETEA       ; x(Ax),Dx
  1016.     CMP.W   #5,D0
  1017.     BNE iERROR19
  1018.     AND.W   #7,D3
  1019.     OR.W    D3,(A1)
  1020.     BSR ASM_COMMA
  1021.     CMP.B   #4,(A3)+
  1022.     BNE iERROR19
  1023.     MOVE.B  (A3)+,D2
  1024.     LSL.B   #1,D2
  1025.     OR.B    D2,(A1)
  1026.     RTS
  1027. ;*-*
  1028. ;; Cmpi                 24
  1029. ASM_CMPI:             ; 24
  1030.     CMP.W   #$0F00,(A3)
  1031.     BEQ .1
  1032.     RTS
  1033. .1: MOVE.B  #$C,(A1)        ; SET TO CMPI
  1034.     BSR     ASM_GETEA
  1035.     CMP.W   #11,D0
  1036.     BNE iERROR19
  1037.     BSR ASM_COMMA
  1038.     BSR ASM_GETEA
  1039.     MOVE.W  #DEST,D2
  1040.     BTST    D0,D2
  1041.     BEQ iERROR19
  1042.     OR.W    D3,(A1)
  1043.     BSR ASM_STOP
  1044.     RTS
  1045. ;*-*
  1046. ;; CpuSup               25
  1047. ASM_CPUSUP:           ; 25
  1048.     MOVE.W  ASMCPU(PC),D0
  1049.     AND.W   (A0)+,D0
  1050.     BEQ iERROR53
  1051.     RTS
  1052. ;*-*
  1053. ;; SizeFixed            26
  1054. ASM_SIZEFIXED:
  1055.     CMP.W   (A0)+,D1
  1056.     BNE iERROR31
  1057.     RTS
  1058. ;*-*
  1059. ;; Size0                27
  1060. ASM_SIZE0:
  1061.     TST.W   D1
  1062.     BNE     iERROR79
  1063.     RTS
  1064. ;*-*
  1065. ;; SizeO                28
  1066. ASM_SIZEO:
  1067.     TST.W   D1
  1068.     BNE     .EXISTS
  1069.     MOVE.W  (A0),D1
  1070. .EXISTS:
  1071.     ADDQ.L  #2,A0
  1072.     MOVe.W  (A0)+,D2
  1073.     MOVE.L  D1,D0
  1074.     SUBQ.L  #1,D0
  1075.     BTST    D0,D2
  1076.     BEQ     iERROR79
  1077.     RTS
  1078. ;*-*
  1079. ;; Monadic              29
  1080. ASM_MONADIC:
  1081.     MOVE.W  (A0)+,(A4)+
  1082.     CMP.W   #47,(A3)
  1083.     BNE     .EA
  1084.     CMP.W   #5,D1
  1085.     BNE     iERROR79
  1086.     BSR     ASM_GETFPREG
  1087.     MOVE.W  D2,D3
  1088.     CMP.W   #COM,(A3)
  1089.     BNE     .FP
  1090.     BSR     ASM_COMMA
  1091.     BSR     ASM_GETFPREG
  1092. .FP:LSL.W   #8,D3
  1093.     LSL.W   #2,D3
  1094.     LSL.W   #7,D2
  1095.     OR.W    D2,2(A1)
  1096.     OR.W    D3,2(A1)
  1097.     RTS
  1098. .EA:
  1099.     BSR     ASM_GETEA
  1100.     MOVE.L  #NASRC,D2
  1101.     BTST    D0,D2
  1102.     BEQ     iERROR19
  1103.     TST.W   D0
  1104.     BNE     .EA2
  1105.     CMp.W   #5,D1
  1106.     BPL     iERROR79
  1107. .EA2:
  1108.     TST.W   (A0)+
  1109.     BNE     .EA3
  1110.     CMP.W   #6,D1
  1111.     BEQ     iERROR79
  1112. .EA3:
  1113.     OR.W    D3,(A1)
  1114.     MOVE.L  D1,D2
  1115.     CMp.W   #8,D1
  1116.     BEQ     iERROR79
  1117.     LSL.W   #1,D2
  1118.     MOVE.W  .SIZES(PC,D2),D2
  1119.     OR.W    D2,2(A1)
  1120.     BSR     ASM_COMMA
  1121.     BSR     ASM_GETFPREG
  1122.     LSL.W   #7,D2
  1123.     OR.W    D2,2(A1)
  1124.     RTS
  1125. .SIZES:
  1126.     DC.W    0,$5800,$5000,$4000,$4400,$4800,$4c00,$5400,$0000
  1127. ;*-*
  1128. ;; FpuSup               30
  1129. ASM_FPUSUP:
  1130.     MOVE.W  (A0)+,D2
  1131.     MOVE.W  EFPU,D0
  1132.     AND.W   D0,D2
  1133.     BEQ     iERROR53
  1134.     RTS
  1135. ;*-*
  1136. ;; 040/060 emulated     31
  1137. ASM_46EMUL:
  1138.     CMP.W   #2,EFPU
  1139.     BNE     .X
  1140.     BSET    #7,WARNINGS+3
  1141. .X: RTS
  1142. ;*-*
  1143. ;; Dyadic               32
  1144. ASM_DYADIC:
  1145.     MOVE.W  (A0)+,(A4)+
  1146.     CMP.W   #47,(A3)
  1147.     BNE     .EA
  1148.     CMP.W   #5,D1
  1149.     BNE     iERROR79
  1150.     BSR     ASM_GETFPREG
  1151.     MOVE.W  D2,D3
  1152.     BSR     ASM_COMMA
  1153.     BSR     ASM_GETFPREG
  1154. .FP:LSL.W   #8,D3
  1155.     LSL.W   #2,D3
  1156.     LSL.W   #7,D2
  1157.     OR.W    D2,2(A1)
  1158.     OR.W    D3,2(A1)
  1159.     RTS
  1160. .EA:
  1161.     BSR     ASM_GETEA
  1162.     MOVE.L  #NASRC,D2
  1163.     BTST    D0,D2
  1164.     BEQ     iERROR19
  1165.     TST.W   D0
  1166.     BNE     .EA2
  1167.     CMp.W   #5,D1
  1168.     BPL     iERROR79
  1169. .EA2:
  1170.     TST.W   (A0)+
  1171.     BNE     .EA3
  1172.     CMP.W   #6,D1
  1173.     BEQ     iERROR79
  1174. .EA3:
  1175.     OR.W    D3,(A1)
  1176.     MOVE.L  D1,D2
  1177.     CMp.W   #8,D1
  1178.     BEQ     iERROR79
  1179.     LSL.W   #1,D2
  1180.     MOVE.W  .SIZES(PC,D2),D2
  1181.     OR.W    D2,2(A1)
  1182.     BSR     ASM_COMMA
  1183.     BSR     ASM_GETFPREG
  1184.     LSL.W   #7,D2
  1185.     OR.W    D2,2(A1)
  1186.     RTS
  1187. .SIZES:
  1188.     DC.W    0,$5800,$5000,$4000,$4400,$4800,$4c00,$5400,$0000
  1189. ;*-*
  1190. ;; MmuSup               33
  1191. ASM_MMUSUP:
  1192.     MOVE.W  (A0)+,D2
  1193.     MOVE.W  EMMU,D0
  1194.     AND.W   D0,D2
  1195.     BEQ     iERROR53
  1196.     RTS
  1197. ;*-*
  1198. ;; Copy                 34
  1199. ASM_COPY:
  1200.     MOVE.W  (A0)+,(A4)+
  1201.     RTS
  1202. ;*-*
  1203. ;; Fmove                35
  1204. ASM_FMOVE:
  1205.     CMP.W   #47,(A3)
  1206.     BNE     .EA
  1207.     CMP.W   #$24,2(A3)
  1208.     BPL     .FPCR1
  1209.     BSR     ASM_GETFPREG
  1210.     MOVE.W  D2,D7
  1211.     BSR     ASM_COMMA
  1212.     CMP.W   #47,(A3)
  1213.     BNE     .EAX
  1214.     CMP.W   #5,D1
  1215.  
  1216.     BNE     iERROR79         ; FP to FP
  1217.     BSR     ASM_GETFPREG
  1218.     LSL.W   #8,D7
  1219.     LSL.W   #2,D7
  1220.     LSL.W   #7,D2
  1221.     OR.W    D2,2(A1)
  1222.     OR.W    D7,2(A1)
  1223.     RTS
  1224. .EAX:
  1225.     BSR     ASM_GETEA
  1226.     MOVE.L  #DEST,D2
  1227.     BTST    D0,D2
  1228.     BEQ     iERROR19
  1229.     TST.W   D0
  1230.     BNE     .EAX1
  1231.     CMP.W   #5,D1
  1232.     BPL     iERROR79
  1233. .EAX1:
  1234.     OR.W    D3,(A1)
  1235.     LSL.W   #7,D7
  1236.     OR.W    D7,2(A1)
  1237.     BSR     .ADJUSTSIZE
  1238.     OR.W    #$2000,2(A1)
  1239.     CMP.W   #6,D1
  1240.     BNE     .X
  1241.     CMP.W   #23,(a3)
  1242.     BEQ     .EXT
  1243. .X: RTS
  1244. .EXT:
  1245.     ADDQ.L  #2,A3
  1246.     CMP.B   #4,(A3)
  1247.     BEQ     .EXTD
  1248.     CMp.L   #$0f000001,(a3)+
  1249.     bne     iERROR19
  1250.     move.l  (a3)+,d2
  1251.     bmi     iERROR31
  1252.     cmp.l   #64,d2
  1253.     bpl     iERROR31
  1254.     OR.W    D2,2(A1)
  1255.     CMP.W   #24,(A3)+
  1256.     BNE     iERROR29
  1257.     RTS
  1258. .EXTD:
  1259.     OR.W    #$1000,2(A1)
  1260.     MOve.W  (a3)+,d2
  1261.     and.l   #7,d2
  1262.     lsl.w   #4,d2
  1263.     or.w    d2,2(A1)
  1264.     cmp.w   #24,(a3)+
  1265.     bne     iERROR29
  1266.     RTS
  1267. .FPCR1:
  1268.     CMP.W   #3,D1
  1269.     BNE     iERROR79
  1270.     ADDq.L  #2,A3
  1271.     MOVE.W  (A3)+,D2
  1272.     cmp.w   #$27,d2
  1273.     bpl     iERROR80
  1274.     sub.w   #$24,d2
  1275.     beq     .F11
  1276.     cmp.w   #1,d2
  1277.     beq     .F12
  1278.     move.w  #$A400,D2
  1279.     BRA     .F13
  1280. .F11:
  1281.     move.w  #$a800,d2
  1282.     bra     .F13
  1283. .F12:
  1284.     MOVe.W  #$B000,d2
  1285. .F13:
  1286.     move.w  d2,2(a1)
  1287.     bsr     ASM_COMMA
  1288.     BSR     ASM_GETEA
  1289.     MOVe.W  #DEST,D2
  1290.     BTST    D0,D2
  1291.     BEQ     iERROR19
  1292.     OR.W    D3,(A1)
  1293.     RTS
  1294.  
  1295. .EA:
  1296.     BSR     ASM_GETEA
  1297.     MOVE.L  #NASRC,D2
  1298.     BTST    D0,D2
  1299.     BEQ     iERROR19
  1300.     TST.W   D0
  1301.     BNE     .EA2
  1302.     CMp.W   #5,D1
  1303.     BPL     iERROR79
  1304. .EA2:
  1305.     OR.W    D3,(A1)
  1306.     BSR     ASM_COMMA
  1307.     CMP.W   #$24,2(A3)
  1308.     BPL     .FPCR2
  1309.     BSR     ASM_GETFPREG
  1310.     LSL.W   #7,D2
  1311.     OR.W    D2,2(A1)
  1312.     BSR     .ADJUSTSIZE
  1313.     RTS
  1314.  
  1315. .FPCR2:
  1316.     CMP.W   #3,D1
  1317.     BNE     iERROR79
  1318.     CMP.W   #47,(a3)+
  1319.     BNE     iERROR80
  1320.     MOVE.W  (A3)+,D2
  1321.     cmp.w   #$27,d2
  1322.     bpl     iERROR80
  1323.     sub.w   #$24,d2
  1324.     beq     .F21
  1325.     cmp.w   #1,d2
  1326.     beq     .F22
  1327.     move.w  #$8400,D2
  1328.     BRA     .F23
  1329. .F21:
  1330.     move.w  #$8800,d2
  1331.     bra     .F23
  1332. .F22:
  1333.     MOVe.W  #$9000,d2
  1334. .F23:
  1335.     move.w  d2,2(a1)
  1336.     OR.W    D3,(A1)
  1337.     RTS
  1338. .ADJUSTSIZE:
  1339.     MOVE.L  D1,D2
  1340.     LSL.W   #1,D2
  1341.     MOVE.W  .SIZES(PC,D2),D2
  1342.     OR.W    D2,2(A1)
  1343.     RTS
  1344. .SIZES:
  1345.     DC.W    0,$5800,$5000,$4000,$4400,$4800,$4c00,$5400,$0000
  1346. ;*-*
  1347. ;; Fmovecr              36
  1348. ASM_FMOVECR:
  1349.     CMP.L   #$0f000001,(a3)+
  1350.     BNE     iERROR30
  1351.     MOVE.L  (a3)+,D2
  1352.     BMI     iERROR31
  1353.     CMP.L   #$7F,D2
  1354.     BGT     iERROR31
  1355.     OR.W    D2,2(A1)
  1356.     BSR     ASM_COMMA
  1357.     BSR     ASM_GETFPREG
  1358.     LSL.W   #7,D2
  1359.     OR.W    D2,2(A1)
  1360.     RTS
  1361. ;*-*
  1362. ;; Fmovem               37
  1363. ASM_FMOVEM:
  1364.     CMP.W   #3,D1       ; ".L"?
  1365.     BEQ     .FPCR_LIST
  1366.  
  1367.     CMP.W   #47,(A3)
  1368.     BEQ     .01         ; FP reg list
  1369.  
  1370.     BSR     ASM_GETEA
  1371.     MOVE.L  #MMSRC+1,D2
  1372.     BTST    D0,D2
  1373.     BEQ     iERROR19
  1374.     TST.W   D0
  1375.     BEQ     .02         ; mask in Dx
  1376.  
  1377.     OR.W    D3,(A1)
  1378.     BSR     ASM_COMMA
  1379.     CMP.W   #47,(A3)
  1380.     BEQ     .03         ; restore list
  1381. ;; FMOVEM <ea>,Dx
  1382.     Bsr     ASM_GETEA
  1383.     TST.W   D0
  1384.     BNE     iERROR19
  1385.     LSL.W   #3,D3
  1386.     or.w    d3,2(a1)
  1387.     OR.W    #$C800,2(A1)    ; FMOVEM.X  <ea>,Dx
  1388.     RTS
  1389. ;*-*
  1390. ;; FMOVEM <ea>,<list>
  1391. .03:
  1392.     BSR     .COMBINE_LIST
  1393.     MOVE.L  D0,D7
  1394.     BSR     .FLIP
  1395.     OR.W    D2,2(A1)
  1396.     OR.W    #$D000,2(A1)    ; FMOVEM.X  <ea>,<list>
  1397.     RTS
  1398. ;*-*
  1399. ;; FMOVEM Dx,<ea>
  1400. .02:
  1401.     LSL.W   #3,D3
  1402.     OR.W    D3,2(A1)
  1403.     BSR     ASM_COMMA
  1404.     BSR     ASM_GETEA
  1405.     MOVE.L  #MMDEST,D2
  1406.     BTST    D0,D2
  1407.     BEQ     iERROR19
  1408.     OR.W    D3,(A1)
  1409.     CMP.W   #4,d0
  1410.     bne     .X2
  1411.     OR.W    #$E800,2(A1)    ; FMOVEM.X  Dx,<ea>
  1412.     RTS
  1413. .X2:OR.W    #$F800,2(A1)
  1414.     RTS
  1415. ;*-*
  1416. ;; FMOVEM <list>,<ea>
  1417. .01:
  1418.     BSR     .COMBINE_LIST
  1419.     MOVE.L  D2,D7
  1420.     BSR     ASM_COMMA
  1421.     BSR     ASM_GETEA
  1422.     MOVE.L  #MMDEST,D2
  1423.     BTST    D0,D2
  1424.     BEQ     iERROR19
  1425.     OR.W    D3,(A1)
  1426.     CMP.W   #4,D0
  1427.     BNE     .X1
  1428.     OR.W    #$E000,2(A1)    ; FMOVEM.X <list>,<ea>
  1429.     OR.W    D7,2(a1)
  1430.     RTS
  1431. .X1:OR.W    #$F000,2(A1)
  1432.     BSR     .FLIP
  1433.     OR.W    D2,2(A1)
  1434.     RTS
  1435. ;*-*
  1436. ;; Flip bits
  1437. .FLIP:
  1438.     MOVEQ   #7,D0
  1439.     MOVEQ   #0,D2
  1440. .FLIPX:
  1441.     LSR.W   #1,D7
  1442.     BCC     .FLIPY
  1443.     BSET    D0,D2
  1444. .FLIPY:
  1445.     DBF     D0,.FLIPX
  1446.     RTS
  1447. ;*-*
  1448. ;; Combine mask list
  1449. .COMBINE_LIST:
  1450.     MOVEQ   #0,D0
  1451.     BSR     ASM_GETFPREG
  1452.     BSET    D2,D0           ; D0 - mask
  1453.     MOVE.L  D2,D7
  1454. .LOOP:
  1455.     CMP.W   #10,(A3)
  1456.     BEQ     .ONE
  1457.     CMP.W   #8,(A3)
  1458.     BNE     .XXX
  1459.  
  1460.     ADDQ.L  #2,A3
  1461.     ADDQ.L  #1,D7
  1462.     BSR     ASM_GETFPREG
  1463.     CMP.W   D2,D7
  1464.     BGT     iERROR19
  1465. .L1:
  1466.     BTST    D7,D0
  1467.     BNE     iERROR50
  1468.     BSET    D7,D0
  1469.     ADDQ.B  #1,D7
  1470.     CMP.W   D2,D7
  1471.     BLE     .L1
  1472.     CMP.W   #8,(A3)
  1473.     BEQ     iERROR19
  1474.     CMP.W   #10,(A3)
  1475.     BNE     .XXX
  1476.  
  1477. .ONE:
  1478.     ADDQ.L  #2,A3
  1479.     BSR     ASM_GETFPREG
  1480.     BTST    D2,D0
  1481.     BNE     iERROR50
  1482.     BSET    D2,D0
  1483.     MOVE.L  D2,D7
  1484.     BRA     .LOOP
  1485. .XXX:
  1486.     MOVE.L  D0,D2
  1487.     RTS
  1488. ;*-*
  1489. ;; FPcr
  1490. .FPCR_LIST:
  1491.     BSR     .COMBINE_FPCR
  1492.     OR.W    D2,2(A1)
  1493.     OR.W    #$A000,2(A1)
  1494.     BSR     ASM_COMMA
  1495.     BSR     ASM_GETEA
  1496.     MOVE.W  #MMDEST,D2
  1497.     bTST    D0,D2
  1498.     bEQ     iERROR19
  1499.     OR.W    D3,(A1)
  1500.     RTS
  1501. .CREA:
  1502.     BSR     ASM_GETEA
  1503.     MOVE.W  #MMSRC,D2
  1504.     BTST    D0,D2
  1505.     BEQ     iERROR19
  1506.     OR.W    D3,(A1)
  1507.     BSR     ASM_COMMA
  1508.     BSR     .COMBINE_FPCR
  1509.     OR.W    d2,2(A1)
  1510.     OR.W    #$C000,2(A1)
  1511.     RTS
  1512. ;*-*
  1513. ;; Combine FPcr
  1514. .COMBINE_FPCR:
  1515.     CMP.W   #47,(A3)+
  1516.     BNE     iERROR80
  1517.     MOVEQ   #0,D2
  1518. .CFLOOP:
  1519.     MOVE.W  (A3)+,D0
  1520.     SUB.L   #$24,D0
  1521.     BMI     iERROR80
  1522.     CMp.W   #1,D0
  1523.     BMI     .x1
  1524.     BEQ     .x2
  1525.     BTST    #10,d2
  1526.     bne     iERROR50
  1527.     bset    #10,d2
  1528.     bra     .x3
  1529. .x2:
  1530.     btst    #12,d2
  1531.     bne     iERROR50
  1532.     bset    #12,d2
  1533.     bra     .x3
  1534. .x1:
  1535.     btst    #11,d2
  1536.     bne     iERROR50
  1537.     bset    #11,d2
  1538. .x3:
  1539.     cmp.l   #$000a002f,(a3)+
  1540.     beq     .CFLOOP
  1541.     subq.l  #4,a3
  1542.     rts
  1543. ;*-*
  1544. ;*-*
  1545. ;; Fsincos              38
  1546. ASM_FSINCOS:
  1547.     CMP.W   #47,(A3)
  1548.     BNE     .EA
  1549.     CMP.W   #5,D1
  1550.     BNE     iERROR79
  1551.     BSR     ASM_GETFPREG
  1552.     LSL.W   #8,D2
  1553.     LSL.W   #2,D2
  1554.     OR.W    D2,2(A1)
  1555.     BRA     .REST
  1556. .EA:
  1557.     BSR     .ADJUSTSIZE
  1558.     BSR     ASM_GETEA
  1559.     MOVE.L  #NASRC,D2
  1560.     BTST    D0,D2
  1561.     BEQ     iERROR19
  1562.     TST.W   D0
  1563.     BNE     .SKP
  1564.     CMP.W   #5,D1
  1565.     BPL     iERROR79
  1566. .SKP:
  1567.     OR.W    D3,(A1)
  1568. .REST:
  1569.     BSR     ASM_COMMA
  1570.     BSR     ASM_GETFPREG
  1571.     MOVE.L  D2,D7
  1572.     CMP.W   #19,(A3)+
  1573.     BNE     iERROR81
  1574.     BSR     ASM_GETFPREG
  1575.     LSL.W   #7,D2
  1576.     OR.W    D2,2(A1)
  1577.     OR.W    D7,2(A1)
  1578.     RTS
  1579.  
  1580. .ADJUSTSIZE:
  1581.     MOVE.L  D1,D2
  1582.     LSL.W   #1,D2
  1583.     MOVE.W  .SIZES(PC,D2),D2
  1584.     OR.W    D2,2(A1)
  1585.     RTS
  1586. .SIZES:
  1587.     DC.W    0,$5800,$5000,$4000,$4400,$4800,$4c00,$5400,$0000
  1588. ;*-*
  1589. ;; Trapcc               39
  1590. ASM_TRAPCC:
  1591.     CMP.L   #$0F000001,(A3)
  1592.     BEQ     .PARAM
  1593.     ADD.W   #2,(A1)
  1594.     RTS
  1595. .PARAM:
  1596.     ADDQ.L  #4,A3
  1597.     MOVE.L  (A3)+,D2
  1598.     CMP.W   #2,D1
  1599.     BEQ     .WRD
  1600.     ADD.W   #1,(A1)
  1601.     MOVE.L  D2,(A4)+
  1602.     RTS
  1603. .WRD:
  1604.     CHKW    D2,D7,iERROR31
  1605.     MOVE.W  D2,(A4)+
  1606.     RTS
  1607. ;*-*
  1608. ;; Ftst                 40
  1609. ASM_FTST:
  1610.     CMP.W   #47,(A3)
  1611.     BNE     .EA
  1612.     CMP.W   #5,D1
  1613.     BNE     iERROR79
  1614.     BSR     ASM_GETFPREG
  1615.     lsl.w   #8,d2
  1616.     lsl.w   #2,d2
  1617.     or.w    d2,2(a1)
  1618.     rts
  1619. .EA:
  1620.     BSR     ASM_GETEA
  1621.     MOVE.L  #NASRC,D2
  1622.     BTST    D0,D2
  1623.     BEQ     iERROR19
  1624.     OR.W    d3,(a1)
  1625.     TST.W   D0
  1626.     BNE     .SKP
  1627.     CMP.W   #5,D1
  1628.     BPl     iERROR79
  1629. .SKP:
  1630.     BSR     .ADJUSTSIZE
  1631.     RTS
  1632.  
  1633. .ADJUSTSIZE:
  1634.     MOVE.L  D1,D2
  1635.     LSL.W   #1,D2
  1636.     MOVE.W  .SIZES(PC,D2),D2
  1637.     OR.W    D2,2(A1)
  1638.     RTS
  1639. .SIZES:
  1640.     DC.W    0,$5800,$5000,$4000,$4400,$4800,$4c00,$5400,$0000
  1641. ;*-*
  1642. ;; Standard MMU         41
  1643. ASM_PMMSTD:
  1644.     CMP.W   #47,(A3)
  1645.     BNE     .EA
  1646.     ADDQ.L  #2,A3
  1647.     MOVE.W  (a3)+,D2
  1648.     CMP.W   #2,D2
  1649.     BPL     iERROR82
  1650.     OR.W    D2,2(A1)
  1651.     BRA     .C
  1652. .EA:
  1653.     BSR     ASM_GETEA
  1654.     TST.W   D0
  1655.     BNE     .040
  1656.     OR.W    #8,D3
  1657.     OR.W    D3,2(A1)
  1658. .C:
  1659.     BSR     ASM_COMMA
  1660.     CMP.L   #$0f000001,(a3)+
  1661.     BNE     iERROR30
  1662.     MOVE.L  (A3)+,D2
  1663.     BMI     iERROR31
  1664.     CMP.L   #8,D2
  1665.     BPL     iERROR31
  1666.     LSL.W   #5,D2
  1667.     OR.W    D2,2(A1)
  1668.     MOVE.W  #0,(A0)
  1669.     CMP.W   #COM,(A3)
  1670.     BEQ     .C2
  1671.     RTS
  1672. .C2:
  1673.     BSR     ASM_COMMA
  1674.     BSR     ASM_GETEA
  1675.     MOVE.L  #%000111100100,D2
  1676.     BTST    D0,D2
  1677.     BEQ     iERROR19
  1678.     OR.W    d3,(a1)
  1679.     or.w    #$800,2(a1)
  1680.     rts
  1681. .040:
  1682.     TST.W   (A0)
  1683.     BEQ     iERROR19
  1684.     CMP.W   #2,ECPU
  1685.     BLT     iERROR53
  1686.     ADDQ.L  #2,A0
  1687.     CMP.W   #2,D0
  1688.     BNE     iERROR19
  1689.     MOVE.W  #$F508,(A1)
  1690.     AND.W   #7,D3
  1691.     OR.W    #8,D3
  1692.     OR.W    D3,(A1)
  1693.     LEA     2(A1),A4
  1694.     RTS
  1695.  
  1696. ;*-*
  1697. ;; MMU Load             42
  1698. ASM_PMMLDX:
  1699.     CMP.W   #47,(A3)
  1700.     BNE     .EA
  1701.     ADDQ.L  #2,A3
  1702.     MOVE.W  (a3)+,D2
  1703.     CMP.W   #2,D2
  1704.     BPL     iERROR82
  1705.     OR.W    D2,2(A1)
  1706.     BRA     .C
  1707. .EA:
  1708.     BSR     ASM_GETEA
  1709.     TST.W   D0
  1710.     BNE     iERROR19
  1711.     OR.W    #8,D3
  1712.     OR.W    D3,2(A1)
  1713. .C:
  1714.     BSR     ASM_COMMA
  1715.     BSR     ASM_GETEA
  1716.     MOVE.L  #%000111100100,D2
  1717.     BTST    D0,D2
  1718.     BEQ     iERROR19
  1719.     OR.W    d3,(a1)
  1720.     rts
  1721. ;*-*
  1722. ;; MMU Test             43
  1723. ASM_PMMTST:
  1724.     CMP.W   #47,(A3)
  1725.     BNE     .EA
  1726.     ADDQ.L  #2,A3
  1727.     MOVE.W  (a3)+,D2
  1728.     CMP.W   #2,D2
  1729.     BPL     iERROR82
  1730.     OR.W    D2,2(A1)
  1731.     BRA     .C
  1732. .EA:
  1733.     BSR     ASM_GETEA
  1734.     TST.W   D0
  1735.     BNE     .040
  1736.     OR.W    #8,D3
  1737.     OR.W    D3,2(A1)
  1738. .C:
  1739.     BSR     ASM_COMMA
  1740.     BSR     ASM_GETEA
  1741.     MOVE.L  #%000111100100,D2
  1742.     BTST    D0,D2
  1743.     BEQ     iERROR19
  1744.     OR.W    d3,(a1)
  1745.     BSR     ASM_COMMA
  1746.     CMP.L   #$0f000001,(a3)+
  1747.     BNE     iERROR30
  1748.     MOVE.L  (A3)+,D2
  1749.     BMI     iERROR31
  1750.     CMP.L   #8,D2
  1751.     BPL     iERROR31
  1752.     LSL.W   #8,D2
  1753.     LSL.W   #2,D2
  1754.     OR.W    D2,2(A1)
  1755.     MOVE.W  #0,(A0)
  1756.     CMP.W   #COM,(A3)
  1757.     BEQ     .C2
  1758.     RTS
  1759. .C2:
  1760.     BSR     ASM_COMMA
  1761.     BSR     ASM_GETEA
  1762.     CMP.W   #1,D0
  1763.     BNE     iERROR19
  1764.     OR.W    #$100,2(a1)
  1765.     AND.L   #$7,D3
  1766.     LSL.W   #5,D3
  1767.     OR.W    D3,2(a1)
  1768.     RTS
  1769. .040:
  1770.     CMP.W   #2,D0
  1771.     BNE     iERROR19
  1772.     CMP.W   #2,ECPU
  1773.     BMI     iERROR53
  1774.     ADDQ.L  #2,A0
  1775.     MOVE.W  (A0)+,(A1)
  1776.     AND.L   #7,D3
  1777.     OR.W    D3,(A1)
  1778.     LEA     2(A1),A4
  1779.     RTS
  1780. ;*-*
  1781. ;; MMU Move             44
  1782. ASM_PMMMOVE:
  1783.     CMP.W   #47,(A3)
  1784.     BEQ     .II
  1785.     BSR     .EA
  1786.     BSR     ASM_COMMA
  1787.     BSR     .SEL
  1788.     RTS
  1789. .II:BSR     .SEL
  1790.     BSR     ASM_COMMA
  1791.     BSR     .EA
  1792.     RTS
  1793.  
  1794. .EA:
  1795.     BSR     ASM_GETEA
  1796.     MOVE.L  #%000111111100,D2
  1797.     BTST    D0,D2
  1798.     BEQ     iERROR19
  1799.     OR.W    D3,(A1)
  1800.     RTS
  1801.  
  1802. .SEL:
  1803.     CMP.W   #47,(a3)+
  1804.     BNE     iERROR82
  1805.     MOVE.W  (A3)+,D2
  1806.     CMP.W   #3,D1
  1807.     BEQ     .LO
  1808.     CMP.W   #8,D1
  1809.     BEQ     .QO
  1810.     CMP.W   #2,D1
  1811.     BEQ     .WO
  1812.     BRA     iERROR79
  1813. ;; Long ones
  1814. .LO:CMP.W   #3,D2
  1815.     BNE     .L0
  1816.     MOVE.W  #$4200,D2
  1817.     BRA     .LZ
  1818. .L0:CMP.W   #$13,D2
  1819.     BNE     .L1
  1820.     MOVE.W  #$A00,D2
  1821.     BRA     .LZ
  1822. .L1:CMP.W   #$14,D2
  1823.     BNE     .L2
  1824.     MOVe.W  #$E00,D2
  1825.     BRA     .LZ
  1826. .L2:BRA     iERROR82
  1827.  
  1828. .LZ:OR.W    D2,2(A1)
  1829.     RTS
  1830. ;*-*
  1831. ;; Quad ones
  1832. .QO:CMP.W   #$10,D2
  1833.     BNE     .Q0
  1834.     MOVE.W  #$4A00,D2
  1835.     BRA     .QZ
  1836. .Q0:CMP.W   #$1b,D2
  1837.     BNE     .Q1
  1838.     MOVE.W  #$4600,D2
  1839.     BRA     .QZ
  1840. .Q1:CMP.W   #$12,D2
  1841.     BNE     .Q2
  1842.     MOVE.W  #$4e00,D2
  1843.     BRA     .QZ
  1844. .Q2:BRA     iERROR82
  1845.  
  1846. .QZ:OR.W    D2,2(A1)
  1847.     RTS
  1848. ;*-*
  1849. ;; Word ones
  1850. .WO:CMP.W   #$E,D2      ;MMUSR
  1851.     BNE     .W0
  1852.     MOVE.W  #$6200,D2
  1853.     BRA     .WZ
  1854. .W0:CMP.W   #$16,D2     ;BAC0
  1855.     BNE     .W1
  1856.     MOVE.W  #$7600,D2
  1857.     BRA     .WZ
  1858. .W1:CMP.W   #$30,D2     ;BAC1
  1859.     BNE     .W2
  1860.     MOVE.W  #$7604,D2
  1861.     BRA     .WZ
  1862. .W2:CMP.W   #$31,D2     ;BAC2
  1863.     BNE     .W3
  1864.     MOVE.W  #$7608,D2
  1865.     BRA     .WZ
  1866. .W3:CMP.W   #$32,D2     ;BAC3
  1867.     BNE     .W4
  1868.     MOVE.W  #$760c,D2
  1869.     BRA     .WZ
  1870. .W4:CMP.W   #$33,D2     ;BAC4
  1871.     BNE     .W5
  1872.     MOVE.W  #$7610,D2
  1873.     BRA     .WZ
  1874. .W5:CMP.W   #$34,D2     ;BAC5
  1875.     BNE     .W6
  1876.     MOVE.W  #$7614,D2
  1877.     BRA     .WZ
  1878. .W6:CMP.W   #$35,D2     ;BAC6
  1879.     BNE     .W7
  1880.     MOVE.W  #$7618,D2
  1881.     BRA     .WZ
  1882. .W7:CMP.W   #$36,D2     ;BAC7
  1883.     BNE     .W8
  1884.     MOVE.W  #$761C,D2
  1885.     BRA     .WZ
  1886. .W8:CMP.W   #$15,D2     ;BAD0
  1887.     BNE     .W9
  1888.     MOVE.W  #$7200,D2
  1889.     BRA     .WZ
  1890. .W9:CMP.W   #$29,D2     ;BAD1
  1891.     BNE     .WA
  1892.     MOVE.W  #$7204,D2
  1893.     BRA     .WZ
  1894. .WA:CMP.W   #$2a,D2     ;BAD2
  1895.     BNE     .WB
  1896.     MOVE.W  #$7208,D2
  1897.     BRA     .WZ
  1898. .WB:CMP.W   #$2b,D2     ;BAD3
  1899.     BNE     .WC
  1900.     MOVE.W  #$720c,D2
  1901.     BRA     .WZ
  1902. .WC:CMP.W   #$2c,D2     ;BAD4
  1903.     BNE     .WD
  1904.     MOVE.W  #$7210,D2
  1905.     BRA     .WZ
  1906. .WD:CMP.W   #$2d,D2     ;BAD5
  1907.     BNE     .WE
  1908.     MOVE.W  #$7214,D2
  1909.     BRA     .WZ
  1910. .WE:CMP.W   #$2e,D2     ;BAD6
  1911.     BNE     .WF
  1912.     MOVE.W  #$7218,D2
  1913.     BRA     .WZ
  1914. .WF:CMP.W   #$2f,D2     ;BAD7
  1915.     BNE     .WG
  1916.     MOVE.W  #$721C,D2
  1917.     BRA     .WZ
  1918. .WG:BRA     iERROR82
  1919. .WZ:OR.W    D2,2(A1)
  1920.     RTS
  1921. ;*-*
  1922. ;*-*
  1923. ;; MMU EA               45
  1924. ASM_PMMEA:
  1925.     BSR     ASM_GETEA
  1926.     MOVE.W  (A0)+,D2
  1927.     BTST    D0,D2
  1928.     BEQ     iERROR19
  1929.     AND.L   #7,D3
  1930.     OR.W    D3,(A1)
  1931.     RTS
  1932. ;*-*
  1933. ;; Immediate 3 bit      46
  1934. ASM_IMM3B:
  1935.     CMp.L   #$0f000001,(a3)+
  1936.     BNE     iERROR30
  1937.     MOVE.L  (a3)+,D2
  1938.     BMI     iERROR31
  1939.     CMP.L   #8,D2
  1940.     BPL     iERROR31
  1941.     OR.W    D2,(A1)
  1942.     RTS
  1943. ;*-*
  1944. ;; Movec                47
  1945. ASM_MOVEC:
  1946.     CMP.W   #47,(A3)
  1947.     BNE     .EA_TO_CR
  1948.     BSR     .COMBINE_REG
  1949.     BSR     ASM_COMMA
  1950.     BSR     .COMBINE_EA
  1951.     RTS
  1952. .EA_TO_CR:
  1953.     BSR     .COMBINE_EA
  1954.     BSR     ASM_COMMA
  1955.     BSR     .COMBINE_REG
  1956.     ADD.W   #1,(A1)
  1957.     RTS
  1958. .COMBINE_REG:
  1959.     CMP.W   #47,(A3)+
  1960.     BNE     iERROR83
  1961.     MOVE.W  (A3)+,D2
  1962.     CMP.W   #$12,D2
  1963.     BPL     iERROR83
  1964.     LSL.W   #1,D2
  1965.     MOVE.W  .REGS(PC,D2),D2
  1966.     OR.W    D2,2(A1)
  1967.     RTS
  1968. .REGS:
  1969.     DC.W    $0000,$0001,$0002,$0003,$0004,$0005,$0006,$0007,$0008
  1970.     DC.W    $0800,$0801,$0802,$0803,$0804,$0805,$0806,$0807,$0808
  1971. .COMBINE_EA:
  1972.     BSR     ASM_GETEA
  1973.     MOVE.L  #3,D2
  1974.     BTST    D0,D2
  1975.     BEQ     iERROR19
  1976.     LSL.W   #8,D3
  1977.     LSL.W   #4,D3
  1978.     OR.W    D3,2(A1)
  1979.     RTS
  1980. ;*-*
  1981. ;; Moves                48
  1982. ASM_MOVES:
  1983.     MOVEQ   #0,D2
  1984.     CMP.W   #1,D1
  1985.     BEQ     .SX
  1986.     ADD.W   #$40,D2
  1987.     CMP.W   #2,D1
  1988.     BEQ     .SX
  1989.     ADD.W   #$40,D2
  1990. .SX:
  1991.     ADD.W   D2,(A1)
  1992.     BSR     ASM_GETEA
  1993.     MOVE.L  #%000011111111,D2
  1994.     BTST    D0,D2
  1995.     BEQ     iERROR19
  1996.     CMP.W   #2,D0
  1997.     BMI     .SPACE
  1998.     OR.W    D3,(A1)
  1999.     BSR     ASM_COMMA
  2000.     BSR     ASM_GETEA
  2001.     CMP.W   #2,D0
  2002.     BPL     iERROR19
  2003.     LSL.W   #8,D3
  2004.     LSL.W   #4,D3
  2005.     OR.W    D3,2(A1)
  2006.     RTS
  2007. .SPACE:
  2008.     LSL.W   #8,D3
  2009.     LSL.W   #4,D3
  2010.     OR.W    #$800,D3
  2011.     OR.W    D3,2(A1)
  2012.     BSR     ASM_COMMA
  2013.     BSR     ASM_GETEA
  2014.     MOVE.L  #%000011111100,D2
  2015.     BTST    D0,D2
  2016.     BEQ     iERROR19
  2017.     OR.W    D3,(A1)
  2018.     RTS
  2019. ;*-*
  2020. ;; BitField1            49
  2021. ASM_BITFIELD1:
  2022.     BSR     ASM_GETEA
  2023.     MOVE.L  #DEST,D2
  2024.     BTST    D0,D2
  2025.     BEQ     iERROR19
  2026.     OR.W    D3,(A1)
  2027.     BSR     ASM_COMMA
  2028.     CMP.W   #23,(A3)+
  2029.     BNE     iERROR19
  2030.     BSR     .GET
  2031.     MOVE.L  D2,D7
  2032.     CMP.W   #19,(A3)+
  2033.     BNE     iERROR81
  2034.     BSR     .GET
  2035.     LSL.W   #6,D7
  2036.     OR.W    D7,2(A1)
  2037.     OR.W    D2,2(A1)
  2038.     CMP.W   #24,(A3)+
  2039.     BNE     iERROR29
  2040.     RTS
  2041. .GET:
  2042.     CMP.W   #$0001,(A3)
  2043.     BNE     .EA
  2044.     ADDQ.L  #2,A3
  2045.     MOVE.L  (A3)+,D2
  2046.     BMI     iERROR31
  2047.     CMP.L   #32,D2
  2048.     BPL     iERROR31
  2049.     RTS
  2050. .EA:
  2051.     BSR     ASM_GETEA
  2052.     TST.W   D0
  2053.     BNE     iERROR19
  2054.     MOVE.L  D3,D2
  2055.     OR.W    #$20,D2
  2056.     RTS
  2057. ;*-*
  2058. ;; BitField2            50
  2059. ASM_BITFIELD2:
  2060.     BSR     ASM_GETEA
  2061.     MOVE.L  #DEST,D2
  2062.     BTST    D0,D2
  2063.     BEQ     iERROR19
  2064.     OR.W    D3,(A1)
  2065.     BSR     ASM_COMMA
  2066.     CMP.W   #23,(A3)+
  2067.     BNE     iERROR19
  2068.     BSR     .GET
  2069.     MOVE.L  D2,D7
  2070.     CMP.W   #19,(A3)+
  2071.     BNE     iERROR81
  2072.     BSR     .GET
  2073.     LSL.W   #6,D7
  2074.     OR.W    D7,2(A1)
  2075.     OR.W    D2,2(A1)
  2076.     CMP.W   #24,(A3)+
  2077.     BNE     iERROR29
  2078.     BSR     ASM_COMMA
  2079.     BSR     ASM_GETEA
  2080.     TST.W   D0
  2081.     BNE     iERROR19
  2082.     LSL.W   #8,D3
  2083.     LSL.W   #4,D3
  2084.     OR.W    D3,2(A1)
  2085.     RTS
  2086. .GET:
  2087.     CMP.W   #$0001,(A3)
  2088.     BNE     .EA
  2089.     ADDQ.L  #2,A3
  2090.     MOVE.L  (A3)+,D2
  2091.     BMI     iERROR31
  2092.     CMP.L   #32,D2
  2093.     BPL     iERROR31
  2094.     RTS
  2095. .EA:
  2096.     BSR     ASM_GETEA
  2097.     TST.W   D0
  2098.     BNE     iERROR19
  2099.     MOVE.L  D3,D2
  2100.     OR.W    #$20,D2
  2101.     RTS
  2102. ;*-*
  2103. ;; BitField3            51
  2104. ASM_BITFIELD3:
  2105.     BSR     ASM_GETEA
  2106.     TST.W   D0
  2107.     BNE     iERROR19
  2108.     LSL.W   #8,D3
  2109.     LSL.W   #4,D3
  2110.     OR.W    D3,2(A1)
  2111.  
  2112.     BSR     ASM_COMMA
  2113.  
  2114.     BSR     ASM_GETEA
  2115.     MOVE.L  #DEST,D2
  2116.     BTST    D0,D2
  2117.     BEQ     iERROR19
  2118.     OR.W    D3,(A1)
  2119.     BSR     ASM_COMMA
  2120.     CMP.W   #23,(A3)+
  2121.     BNE     iERROR19
  2122.     BSR     .GET
  2123.     MOVE.L  D2,D7
  2124.     CMP.W   #19,(A3)+
  2125.     BNE     iERROR81
  2126.     BSR     .GET
  2127.     LSL.W   #6,D7
  2128.     OR.W    D7,2(A1)
  2129.     OR.W    D2,2(A1)
  2130.     CMP.W   #24,(A3)+
  2131.     BNE     iERROR29
  2132.     RTS
  2133. .GET:
  2134.     CMP.W   #$0001,(A3)
  2135.     BNE     .EA
  2136.     ADDQ.L  #2,A3
  2137.     MOVE.L  (A3)+,D2
  2138.     BMI     iERROR31
  2139.     CMP.L   #32,D2
  2140.     BPL     iERROR31
  2141.     RTS
  2142. .EA:
  2143.     BSR     ASM_GETEA
  2144.     TST.W   D0
  2145.     BNE     iERROR19
  2146.     MOVE.L  D3,D2
  2147.     OR.W    #$20,D2
  2148.     RTS
  2149. ;*-*
  2150. ;; Mul/Div              52
  2151. ASM_MULDIV:
  2152.     CMP.W   #2,D1
  2153.     BEQ     .WRD
  2154.     MOVE.W  (A0)+,(A1)
  2155.     MOVE.W  (A0)+,(A4)+
  2156.     MOVE.W  ASMCPU(PC),D2
  2157.     AND.L   #$FE,D2
  2158.     BEQ     iERROR53
  2159.     BSR     ASM_GETEA
  2160.     MOVE.L  #NASRC,D2
  2161.     BTST    D0,D2
  2162.     BEQ     iERROR19
  2163.     OR.W    D3,(A1)
  2164.     BSR     ASM_COMMA
  2165.     BSR     ASM_GETEA
  2166.     TST.W   D0
  2167.     BNE     iERROR19
  2168.     MOVE.W  D3,D7
  2169.     CMP.W   #19,(A3)
  2170.     BNE     .X1
  2171.     ADDQ.L  #2,A3
  2172.     BSR     ASM_GETEA
  2173.     TST.W   D0
  2174.     BNE     iERROR19
  2175. .X1:LSL.W   #8,D3
  2176.     LSL.W   #4,D3
  2177.     OR.W    D3,2(A1)
  2178.     OR.W    D7,2(A1)
  2179.     RTS
  2180. .WRD:
  2181.     ADDQ.L  #4,A0
  2182.     BSR     ASM_GETEA
  2183.     MOVE.L  #NASRC,D2
  2184.     BTST    D0,D2
  2185.     BEQ     iERROR19
  2186.     OR.W    D3,(A1)
  2187.     BSR     ASM_COMMA
  2188.     BSR     ASM_GETEA
  2189.     TST.W   D0
  2190.     BNE     iERROR19
  2191.     LSL.W   #8,D3
  2192.     LSL.W   #1,D3
  2193.     OR.W    D3,(A1)
  2194.     RTS
  2195. ;*-*
  2196. ;; Link                 53
  2197. ASM_LINK:
  2198.     CMP.W   #3,D1
  2199.     BEQ     .LONG
  2200.     BSR     ASM_GETEA
  2201.     CMP.W   #1,D0
  2202.     BNE     iERROR19
  2203.     AND.L   #7,D3
  2204.     OR.W    D3,(A1)
  2205.     BSR     ASM_COMMA
  2206.     CMP.L   #$0F000001,(A3)+
  2207.     BNE     iERROR30
  2208.     MOVE.L  (A3)+,D0
  2209.     CHKW    D0,D2,iERROR31
  2210.     MOVE.W  D0,(A4)+
  2211.     RTS
  2212. .LONG:
  2213.     MOVE.W  ASMCPU,D2
  2214.     AND.L   #%111110,D2
  2215.     BEQ     iERROR53
  2216.     MOVE.W  #$4800,(A1)
  2217.     BSR     ASM_GETEA
  2218.     CMP.W   #1,D0
  2219.     BNE     iERROR19
  2220.     OR.W    D3,(A1)
  2221.     BSR     ASM_COMMA
  2222.     CMP.L   #$0F000001,(A3)+
  2223.     BNE     iERROR30
  2224.     MOVE.L  (A3)+,(A4)+
  2225.     RTS
  2226. ;*-*
  2227. ;; CpCache 040+         54
  2228. ASM_CPCACHE040:
  2229.     CMP.W   #47,(A3)+
  2230.     BNE     iERROR84
  2231.     MOVEQ   #0,D2
  2232.     MOVE.W  (A3)+,D2
  2233.     SUB.L   #$37,D2
  2234.     BMI     iERROR84
  2235.     CMP.W   #4,D2
  2236.     BPL     iERROR84
  2237.     LSL.W   #6,D2
  2238.     ADD.W    D2,(A1)
  2239.     TST.W   (A0)+
  2240.     BEQ     .XX
  2241.     BSR     ASM_COMMA
  2242.     BSR     ASM_GETEA
  2243.     CMP.W   #2,D0
  2244.     BNE     iERROR19
  2245.     AND.L   #7,D3
  2246.     OR.W    D3,(A1)
  2247. .XX:RTS
  2248. ;*-*
  2249. ;; Move16               55
  2250. ASM_MOVE16:
  2251.     BSR     ASM_GETEA
  2252.     CMP.W   #8,D0
  2253.     BEQ     .ABS
  2254.     CMP.W   #3,D0
  2255.     BEQ     .INC
  2256.     CMP.W   #2,D0
  2257.     BNE     iERROR19
  2258.     AND.L   #7,d3
  2259.     OR.W    D3,(A1)
  2260.     BSR     ASM_COMMA
  2261.     BSR     ASM_GETEA
  2262.     CMP.W   #8,D0
  2263.     BNE     iERROR19
  2264.     RTS
  2265. .ABS:
  2266.     SUB.W   #8,(A1)
  2267.     BSR     ASM_COMMA
  2268.     BSR     ASM_GETEA
  2269.     CMP.W   #3,D0
  2270.     BEQ     .SKIP
  2271.     ADD.W   #16,(A1)
  2272. .SKIP:
  2273.     AND.L   #7,D3
  2274.     OR.W    D3,(A1)
  2275.     RTS
  2276. .INC:
  2277.     SUB.W   #$10,(A1)
  2278.     AND.L   #7,D3
  2279.     OR.W    D3,(A1)
  2280.     BSR     ASM_COMMA
  2281.     BSR     ASM_GETEA
  2282.     CMP.W   #8,D0
  2283.     BNE     .REL2
  2284.     RTS
  2285. .REL2:
  2286.     cmp.w   #3,d0
  2287.     bne     iERROR19
  2288.     add.w   #$20,(A1)
  2289.     lsl.w   #8,d3
  2290.     lsl.w   #4,d3
  2291.     move.w  d3,(a4)+
  2292.     rts
  2293. ;*-*
  2294. ;; Pulse                56
  2295. ASM_PULSE:
  2296.     CMP.L   #$0F000001,(A3)+
  2297.     BNE     iERROR30
  2298.     MOVE.L  (A3)+,D2
  2299.     CHKW    D2,D0,iERROR31
  2300.     MOVE.W  D2,(A4)+
  2301.     RTS
  2302. ;*-*
  2303. ;; Move                 57
  2304. ASM_MOVE:
  2305.     CMP.W   #47,(A3)
  2306.     BEQ     .KW1
  2307.     BSR     ASM_GETEA
  2308.     MOVE.L  #%111111111111,d2
  2309.     btst    d0,d2
  2310.     beq iERROR19     ;should never happen.
  2311.     cmp.w   #1,d0
  2312.     bne .1
  2313.     cmp.w   #1,d1
  2314.     beq iERROR31
  2315. .1:
  2316.     or.w    d3,(a1)
  2317.  
  2318.     bsr ASM_COMMA
  2319.  
  2320.     cmp.w   #47,(a3)
  2321.     beq     .KW2
  2322.     bsr ASM_GETEA
  2323.     move.l  #%000111111111,d2
  2324.     btst    d0,d2
  2325.     beq iERROR19
  2326.     cmp.w   #1,d0
  2327.     bne     .2
  2328.  
  2329.     cmp.w   #1,d1
  2330.     beq iERROR31
  2331.     and.l   #7,d3
  2332.     lsl.w   #8,d3
  2333.     lsl.w   #1,d3
  2334.     or.w    d3,(a1)
  2335.     or.w    #64,(a1)
  2336.     rts
  2337. .2:
  2338.     move.w  d3,d0
  2339.     lsr.w   #3,d3
  2340.     and.w   #%111,d0
  2341.     lsl.w   #3,d0
  2342.     add.w   d3,d0
  2343.     lsl.w   #6,d0
  2344.     or.w    d0,(a1)
  2345.     rts
  2346.  
  2347. .KW1:
  2348.     cmp.w   #2,d1
  2349.     bne iERROR31
  2350.     addq.l  #2,a3
  2351.     move.w  (a3)+,d0
  2352.  
  2353.     cmp.w   #$27,d0
  2354.     bne .KW1_2
  2355.     move.w  #$42c0,(A1)
  2356.     bra .KW1_EXIT
  2357. .KW1_2:
  2358.     cmp.w   #$28,d0
  2359.     bne iERROR19
  2360.     move.w  #$40c0,(a1)
  2361. .KW1_EXIT:
  2362.     bsr ASM_COMMA
  2363.     BSR ASM_GETEA
  2364.     move.l  #%000111111101,d2
  2365.     btst    d0,d2
  2366.     beq iERROR19
  2367.     or.w    d3,(A1)
  2368.     rts
  2369. .KW2:
  2370.  
  2371.     cmp.w   #1,d0
  2372.     beq     iERROR19     ; move A0,xxx
  2373.     addq.l  #2,a3
  2374.     move.w  (a3)+,d0
  2375.     cmp.w   #$27,d0
  2376.     bne     .KW2_2
  2377.     move.w  (a1),d0
  2378.     and.w   #%111111,d0
  2379.     move.w  #$44c0,(a1)
  2380.     or.w    d0,(a1)
  2381.     rts
  2382. .KW2_2:
  2383.     cmp.w   #$28,d0
  2384.     bne iERROR19
  2385.     move.w  (a1),d0
  2386.     and.w   #%111111,d0
  2387.     move.w  #$46c0,(a1)
  2388.     or.w    d0,(a1)
  2389.     rts
  2390. ;*-*
  2391. ;; Andi                 58
  2392. ASM_ANDI:
  2393.     BSR ASM_GETEA
  2394.     CMP.W   #11,d0
  2395.     bne iERROR30
  2396.  
  2397.     bsr ASM_COMMA
  2398.  
  2399.     cmp.w   #47,(a3)
  2400.     beq .KW
  2401.     bsr ASM_GETEA
  2402.     move.l  #%000111111101,d2
  2403.     btst    d0,d2
  2404.     beq iERROR19
  2405.     or.w    d3,(a1)
  2406.     rts
  2407. .KW:
  2408.     cmp.w   #1,d1
  2409.     bne iERROR31
  2410.     addq.l  #2,a3
  2411.     cmp.w   #$27,(a3)+
  2412.     bne iERROR19
  2413.     move.w  #$23c,(a1)
  2414.     rts
  2415. ;*-*
  2416. ;; Eori                 59
  2417. ASM_EORI:
  2418.     BSR ASM_GETEA
  2419.     CMP.W   #11,d0
  2420.     bne iERROR30
  2421.  
  2422.     bsr ASM_COMMA
  2423.  
  2424.     cmp.w   #47,(a3)
  2425.     beq .KW
  2426.     bsr ASM_GETEA
  2427.     move.l  #%000111111101,d2
  2428.     btst    d0,d2
  2429.     beq iERROR19
  2430.     or.w    d3,(a1)
  2431.     rts
  2432. .KW:
  2433.     cmp.w   #1,d1
  2434.     bne iERROR31
  2435.     addq.l  #2,a3
  2436.     cmp.w   #$27,(a3)+
  2437.     bne iERROR19
  2438.     move.w  #$A3c,(a1)
  2439.     rts
  2440. ;*-*
  2441. ;; Ori                  60
  2442. ASM_ORI:
  2443.     BSR ASM_GETEA
  2444.     CMP.W   #11,d0
  2445.     bne iERROR30
  2446.  
  2447.     bsr ASM_COMMA
  2448.  
  2449.     cmp.w   #47,(a3)
  2450.     beq .KW
  2451.     bsr ASM_GETEA
  2452.     move.l  #%000111111101,d2
  2453.     btst    d0,d2
  2454.     beq iERROR19
  2455.     or.w    d3,(a1)
  2456.     rts
  2457. .KW:
  2458.     cmp.w   #1,d1
  2459.     bne iERROR31
  2460.     addq.l  #2,a3
  2461.     cmp.w   #$27,(a3)+
  2462.     bne iERROR19
  2463.     move.w  #$3c,(a1)
  2464.     rts
  2465. ;*-*
  2466.  
  2467. ;; FPU reg
  2468. ASM_GETFPREG:
  2469.     CMP.W   #47,(A3)+
  2470.     BNE     iERROR80
  2471.     MOVE.W  (A3)+,D2
  2472.     SUB.W   #$1c,D2
  2473.     BMI     iERROR80
  2474.     CMP.W   #$8,D2
  2475.     BPL     iERROR80
  2476.     RTS
  2477. ;*-*
  2478. ;; Data reg
  2479. ASM_GETDATAREG:           ; D0=SHIFT
  2480.     BSR ASM_REGID
  2481.     CMP.B   #4,(A3)+
  2482.     BNE iERROR19
  2483.     MOVE.B  (A3)+,D2
  2484.     AND.W   #%111,D2
  2485.     LSL.W   D0,D2
  2486.     ADD.W   D2,(A1)
  2487.     BSR SKIP244
  2488.     RTS
  2489. ;*-*
  2490. ;; Any EA
  2491. ASM_ANYEA:            ; D7=SHIFT, res=d3.ea after shift
  2492.     BSR.W   ASM_GETEA
  2493.     LSL.W   D7,D3
  2494.     ADD.W   D3,(A1)
  2495.     RTS
  2496. ;*-*
  2497. ;; Get EA
  2498. ASM_GETEA:
  2499.     MOVE.W  (A3)+,D0
  2500.     CMP.W   #$400,D0        ; COMPLEX OR BASIC ADR.MODE
  2501.     BMI .2
  2502. ;; Dx/Ax/(Ax)/(PC)/(A0)+/-(A0)
  2503.     SUB.W   #$400,D0        ; LOWBYTE IS ADR.MASK, HI IS #ADR.MODE
  2504.     MOVEQ   #0,D3
  2505.     MOVE.B  D0,D3           ; D3.L = ADR.MODE MASK
  2506.     LSR.W   #8,D0           ; D0.W = # ADR.MODE
  2507.     CMP.W   #11,D0
  2508.     BEQ.S   .1
  2509.     CMP.W   #5,D0
  2510.     BPL iERROR19
  2511.     CMP.W   #1,D0
  2512.     BEQ.S   .AX
  2513. .X: RTS                     ; DELIVERS MASK IN D3 AND # IN D0
  2514. .AX:    CMP.W   #1,D1
  2515.     BEQ iERROR19
  2516.     RTS
  2517. ;*-*
  2518. ;; Immediate
  2519. .1: MOVEM.L D1/A0,-(A7)
  2520.     CMP.W   #LIBC,(A3)
  2521.     BNE .1_1
  2522.     ADDQ.L  #4,A3
  2523.     MOVE.W  (A3)+,D1
  2524.     EXT.L   D1
  2525.     ADDQ.L  #8,A3
  2526.     MOVEQ   #0,D0
  2527.     BRa .1_2
  2528. .1_1:
  2529.     BSR ASM_GRABVALUE
  2530. .1_2:
  2531.     MOVE.L  D1,D4
  2532.     MOVEM.L (A7)+,D1/A0
  2533.     CMP.W   #-1,D0          ; IMMEDIATE VALUE?
  2534.     BEQ iERROR19
  2535.     MOVE.W  #%111100,D3
  2536.     MOVEQ   #11,D0
  2537.     CMP.W   #3,D1
  2538.     BNE.S   .4
  2539.     MOVE.L  D4,(A4)+        ; .L #
  2540.     RTS
  2541. .4: CMP.W   #2,D1
  2542.     BNE.S   .5
  2543.     CHKW    D4,D5,iERROR93
  2544.     MOVE.W  D4,(A4)+        ; .W #
  2545.     RTS
  2546. .5: CHKB    D4,D5,iERROR94
  2547.     MOVE.B  #0,(A4)+        ; .B #
  2548.     MOVE.B  D4,(A4)+
  2549.     RTS
  2550. ;*-*
  2551. .2:
  2552.     CMP.W   #29,(A3)
  2553.     BEQ _020
  2554.     CMP.W   #17,D0
  2555.     BEQ _BRACKET
  2556. ;; Other
  2557.     SUBQ.L  #2,A3           ; ANY OTHER MODE
  2558.     MOVEM.L D1/A0,-(A7)
  2559.     BSR ASM_GRABVALUE
  2560.     MOVE.L  D1,D4           ; D4=VALUE
  2561.     CMP.W   #-1,D0
  2562.     BEQ ASM_GETLABEL
  2563.     MOVEM.L (A7)+,D1/A0
  2564. GL_BACK:
  2565.     MOVE.B  (A3),D2         ; SEE WHAT'S NEXT
  2566.     CMP.B   #4,D2
  2567.     BMI     .6              ; ABS OR INDEXED MODE
  2568.     CMP.W   #$D,d2
  2569.     beq     .xxPC
  2570.     CMP.B   #6,D2           ;
  2571.     BNE iERROR19
  2572.     MOVE.W  (A3)+,D3
  2573.     AND.W   #%111,D3
  2574.     OR.W    #%101000,D3
  2575.     MOVEQ   #5,D0
  2576.     MOVE.W  D4,(A4)+
  2577.     CHKW    D4,D5,iERROR93
  2578.     RTS
  2579. ;; $00(PC)
  2580. .xxPC:
  2581.     addq.l  #2,a3
  2582.     moveq   #0,d3
  2583.     move.w  #%111010,d3
  2584.     moveq   #9,d0
  2585.     move.w  d4,(a4)+
  2586.     CHKW    D4,D5,iERROR31
  2587.     RTS
  2588. ;*-*
  2589. ;; $00(PC,Rn)
  2590. .xxPCxx:
  2591.     addq.l  #2,a3
  2592.     BSR ASM_COMMA
  2593.     cmp.b   #4,(a3)
  2594.     blt     iERROR17
  2595.     cmp.b   #5,(a3)
  2596.     bgt     iERROR17
  2597.     seq d0
  2598.     move.w  (a3)+,d3
  2599.     and.w   #7,d3
  2600.     and.b   #8,d0
  2601.     or.b    d0,d3
  2602.     lsl.w   #4,d3
  2603.     move.b  d3,(a4)+
  2604.     move.b  d4,(a4)+
  2605.     MOVE.L  D4,D5           ; D5=EXTENSIONWORD
  2606.     CHKB    D5,D4,iERROR31
  2607.  
  2608.     moveq   #0,d3
  2609.     move.w  #%111011,d3
  2610.     moveq   #10,d0
  2611.     CHKW    D4,D5,iERROR31
  2612.     cmp.w   #18,(a3)+
  2613.     bne iERROR74
  2614.     RTS
  2615. ;*-*
  2616. .6: MOVE.W  (A3),D2
  2617.     CMP.W   #17,D2
  2618.     BEQ.S   .9
  2619.     CMP.W   #26,D2
  2620.     BEQ.S   .7
  2621.     CMP.W   #27,D2
  2622.     BNE.S   .8
  2623.     ADDQ.L  #2,A3
  2624. .8: MOVE.W  #%111001,D3     ; ABS 4
  2625.     MOVEQ   #8,D0
  2626.     MOVE.L  D4,(A4)+
  2627.     RTS
  2628. .7: ADDQ.L  #2,A3           ; ABS 4.W
  2629.     MOVE.W  #%111000,D3
  2630.     MOVEQ   #7,D0
  2631.     MOVE.W  D4,(A4)+
  2632.     CHKW    D4,D5,iERROR93
  2633.     RTS
  2634.  
  2635. .9: ADDQ.L  #2,A3           ; off(Ax,Rx.s), D4=off
  2636.     CMP.B   #$E,(A3)
  2637.     BEQ .xxPCxx
  2638.     CMP.B   #5,(A3)+
  2639.     BNE iERROR19
  2640.     MOVE.B  (A3)+,D3        ; D3.B = Ax
  2641.     AND.L   #%111,D3        ; (Ax,...
  2642.     OR.W    #%110000,D3
  2643.     MOVEQ   #6,D0
  2644.     MOVE.L  D4,D5           ; D5=EXTENSIONWORD
  2645.     CHKB    D5,D4,iERROR94
  2646.     AND.W   #$FF,D5
  2647.     CMP.W   #COM,(A3)+
  2648.     BNE iERROR5
  2649.     BSR ASM_REGID
  2650.     MOVE.B  (A3)+,D2
  2651.     CMP.B   #4,D2           ; ...,Dx
  2652.     BEQ.S   .12
  2653.     CMP.B   #5,D2
  2654.     BNE iERROR19
  2655.     BSET    #15,D5          ; ...,Ax
  2656. .12:
  2657.     MOVE.B  (A3)+,D2
  2658.     BSR SKIP244
  2659.     AND.W   #%111,D2
  2660.     MOVEQ   #12,D4
  2661.     LSL.W   D4,D2
  2662.     OR.W    D2,D5
  2663.  
  2664.     MOVE.W  (A3)+,D2
  2665.     CMP.W   #26,D2
  2666.     BEQ .12_2
  2667.     CMP.W   #27,D2
  2668.     BNE .13
  2669.     BSET    #11,D5
  2670. .12_2:
  2671.     MOVE.W  (A3)+,D2
  2672. .13:
  2673.     CMp.W   #9,D2
  2674.     BNE .14
  2675.     CMP.W   #VALUE,(A3)+
  2676.     BNE iERROR73
  2677.     MOVE.L  (A3)+,D2
  2678.     MOVEQ   #0,D0
  2679.  
  2680.     CMP.W   #1,D2
  2681.     BEQ .16
  2682.     ADDQ.L  #1,D0
  2683.     CMP.W   #2,D2
  2684.     BEQ .16
  2685.     ADDQ.L  #1,D0
  2686.     CMP.W   #4,D2
  2687.     BEQ .16
  2688.     ADDQ.L  #1,D0
  2689.     CMP.W   #8,D2
  2690.     BNE iERROR91
  2691. .16:
  2692.     LSL.W   #8,D0
  2693.     LSL.W   #1,D0
  2694.     OR.W    D0,D5
  2695.     MOVE.W  (A3)+,D2
  2696. .14:
  2697.     CMP.W   #18,D2
  2698.     BNE iERROR74
  2699.     MOVE.W  D5,(A4)+
  2700.     RTS
  2701. ;*-*
  2702. ;; 020 full
  2703. _020:
  2704.     CMP.W   #1,ECPU
  2705.     BMI iERROR53
  2706.     MOVE.L  A0,-(A7)
  2707.     MOVE.L  A4,A0
  2708.     ADDQ.L  #2,A0
  2709.  
  2710.     MOVE.W  #$30,d3         ; adressing mode for suppressed reg
  2711.     MOVE.W  #6,d0
  2712.     MOVEQ   #0,D6
  2713.     MOVE.l  #%0000000111010000,D2   ; here we set a MOVE.L  (),...
  2714.     ADDQ.L  #6,A3           ; skip "[xx"
  2715.  
  2716.     CMP.W   #30,(A3)
  2717.     BNE     .020_0
  2718.     ADDQ.L  #2,A3
  2719.     BSR     ASM_COMMA
  2720.     BSET    #1,D6
  2721.     BRA     .020_2
  2722.  
  2723. .020_0:
  2724.     CMP.W   #IDENT,(A3)
  2725.     BEQ     .020_ID
  2726.     MOVEM.L D0/D2-D4/D6-A2/A4-a6,-(A7)
  2727.     BSR ASM_GRABVALUE
  2728.     MOVE.L  D0,D5
  2729.     MOVEM.L (A7)+,D0/D2-D4/D6-A2/A4-A6
  2730.     TST.L   D5
  2731.     BMI .020_1
  2732.     CMP.W   #26,(A3)
  2733.     BMI     .020_0_2
  2734.     CMP.W   #28,(A3)
  2735.     BPL     .020_0_2
  2736.     CMP.W   #27,(A3)+
  2737.     BEQ     .020_0_2
  2738.     MOVE.W  D1,(A0)+
  2739.     or.w    #32,d2
  2740.     BCLR    #4,D2
  2741.     BRA     .020_0_1
  2742. .020_0_2:
  2743.     MOVE.L  D1,(A0)+
  2744.     OR.W    #48,D2          ; MOVE.L    ([$xxxxxxxx.L
  2745. .020_0_1:
  2746.     CMP.W   #COM,(A3)+
  2747.     BEQ .020_1
  2748.     CMP.W   #30,-2(A3)
  2749.     bne iERROR0
  2750.     cmp.w   #18,(a3)
  2751.     beq     .020_EXIT
  2752.     BSR ASM_COMMA           ; MOVE.L    ([$xxxxxxxx.L],
  2753.     BSET    #0,D6
  2754.     BRA     .020_1
  2755. .020_ID:
  2756.     ADDQ.L  #2,A3
  2757.     MOVE.L  (A3)+,D1
  2758.     CMP.W   #$E00,2(a3)
  2759.     beq     .020_ID_PCREL
  2760.     cmp.w   #$E00,4(a3)
  2761.     beq     .020_ID_PCREL
  2762.     MOVEM.L D0-D7/A1/A2/A4-A6,-(A7)
  2763.     MOVE.L  D1,A1
  2764.     CMP.B   #LAB,4(A1)
  2765.     BNE     iERROR4
  2766.     MOVE.L  A0,A4
  2767.     MOVE.W  10(A1),D0
  2768.     BSR ADDBRANCHRELOC
  2769.     MOVE.L  A4,A0
  2770.     MOVEM.L (A7)+,D0-D7/A1/A2/A4-a6
  2771.     OR.W    #48,D2
  2772.     BRA .020_0_1
  2773. .020_ID_PCREL:
  2774.     CMP.W   #26,(A3)
  2775.     BMI .020_ID_NOADJ
  2776.     CMP.W   #28,(A3)
  2777.     BPL .020_ID_NOADJ
  2778.     CMP.W   #27,(A3)+
  2779.     BPL .020_ID_NOADJ
  2780.     BCLR    #4,D2
  2781.     OR.W    #32,D2
  2782.     CLR.W   NEWOP
  2783.     MOVEm.L  D0-D7/A1/a2/A4-a6,-(A7)
  2784.     move.l  a0,a4
  2785.     MOVE.L  D1,A1
  2786.     MOve.w  10(a1),d0
  2787.     BSR ADDBRANCHPCREL16E
  2788.     move.l  a4,a0
  2789.     movem.l  (a7)+,d0-d7/a1/a2/a4-a6
  2790.     BRA .020_0_1
  2791. .020_ID_NOADJ:
  2792.     MOVEm.L  D0-D7/A1/a2/A4-a6,-(A7)
  2793.     move.l  a0,a4
  2794.     MOVE.L  D1,A1
  2795.     MOve.w  10(a1),d0
  2796.     BSR ADDBRANCHPCREL32E
  2797.     move.l  a4,a0
  2798.     movem.l  (a7)+,d0-d7/a1/a2/a4-a6
  2799.     OR.W    #48,D2
  2800.     BRA .020_0_1
  2801.  
  2802. .020_1:
  2803.     CMP.w   #$E00,(A3)
  2804.     beq     .020_1_1
  2805.     CMP.B   #5,(A3)
  2806.     BNE     .020_2
  2807.     CMP.W   #9,2(A3)
  2808.     BEQ     .020_2
  2809.     CMP.W   #26,2(A3)
  2810.     BEQ     .020_2
  2811.     CMP.W   #27,2(a3)
  2812.     beq     .020_2
  2813.     BTST    #0,D6
  2814.     bne     .020_2          ; MOVE.L    ([$xxxxxxxx.L]
  2815.     MOVE.W  (A3)+,D1        ; MOVE.L    ([$xxxxxxxx.L,Ax
  2816.     BCLR    #7,D2
  2817.     and.l   #7,d1
  2818.     add.w   d1,d3
  2819.     bra     .020_1_2
  2820. .020_1_1:
  2821.     addq.l  #2,a3
  2822.     addq.l  #8,d3
  2823.     addq.l  #3,d3
  2824.     moveq   #10,d0
  2825.     bclr    #7,d2
  2826. .020_1_2:
  2827.     cmp.w   #COM,(A3)+
  2828.     beq     .020_2
  2829.     cmp.w   #30,-2(a3)
  2830.     bne     iERROR0
  2831.     cmp.w   #18,(a3)
  2832.     beq     .020_EXIT
  2833.     bset    #1,d6
  2834.     bsr ASM_COMMA
  2835. .020_2:
  2836.     CMP.B   #4,(A3)
  2837.     BMI .020_3
  2838.     CMP.B   #6,(A3)
  2839.     BPL .020_3
  2840.  
  2841.     BTST    #1,D6
  2842.     BEQ .020_2_1
  2843.     BSET    #2,D2
  2844. .020_2_1:
  2845.     bclr    #6,d2           ; MOVE.L    ([$xxxxxxxx.L, Ax, Rn
  2846.     MOVE.W  (A3)+,D1        ; or
  2847.     btst    #8,d1           ; MOVE.L    ([$xxxxxxxx.L, Ax], Rn
  2848.     beq .020_2_2
  2849.     bset    #15,d2
  2850. .020_2_2:
  2851.     and.l   #7,d1
  2852.     rol.w   #8,d1
  2853.     rol.w   #4,d1
  2854.     or.w    d1,d2
  2855.     cmp.w   #26,(A3)
  2856.     bmi     .020_2_3
  2857.     cmp.w   #28,(a3)
  2858.     bpl     .020_2_3
  2859.     cmp.w   #27,(a3)+
  2860.     bne     .020_2_3
  2861.     bset    #11,d2
  2862. .020_2_3:
  2863.     cmp.w   #9,(a3)
  2864.     bne     .020_2_5
  2865.     addq.l  #2,a3
  2866.     cmp.w   #VALUE,(a3)+
  2867.     bne     iERROR73
  2868.     move.l  (A3)+,d1
  2869.     moveq   #0,d0
  2870.     cmp.l   #1,d1
  2871.     beq     .020_2_4
  2872.     addq.l  #1,d0
  2873.     cmp.l   #2,d1
  2874.     beq     .020_2_4
  2875.     addq.l  #1,d0
  2876.     cmp.l   #4,d1
  2877.     beq     .020_2_4
  2878.     addq.l  #1,d0
  2879.     cmp.l   #8,d1
  2880.     bne     iERROR91
  2881. .020_2_4:
  2882.     rol.w   #8,d0           ; MOVE.L    ([$xxxxxxxx.L, Ax, Rn.s*y], $yyyyyyyy)
  2883.     rol.w   #1,d0
  2884.     or.w    d0,d2
  2885. .020_2_5:
  2886.     btst    #1,d6
  2887.     bne     .020_2_7
  2888.     cmp.w   #30,(a3)+
  2889.     bne     iERROR34
  2890. .020_2_7:
  2891.     cmp.w   #18,(a3)
  2892.     beq .020_EXIT
  2893.     BSR ASM_COMMA
  2894.  
  2895. .020_3:
  2896.     MOVEM.L D0/D2-D4/D6-A2/A4-a6,-(A7)
  2897.     BSR ASM_GRABVALUE
  2898.     MOVE.L  D0,D5
  2899.     MOVEM.L (A7)+,D0/D2-D4/D6-A2/A4-A6
  2900.     TST.L   D5
  2901.     BMI .020_EXIT
  2902.  
  2903.     CMP.W   #26,(A3)
  2904.     BMI     .020_3_1
  2905.     CMP.W   #28,(A3)
  2906.     BPL     .020_3_1
  2907.     cmp.w   #26,(A3)+
  2908.     BNE     .020_3_1
  2909.     move.w  d1,(a0)+
  2910.     or.w    #2,d2
  2911.     bra     .020_3_2
  2912. .020_3_1:
  2913.     move.l  d1,(a0)+
  2914.     or.w    #3,d2
  2915. .020_3_2:
  2916. .020_EXIT
  2917.     CMP.W   #18,(A3)+
  2918.     BNE iERROR0
  2919.     MOVE.W  D2,(A4)
  2920.     MOVE.L  A0,A4
  2921.     MOVE.L  (A7)+,A0
  2922.     RTS
  2923. ;*-*
  2924. ;; bracketed
  2925. ;; value
  2926. _BRACKET:
  2927.     MOVEQ   #0,D4
  2928.     MOVE.W  (A3),D2
  2929.     CMP.W   #IDENT,D2
  2930.     BEQ .BR_IDENT
  2931.     CMP.W   #LIBC,D2
  2932. ;    BEQ .BR_LIBC
  2933.     CMP.W   #VALUE,D2       ; ($xx,Ax/PC,Rn.S*F)
  2934.     BNE .BR_0
  2935.     ADDQ.L  #2,A3
  2936.     MOVE.L  (A3)+,D4
  2937.     swap    d4
  2938.     tst.w   d4
  2939.     bne iERROR93
  2940.     swap    d4
  2941.  
  2942.     BSR ASM_COMMA
  2943. .BR_0:
  2944.     CMP.B   #$E,(A3)
  2945.     BEQ .BR_1
  2946.     CMP.B   #$5,(A3)
  2947.     BNE iERROR92
  2948.     MOVE.W  (A3)+,D2
  2949.     AND.L   #7,D2
  2950.     moveq   #$28,d3
  2951.     or.w    d2,d3
  2952.     moveq   #5,d0
  2953.     BRA .BR_2
  2954. .BR_1:
  2955.     move.w  (a3)+,d2
  2956.     moveq   #$3a,d3
  2957.     moveq   #9,d0
  2958. .BR_2:
  2959.     CMP.W   #COM,(A3)
  2960.     BNE .BR_EXIT
  2961.     BSR ASM_COMMA
  2962.     CMP.B   #5,(a3)
  2963.     seq D5
  2964.     moveq   #8,d2
  2965.     and.l   d2,d5
  2966.     move.w  (a3)+,d2
  2967.     and.l   #7,d2
  2968.     or.w    d5,d2
  2969.     ror.w   #4,d2
  2970.     ror.l   #8,d4
  2971.     tst.b   D4
  2972.     bne iERROR94
  2973.     rol.l   #8,d4
  2974.     or.w    d2,d4
  2975.     cmp.w   #$3B,D3
  2976.     BEQ .BR_3
  2977.     ADDQ.L  #7,d3
  2978. .BR_3:
  2979.     ADDQ.L  #1,D3
  2980.     addq.l  #1,d0
  2981.     CMP.W   #18,D2
  2982.     BEQ .BR_EXIT
  2983.     move.w  (a3),d2
  2984.     cmp.w   #27,D2
  2985.     bgt .BR_4
  2986.     cmp.w   #26,d2
  2987.     blt .BR_4
  2988.     move.w  (a3)+,d2
  2989.     cmp.w   #26,d2
  2990.     beq .BR_4
  2991.     bset    #11,d4
  2992. .BR_4:
  2993.     cmp.w   #18,(A3)
  2994.     beq .BR_EXIT
  2995.     move.w  (a3)+,d2
  2996.     cmp.w   #9,d2
  2997.     bne iERROR0
  2998.     cmp.w   #VALUE,(a3)+
  2999.     bne iERROR73
  3000.     move.l  (a3)+,d2
  3001.     moveq   #0,d5
  3002.  
  3003.     CMP.W   #1,D2
  3004.     BEQ .BR_5
  3005.     ADDQ.L  #1,D5
  3006.     CMP.W   #2,D2
  3007.     BEQ .BR_5
  3008.     ADDQ.L  #1,D5
  3009.     CMP.W   #4,D2
  3010.     BEQ .BR_5
  3011.     ADDQ.L  #1,D5
  3012.     CMP.W   #8,D2
  3013.     BNE iERROR91
  3014. .BR_5:
  3015.     LSL.W   #8,D5
  3016.     LSL.W   #1,D5
  3017.     OR.W    D5,D4
  3018.  
  3019. .BR_EXIT:
  3020.     cmp.w   #18,(a3)+
  3021.     bne iERROR74
  3022.     move.w  d4,(a4)+
  3023.     rts
  3024. ;*-*
  3025. ;; ident
  3026. .BR_IDENT:
  3027.     addq.l  #2,a3
  3028.     MOVE.L  (A3)+,A5
  3029.     tst.b   4(a5)
  3030.     beq iERROR22
  3031.     cmp.b   #3,4(a5)
  3032.     beq .BRI_LABEL
  3033.     moveq   #$28+5,d3
  3034.     moveq   #5,d0
  3035.     moveq   #0,d4
  3036.     move.w  10(a5),d4
  3037.     cmp.b   #2,4(a5)
  3038.     bne .BRI_1
  3039.     subq.w  #1,d3
  3040. .BRI_1:
  3041.     cmp.w   #COM,(a3)
  3042.     bne .BR_EXIT
  3043.     ADDQ.L  #1,D0
  3044.     addq.l  #8,d3
  3045.     ror.w   #8,d4
  3046.     tst.b   d4
  3047.     beq .BRI_0
  3048.     cmp.b   #$ff,d4
  3049.     bne iERROR94
  3050. .BRI_0:
  3051.     clr.b   d4
  3052.     rol.w   #8,d4
  3053.     bsr ASM_COMMA
  3054.     cmp.b   #5,(a3)
  3055.     seq D2
  3056.     bgt iERROR95
  3057.     cmp.b   #4,(a3)
  3058.     blt iERROR95
  3059.     and.l   #8,d2
  3060.     ror.w   #4,d2
  3061.     or.w    d2,d4
  3062.     move.w  (a3)+,d2
  3063.     and.l   #7,d2
  3064.     ror.w   #4,d2
  3065.     or.w    d2,d4
  3066.     cmp.w   #18,(a3)
  3067.     beq .BR_EXIT
  3068.     cmp.w   #9,(a3)
  3069.     beq .BRI_2
  3070.     cmp.w   #26,(a3)
  3071.     blt iERROR0
  3072.     cmp.w   #27,(a3)
  3073.     bgt iERROR0
  3074.     seq D2
  3075.     rol.l   #8,d2
  3076.     and.l   #$800,d2
  3077.     or.w    d2,d4
  3078.     addq.l  #2,a3
  3079. .BRI_2:
  3080.     cmp.w   #18,(a3)
  3081.     beq .BR_EXIT
  3082.     cmp.w   #9,(a3)+
  3083.     bne iERROR9
  3084.     cmp.w   #VALUE,(a3)+
  3085.     bne iERROR73
  3086.     move.l  (a3)+,d2
  3087.     moveq   #0,d5
  3088.     cmp.w   #1,d2
  3089.     beq .BRI_3
  3090.     addq.l  #1,d5
  3091.     cmp.w   #2,d2
  3092.     beq .BRI_3
  3093.     addq.l  #1,d5
  3094.     cmp.w   #4,d2
  3095.     beq .BRI_3
  3096.     addq.l  #1,d5
  3097.     cmp.w   #8,d2
  3098.     bne iERROR91
  3099. .BRI_3:
  3100.     lsl.l   #8,d5
  3101.     lsl.l   #1,d5
  3102.     or.w    d5,d4
  3103.     bra .BR_EXIT
  3104. ;*-*
  3105. ;; label
  3106. .BRI_LABEL:
  3107.     BSR ASM_COMMA
  3108.     CMP.W   #$E00,(A3)+
  3109.     BNE iERROR92
  3110.  
  3111.     moveq   #$3a,d3
  3112.     moveq   #9,d0
  3113.     moveq   #0,d4
  3114.  
  3115.     cmp.w   #COM,(a3)
  3116.     bne .BRL_EXIT
  3117.     ADDQ.L  #1,D0
  3118.     addq.l  #1,d3
  3119.     bsr ASM_COMMA
  3120.     cmp.b   #5,(a3)
  3121.     seq D2
  3122.     bgt iERROR95
  3123.     cmp.b   #4,(a3)
  3124.     blt iERROR95
  3125.     and.l   #8,d2
  3126.     ror.w   #4,d2
  3127.     or.w    d2,d4
  3128.     move.w  (a3)+,d2
  3129.     and.l   #7,d2
  3130.     ror.w   #4,d2
  3131.     or.w    d2,d4
  3132.     cmp.w   #18,(a3)
  3133.     beq .BRL_EXIT
  3134.     cmp.w   #9,(a3)
  3135.     beq .BRL_2
  3136.     cmp.w   #26,(a3)
  3137.     blt iERROR0
  3138.     cmp.w   #27,(a3)
  3139.     bgt iERROR0
  3140.     seq D2
  3141.     rol.l   #8,d2
  3142.     and.l   #$800,d2
  3143.     or.w    d2,d4
  3144.     addq.l  #2,a3
  3145. .BRL_2:
  3146.     cmp.w   #18,(a3)
  3147.     beq .BRL_EXIT
  3148.     cmp.w   #9,(a3)+
  3149.     bne iERROR9
  3150.     cmp.w   #VALUE,(a3)+
  3151.     bne iERROR73
  3152.     move.l  (a3)+,d2
  3153.     moveq   #0,d5
  3154.     cmp.w   #1,d2
  3155.     beq .BRL_3
  3156.     addq.l  #1,d5
  3157.     cmp.w   #2,d2
  3158.     beq .BRL_3
  3159.     addq.l  #1,d5
  3160.     cmp.w   #4,d2
  3161.     beq .BRL_3
  3162.     addq.l  #1,d5
  3163.     cmp.w   #8,d2
  3164.     bne iERROR91
  3165. .BRL_3:
  3166.     lsl.l   #8,d5
  3167.     lsl.l   #1,d5
  3168.     or.w    d5,d4
  3169. .BRL_EXIT:
  3170.     cmp.w   #18,(a3)+
  3171.     bne iERROR74
  3172.     move.w  d4,(a4)+
  3173.     cmp.w   #10,d0
  3174.     beq .BRL_EXIT2
  3175. .BRL_FINE:
  3176.     movem.l  d0/A0,-(a7)
  3177.     move.w  10(a5),d0
  3178.     clr.w   NEWOP
  3179.     bsr ADDBRANCH
  3180.     movem.l  (a7)+,d0/a0
  3181.     rts
  3182. .BRL_EXIT2:
  3183.     move.b  #1,-1(a4)
  3184.     bra .BRL_FINE
  3185.  
  3186. ;*-*
  3187. ;*-*
  3188. ;*-*
  3189. ;; GetLabel
  3190. ASM_GETLABEL:         ; E INTERFACE TO ASM_GETEA ADR.MODE
  3191.     MOVEM.L (A7)+,D1/A0
  3192.     MOVE.W  (A3)+,D0
  3193.     CMP.W   #IDENT,D0
  3194.     BNE .4
  3195.     MOVE.L  (A3)+,A5        ; A5=VAR
  3196.     MOVE.B  4(A5),D2
  3197.     BEQ iERROR22
  3198.     CMP.B   #LAB,D2
  3199.     BEQ .3
  3200.     BTST    #3,5(A5)        ; SEE IF REGVAR
  3201.     BNE.W   .REG
  3202.     CMP.B   #GLOBV,D2
  3203.     BNE.S   .1
  3204.     MOVEQ   #%101100,D3
  3205.     BRA.S   .2
  3206. .1: MOVEQ   #%101101,D3
  3207. .2: MOVE.W  10(A5),D0
  3208.     MOVE.W  (A3),D2
  3209.     CMP.W   #29,D2
  3210.     BPL.S   .5
  3211.     CMP.W   #26,D2
  3212.     BMI.S   .5
  3213.     ADDQ.L  #2,A3
  3214.     CMP.W   #27,D2
  3215.     BEQ.S   .5
  3216.     CMP.W   #26,D2
  3217.     BNE.S   .6
  3218.     ADDQ.W  #2,D0
  3219.     OPINT
  3220.     BRA.S   .5
  3221. .6: ADDQ.W  #3,D0
  3222.     OPCHAR
  3223. .5: CMP.B   #GLOBV,4(A5)
  3224.     BNE.S   .8
  3225.     GENGI   A5,D2
  3226. .8: OPLONG
  3227.     MOVE.W  D0,(A4)+
  3228.     MOVEQ   #5,D0
  3229.     RTS
  3230.  
  3231. .REG:   MOVEQ   #0,D0
  3232.     MOVE.W  10(A5),D3
  3233.     RTS
  3234.  
  3235. .3: BTST    #4,5(A5)        ; CHECK IF METHOD
  3236.     BNE iERROR4
  3237.     CMP.W   #$D00,(A3)+
  3238.     BNE .9
  3239.     MOVE.W  10(A5),D0       ; LAB(PC)
  3240.     CLR.W   (A4)+
  3241.     MOVEM.L D1/A0,-(A7)
  3242.     CLR.W   NEWOP
  3243.     BSR ADDBRANCH
  3244.     MOVEM.L (A7)+,D1/A0
  3245.     MOVEQ   #9,D0
  3246.     MOVEQ   #%111010,D3
  3247.     RTS
  3248.  
  3249. .9: SUBQ.L  #2,A3           ; lab(PC,Rx.s)
  3250.     CMP.W   #17,(A3)+
  3251.     BNE iERROR19
  3252.     CMP.W   #$E00,(A3)+
  3253.     BNE iERROR19
  3254.     MOVEQ   #%111011,D3     ; (PC,...
  3255.     MOVEQ   #10,D0
  3256.     MOVEQ   #0,D4
  3257.     MOVE.L  D4,D5           ; D5=EXTENSIONWORD
  3258.     MOVEM.L D0-D1/A0,-(A7)
  3259.     MOVE.W  10(A5),D0
  3260.     MOVE.W  #1,(A4)+
  3261.     CLR.W   NEWOP
  3262.     BSR ADDBRANCH
  3263.     MOVEM.L (A7)+,D0-D1/A0
  3264.     MOVE.W  -(A4),D5
  3265.     CMP.W   #COM,(A3)+
  3266.     BNE iERROR5
  3267.     BSR ASM_REGID
  3268.     MOVE.B  (A3)+,D2
  3269.     CMP.B   #4,D2           ; ...,Dx
  3270.     BEQ.S   .12
  3271.     CMP.B   #5,D2
  3272.     BNE iERROR19
  3273.     BSET    #15,D5          ; ...,Ax
  3274. .12:    MOVE.B  (A3)+,D2
  3275.     BSR SKIP244
  3276.     AND.W   #%111,D2
  3277.     MOVEQ   #12,D4
  3278.     LSL.W   D4,D2
  3279.     ADD.W   D2,D5
  3280. .13:    MOVE.W  (A3)+,D2
  3281.     CMP.W   #26,D2
  3282.     BEQ.S   .13
  3283.     CMP.W   #18,D2
  3284.     BEQ .14
  3285.     CMP.W   #27,D2
  3286.     BNE iERROR0
  3287.     BSET    #11,D5
  3288.     BRA.S   .13
  3289. .14:    MOVE.W  D5,(A4)+
  3290.     RTS
  3291. .4: CMP.W   #LIBC,D0        ; LIBCALL(Ax)
  3292.     BNE iERROR19
  3293.     ADDQ.L  #2,A3
  3294.     MOVEQ   #0,D4
  3295.     MOVE.W  (A3)+,D4
  3296.     ADDQ.L  #8,A3
  3297.     EXT.L   D4
  3298.     BRA GL_BACK
  3299.     CMP.B   #6,(A3)+
  3300.     BNE iERROR19
  3301.     MOVE.B  (A3)+,D3
  3302.     AND.W   #%111,D3
  3303.     ADD.W   #%101000,D3
  3304.     MOVEQ   #5,D0
  3305.     RTS
  3306. ;*-*
  3307. ;; GrabValue
  3308.  
  3309. ; EATS INTERIM CODE FOR TRUE VALUES + CALC
  3310. ; -->D0=TRUE/FALSE WAS VALUE
  3311. ; -->D1=RESULT
  3312. ; TRASHES: D0-D4,A0
  3313.  
  3314. ASM_GRABVALUE:
  3315.     MOVEQ   #0,D1
  3316.     MOVEQ   #-1,D0          ; IF D0=-1 THEN NOVALUE ELSE CODENR
  3317. .XL:
  3318.     MOVEQ   #0,D2           ; D2<>0 --> NEGATE
  3319.     MOVE.W  (A3)+,D3
  3320.     CMP.W   #55,D3
  3321.     BEQ     .XL
  3322.     CMP.W   #8,D3           ; '-' SIGN ?
  3323.     BNE.S   .1
  3324.     MOVEQ   #-1,D2
  3325. .xl
  3326.     MOVE.W  (A3)+,D3
  3327.     CMP.W   #55,D3
  3328.     BEQ     .xl
  3329.     CMP.W   #VALUE,D3
  3330.     BNE.S   .X2
  3331.     BRA.S   .2
  3332. .1: CMP.W   #VALUE,D3       ; VALUE ?
  3333.     BNE.S   .X              ; sizeof or exit
  3334. .2: CMP.W   #-1,D0          ; SIZEOFBACK
  3335.     BNE.S   .3
  3336.     MOVEQ   #6,D0           ; ATLEAST ONE VALUE
  3337. .3: TST.L   D2
  3338.     BEQ.S   .4
  3339.     NEG.L   (A3)
  3340. .4: SUBQ.W  #6,D0
  3341.     LSL.W   #2,D0
  3342.     MOVE.L  .T(PC,D0.W),A0
  3343.     JMP (A0)
  3344.  
  3345. .T: DC.L    .MOVE,  .ADD,   .SUB,   .MUL,   .DIV
  3346.     DC.L    .AND,   .OR,    .LSL,   .LSR
  3347.  
  3348. .XB:
  3349.     MOVE.W  (A3)+,D0
  3350.     CMP.W   #11,D0
  3351.     BPL.S   .X3
  3352.     CMP.W   #7,D0
  3353.     BMI.S   .X3         ; SEE IF AND/OR, ELSE QUIT
  3354. .AOB:
  3355.     BRA.S   .XL
  3356. .X2:
  3357.     SUBQ.L  #4,A3
  3358.     CMP.W   #-1,D0
  3359.     BEQ.S   .5
  3360.     SUBQ.L  #2,A3
  3361.     RTS
  3362. .X: CMp.W   #LIBC,D3
  3363.     BEQ .LIB
  3364.     CMP.W   #IOFF+50,D3     ; check for sizeof
  3365.     BNE.S   .XNS
  3366.     CMP.W   #31,(A3)+       ; OBJECT
  3367.     BNE iERROR40
  3368.     MOVE.L  (A3)+,A0        ; WE USE A0=OBJ
  3369.     MOVE.W  4(A0),-(A3)
  3370.     BEQ iERROR40         ; NO SIZEOF IN CONST DECL. (SOB..)
  3371.     CLR.W   -(A3)
  3372.     BRA.S   .2
  3373. .LIB:
  3374.     ADDQ.L  #2,A3
  3375.     MOVE.L  D3,-(A7)
  3376.     MOVE.W  (A3)+,D3
  3377.     ADDQ.L  #4,A3
  3378.     EXT.L   d3
  3379.     MOVE.L  D3,(A3)
  3380.     MOVE.L  (A7)+,D3
  3381.     BRA     .2
  3382.  
  3383. .XNS:
  3384.     SUBQ.L  #2,A3           ; ASSUMES NEXT WORD ALREADY READ
  3385.     CMP.W   #-1,D0
  3386.     BEQ.S   .5
  3387.     SUBQ.L  #2,A3
  3388. .5: RTS
  3389.  
  3390.  
  3391. .X3:
  3392.     CMP.W   #IOFF+29,D0     ; CHECK FOR AND/OR
  3393.     BEQ.S   .AO
  3394.     CMP.W   #IOFF+30,D0
  3395.     BEQ.S   .AO
  3396.     CMP.W   #49,D0
  3397.     BEQ.S   .LSD            ; LOGICAL SHIFT [direction], not LSD ;)
  3398.     CMP.W   #50,D0
  3399.     BEQ.S   .LSD
  3400.     SUBQ.L  #2,A3
  3401.     RTS
  3402. .AO:
  3403.     SUB.W   #IOFF+18,D0
  3404.     BRA.S   .AOB
  3405. .LSD:
  3406.     SUB.W   #36,D0
  3407.     BRA.S   .AOB
  3408.  
  3409. .MOVE:
  3410.     MOVE.L  (A3)+,D1
  3411.     BRA .XB
  3412. .ADD:
  3413.     ADD.L   (A3)+,D1
  3414.     BRA .XB
  3415. .SUB:
  3416.     SUB.L   (A3)+,D1
  3417.     BRA .XB
  3418. .AND:
  3419.     AND.L   (A3)+,D1
  3420.     BRA .XB
  3421. .OR:
  3422.     OR.L    (A3)+,D1
  3423.     BRA .XB
  3424. .LSL:
  3425.     MOVE.L  (A3)+,D4
  3426.     LSL.L   D4,D1
  3427.     BRA .XB
  3428. .LSR:
  3429.     MOVe.L  (A3)+,D4
  3430.     LSR.L   D4,D1
  3431.     BRA .XB
  3432. .MUL:   MOVE.L  (A3)+,D4
  3433.     MOVE.L  D4,D2
  3434.     MOVE.L  D4,D3
  3435.     MULU    D1,D4
  3436.     SWAP    D3
  3437.     MULU    D1,D3
  3438.     SWAP    D3
  3439.     CLR.W   D3
  3440.     ADD.L   D3,D4
  3441.     SWAP    D1
  3442.     MULU    D1,D2
  3443.     SWAP    D2
  3444.     CLR.W   D2
  3445.     ADD.L   D2,D4
  3446.     MOVE.L  D4,D1
  3447.     BRA .XB
  3448.  
  3449. ;.DIV:  MOVE.L  (A3)+,D4
  3450. ;   MOVEQ   #32,D3
  3451. ;   MOVEQ   #0,D2
  3452. ;.D1:   SUB.L   D4,D2
  3453. ;   BCC.B   .D2
  3454. ;   ADD.L   D4,D2
  3455. ;.D2:   ROXL.L  #1,D1
  3456. ;   ROXL.L  #1,D2
  3457. ;   DBF     D3,.D1
  3458. ;   NOT.L   D1
  3459. ;   BRA .XB
  3460.  
  3461. .DIV:   MOVE.L  D1,-(A7)
  3462.     MOVE.L  (A3)+,-(A7)
  3463.     TST.L   (A7)
  3464.     BEQ iERROR15
  3465.     JSR I_DIV
  3466.     ADDQ.L  #8,A7
  3467.     MOVE.L  D0,D1
  3468.     BRA .XB
  3469. ;*-*
  3470. ;*-*
  3471. ;; PPC ASM
  3472. PASM_COMPILE:
  3473.     MOVEM.L A2/A5,-(A7)
  3474.     MOVE.W  #31,PASM_RC_BIT
  3475.     CLR.W   PASM_RC_FLG
  3476.     MOVE.L  (A3)+,D7
  3477.     MOVE.W  (A3)+,PASM_RC_FLG
  3478.     LSL.L   #2,D7
  3479.     LEA     PPC_INSJOB,A0
  3480.     MOVE.L  0(A0,D7),A5
  3481. .DO:MOVEQ   #0,D7
  3482.     MOVE.W  (A5)+,D7
  3483.     BEQ     .X
  3484.     SUBQ.L  #1,D7
  3485.     LSL.W   #2,D7
  3486.     LEA     .JOB(PC),A2
  3487.     MOVE.L  (A2,D7),A2
  3488.     JSR     (A2)
  3489.     BRA     .DO
  3490. .X: MOVEM.L (A7)+,A2/A5
  3491.     RTS
  3492. .JOB:
  3493.     DC.L    PASM_CODE,ASM_COMMA,PASM_ASKGPR,PASM_SETRC,PASM_DORC
  3494.     DC.L    PASM_GETSIMM,PASM_DISRC,PASM_GPRORZERO,PASM_REQUESTRC
  3495.     DC.L    PASM_NOTIMPL,PASM_GET5BIT,PASM_GETCRF,PASM_GETBIT
  3496.     DC.L    PASM_GETDBL5,PASM_GETFPR,PASM_GETCRFD,PASM_RELATIVE
  3497.     DC.L    PASM_GETSPR,PASM_GET4BIT,PASM_GETTB,PASM_GETXBIT
  3498.     DC.L    PASM_DBLGPR,PASM_SPLIT6BIT,PASM_LABEL,PASM_ABSOLUTE
  3499. PASM_RC_BIT:
  3500.     DC.W    31
  3501. PASM_RC_FLG:
  3502.     DC.W    0
  3503.  
  3504. ;; Code
  3505. PASM_CODE:
  3506.     MOVEQ   #0,D7
  3507.     MOVE.W  (A5)+,D7
  3508.     SUBQ.L  #1,D7
  3509.     CLR.L   (A4)
  3510. .1: MOVEQ   #0,D0
  3511.     MOVE.W  (A5)+,D0
  3512.     MOVE.L  #31,D1
  3513.     SUB.W   (A5)+,D1
  3514.     LSL.L   D1,D0
  3515.     OR.L    D0,(A4)
  3516.     DBF     D7,.1
  3517.     ADDQ.L  #4,A4
  3518.     RTS
  3519. ;*-*
  3520. ;; Ask for GeneralPurposeRegister
  3521. PASM_ASKGPR:
  3522.     CMP.W   #47,(A3)+
  3523.     BNE     iERROR100
  3524.     MOVEQ   #0,D0
  3525.     MOVE.W  (A3)+,D0
  3526.     MOVEQ   #$3B,D1
  3527.     SUB.L   D1,D0
  3528.     BMI     iERROR100
  3529.     CMP.W   #$20,D0
  3530.     BPL     iERROR100
  3531.     moveq   #31,d1
  3532.     sub.w  (a5)+,d1
  3533.     lsl.l   d1,d0
  3534.     or.l    d0,-4(a4)
  3535.     rts
  3536. ;*-*
  3537. ;; Set RC
  3538. PASM_SETRC:
  3539.     MOVE.W  (A5)+,PASM_RC_BIT
  3540.     RTS
  3541. ;*-*
  3542. ;; Do RC
  3543. PASM_DORC:
  3544.     MOVE.W  PASM_RC_FLG(PC),D0
  3545.     AND.L   #1,D0
  3546.     MOVEQ   #31,D1
  3547.     SUB.W   PASM_RC_BIT(PC),D1
  3548.     LSL.L   D1,D0
  3549.     OR.L    D0,-4(A4)
  3550.     RTS
  3551. ;*-*
  3552. ;; Get Signed Immediate
  3553. PASM_GETSIMM:
  3554.     CMP.W   #$F00,(A3)+
  3555.     BNE     iERROR30
  3556.     BSR     ASM_GRABVALUE
  3557.     TST.L   D0
  3558.     BMI     iERROR30
  3559.     MOVE.L  D1,D0
  3560.     CHKW    D0,D1,iERROR93
  3561.     MOVEQ   #31,D7
  3562.     SUB.W   (A5)+,D7
  3563.     LSL.L   D7,D0
  3564.     OR.L    D0,-4(A4)
  3565.     RTS
  3566. ;*-*
  3567. ;; illegal RC
  3568. PASM_DISRC:
  3569.     TST.W   PASM_RC_FLG
  3570.     BNE iERROR101
  3571.     RTS
  3572. ;*-*
  3573. ;; Get GPR or zero
  3574. PASM_GPRORZERO:
  3575.     CMP.W   #VALUE,(A3)
  3576.     BEQ     .1
  3577.     CMP.W   #47,(A3)+
  3578.     BNE     iERROR100
  3579.     MOVEQ   #0,D0
  3580.     MOVE.W  (A3)+,D0
  3581.     SUB.L   #$3b,D0
  3582.     BMI     iERROR100
  3583.     CMP.L   #$20,D0
  3584.     BPL     iERROR100
  3585. .0:
  3586.     MOVEQ   #31,D1
  3587.     SUB.W   (A5)+,D1
  3588.     LSL.L   D1,D0
  3589.     OR.L    D0,-4(A4)
  3590.     RTS
  3591. .1: ADDQ.L  #2,A3
  3592.     MOVEQ   #0,D0
  3593.     TST.L   (A3)+
  3594.     BNE     iERROR100
  3595.     BRA     .0
  3596. ;*-*
  3597. ;; Request RC
  3598. PASM_REQUESTRC:
  3599.     TST.W   PASM_RC_FLG
  3600.     BEQ iERROR101
  3601.     RTS
  3602. ;*-*
  3603. ;; Not implemented
  3604. PASM_NOTIMPL:
  3605.     BRA iERROR87
  3606. ;*-*
  3607. ;; Get 5 bit immediate value
  3608. PASM_GET5BIT:
  3609.     CMP.W   #$F00,(A3)+
  3610.     BNE iERROR30
  3611.     BSR ASM_GRABVALUE
  3612.     TST.L   D0
  3613.     BMI iERROR30
  3614.     CMP.L   #$20,D1
  3615.     BPL iERROR31
  3616.     MOVEQ   #31,D0
  3617.     SUB.W   (A5)+,D0
  3618.     LSL.L   D0,D1
  3619.     OR.L    D1,-4(A4)
  3620.     RTs
  3621. ;*-*
  3622. ;; Get CRx
  3623. PASM_GETCRF:
  3624.     CMP.W   #47,(A3)
  3625.     BEQ     .2
  3626.     CMP.W   #$F00,(A3)+
  3627.     BNE iERROR102
  3628.     BSR ASM_GRABVALUE
  3629.     TST.L   D0
  3630.     BMI iERROR102
  3631.     CMP.L   #8,D1
  3632.     BPL iERROR102
  3633.     MOVEq   #31,d0
  3634.     sub.w   (a5)+,d0
  3635.     lsl.l   d0,d1
  3636.     or.l    d1,-4(a4)
  3637.     rts
  3638. .2: CMP.W   #91,2(a3)
  3639.     bpl .3
  3640.     addq.l  #4,a5
  3641.     rts
  3642. .3: addq.l  #2,a3
  3643.     moveq   #0,d1
  3644.     move.w  (a3)+,d1
  3645.     sub.l   #91,d1
  3646.     cmp.l   #8,d1
  3647.     bpl     iERROR102
  3648.     moveq   #31,d0
  3649.     sub.w   (a5)+,d0
  3650.     lsl.l   d0,d1
  3651.     or.l    d1,-4(a4)
  3652.     rts
  3653. ;*-*
  3654. ;; Get Bit
  3655. PASM_GETBIT:
  3656.     cmp.w   #$F00,(A3)+
  3657.     bne iERROR30
  3658.     bsr ASM_GRABVALUE
  3659.     tst.l   d0
  3660.     bmi iERROR30
  3661.     move.l  d1,d0
  3662.     and.l   #$FFFFFFFE,d0
  3663.     tst.l   d0
  3664.     bne iERROR31
  3665.     moveq   #31,d0
  3666.     sub.w   (a5)+,d0
  3667.     lsl.l   d0,d1
  3668.     or.l    d1,-4(a4)
  3669.     rts
  3670. ;*-*
  3671. ;; Get and double 5 bit immediate
  3672. PASM_GETDBL5:
  3673.     CMP.W   #$F00,(A3)+
  3674.     BNE iERROR30
  3675.     BSR ASM_GRABVALUE
  3676.     TST.L   D0
  3677.     BMI iERROR30
  3678.     CMP.L   #$20,D1
  3679.     BPL iERROR31
  3680.     MOVE.L  D1,D2
  3681.     MOVEQ   #31,D0
  3682.     SUB.W   (A5)+,D0
  3683.     LSL.L   D0,D1
  3684.     OR.L    D1,-4(A4)
  3685.     MOVEQ   #31,D0
  3686.     SUB.W   (A5)+,D0
  3687.     LSL.L   D0,D2
  3688.     OR.L    D2,-4(A4)
  3689.     RTs
  3690. ;*-*
  3691. ;; Get Floating point register
  3692. PASM_GETFPR
  3693.     CMP.W   #47,(A3)+
  3694.     BNE     iERROR103
  3695.     MOVEQ   #0,D0
  3696.     MOVE.W  (A3)+,D0
  3697.     MOVEQ   #99,D1
  3698.     SUB.L   D1,D0
  3699.     BMI     iERROR103
  3700.     CMP.W   #$20,D0
  3701.     BPL     iERROR103
  3702.     moveq   #31,d1
  3703.     sub.w  (a5)+,d1
  3704.     lsl.l   d1,d0
  3705.     or.l    d0,-4(a4)
  3706.     rts
  3707. ;*-*
  3708. ;; Get CRFx
  3709. PASM_GETCRFD:
  3710.     CMP.W   #47,(A3)
  3711.     BEQ     .2
  3712.     CMP.W   #$F00,(A3)+
  3713.     BNE iERROR102
  3714.     BSR ASM_GRABVALUE
  3715.     TST.L   D0
  3716.     BMI iERROR104
  3717.     CMP.L   #8,D1
  3718.     BPL iERROR104
  3719.     MOVEq   #31,d0
  3720.     sub.w   (a5)+,d0
  3721.     lsl.l   d0,d1
  3722.     or.l    d1,-4(a4)
  3723.     rts
  3724. .2: CMP.W   #131,2(a3)
  3725.     bpl .3
  3726.     addq.l  #4,a5
  3727.     rts
  3728. .3: addq.l  #2,a3
  3729.     moveq   #0,d1
  3730.     move.w  (a3)+,d1
  3731.     sub.l   #131,d1
  3732.     cmp.l   #8,d1
  3733.     bpl     iERROR104
  3734.     moveq   #31,d0
  3735.     sub.w   (a5)+,d0
  3736.     lsl.l   d0,d1
  3737.     or.l    d1,-4(a4)
  3738.     rts
  3739. ;*-*
  3740. ;; Get GPR or zero
  3741. PASM_RELATIVE:
  3742.     CMP.W   #VALUE,(A3)
  3743.     BNE     .brkt
  3744.     BSR ASM_GRABVALUE
  3745.     TST.L   D0
  3746.     BMI iERROR73
  3747.     MOVE.L  D1,D0
  3748.     SWAP    D0
  3749.     TST.W   D0
  3750.     BNE iERROR93
  3751.     MOVEQ   #31,D0
  3752.     SUB.W   (A5),D0
  3753.     AND.W   2(A5),D1
  3754.     LSL.L   D0,D1
  3755.     OR.L    D1,-4(A4)
  3756.     CMP.W   #17,(A3)
  3757.     BNE     .XIT
  3758. .brkt:
  3759.     CMP.W   #17,(A3)+
  3760.     BNE iERROR19
  3761.     CMP.W   #47,(A3)+
  3762.     BNE     iERROR100
  3763.     MOVEQ   #0,D0
  3764.     MOVE.W  (A3)+,D0
  3765.     SUB.L   #$3b,D0
  3766.     BMI     iERROR100
  3767.     CMP.L   #$20,D0
  3768.     BPL     iERROR100
  3769.     MOVEQ   #31,D1
  3770.     SUB.W   4(A5),D1
  3771.     LSL.L   D1,D0
  3772.     OR.L    D0,-4(A4)
  3773.     CMP.W   #18,(A3)+
  3774.     BNE iERROR74
  3775. .XIT:
  3776.     ADDQ.L  #6,A5
  3777.     RTS
  3778. ;*-*
  3779. ;; Get SPR
  3780. PASM_GETSPR:
  3781.     CMP.W   #47,(A3)
  3782.     BEQ     .2
  3783.     CMP.W   #$F00,(A3)+
  3784.     BNE iERROR105
  3785.     BSR ASM_GRABVALUE
  3786.     TST.L   D0
  3787.     BMI iERROR105
  3788.     CMP.L   #1024,D1
  3789.     BPL iERROR105
  3790.     MOVE.L  D1,D2
  3791.     AND.L   #%11111,D2
  3792.     LSR.L   #5,D1
  3793.     LSL.L   #5,D2
  3794.     OR.L    D2,D1
  3795.     MOVEq   #31,d0
  3796.     sub.w   (a5)+,d0
  3797.     lsl.l   d0,d1
  3798.     or.l    d1,-4(a4)
  3799.     rts
  3800. .2: CMP.W   #139,2(a3)
  3801.     bpl .3
  3802.     BRA iERROR105
  3803. .3: addq.l  #2,a3
  3804.     moveq   #0,d1
  3805.     move.w  (a3)+,d1
  3806.     sub.l   #139,d1
  3807.     cmp.l   #32,d1
  3808.     bpl     iERROR105
  3809.     LEA .TAB(PC),A0
  3810.     lsl.l   #1,d1
  3811.     move.w  (a0,d1),d1
  3812.     and.l   #$3FF,D1
  3813.     MOVE.L  D1,D2
  3814.     AND.L   #%11111,D2
  3815.     LSR.L   #5,D1
  3816.     LSL.L   #5,D2
  3817.     OR.L    D2,D1
  3818.     moveq   #31,d0
  3819.     sub.w   (a5)+,d0
  3820.     lsl.l   d0,d1
  3821.     or.l    d1,-4(a4)
  3822.     rts
  3823. .TAB:
  3824.     DC.W    001,008,009,018,019,022,025,026,027,272,273,274
  3825.     DC.W    275,280,282,287,528,529,530,531,532,533,534,535
  3826.     DC.W    536,537,538,539,540,541,542,543,1013
  3827. ;*-*
  3828. ;; Get 4 bit immediate value
  3829. PASM_GET4BIT:
  3830.     CMP.W   #$F00,(A3)+
  3831.     BNE iERROR30
  3832.     BSR ASM_GRABVALUE
  3833.     TST.L   D0
  3834.     BMI iERROR30
  3835.     CMP.L   #$10,D1
  3836.     BPL iERROR31
  3837.     MOVEQ   #31,D0
  3838.     SUB.W   (A5)+,D0
  3839.     LSL.L   D0,D1
  3840.     OR.L    D1,-4(A4)
  3841.     RTs
  3842. ;*-*
  3843. ;; GetTimeBase
  3844. PASM_GETTB:
  3845.     CMP.W   #COM,(A3)
  3846.     BNE     .DEFTB
  3847.     ADDQ.L  #2,A3
  3848.     CMp.W   #47,(A3)+
  3849.     BNE     .VAL
  3850.     MOVEQ   #0,D1
  3851.     MOVE.W  (A3)+,D1
  3852.     SUB.L   #172,D1
  3853.     BMI     iERROR106
  3854.     CMP.W   #2,D1
  3855.     BPL     iERROR106
  3856.     ADD.L   #268,D1
  3857. .FINE:
  3858.     MOVE.L  D1,D0
  3859.     LSR.L   #5,D1
  3860.     AND.L   #31,d0
  3861.     LSL.L   #5,D0
  3862.     OR.L    D0,D1
  3863.     MOVEQ   #31,D0
  3864.     SUB.W   (A5)+,D0
  3865.     LSL.L   D0,D1
  3866.     OR.L    D1,-4(A4)
  3867.     RTS
  3868. .VAL:
  3869.     CMP.W   #VALUE,-2(A3)
  3870.     BNE     iERROR106
  3871.     MOVE.L  (A3)+,D1
  3872.     cmp.l   #268,d1
  3873.     bmi     iERROR106
  3874.     cmp.l   #270,d1
  3875.     bpl     iERROR106
  3876.     bra     .FINE
  3877. .DEFTB:
  3878.     MOVE.L  #268,D1
  3879.     bra     .FINE
  3880. ;*-*
  3881. ;; Get x bit immediate value
  3882. PASM_GETXBIT:
  3883.     CMP.W   #$F00,(A3)+
  3884.     BNE iERROR30
  3885.     BSR ASM_GRABVALUE
  3886.     TST.L   D0
  3887.     BMI iERROR30
  3888.     MOVEQ   #0,D0
  3889.     MOVEQ   #0,D2
  3890.     MOVE.W  (A5)+,D2
  3891.     BSET    D2,D0
  3892.     CMP.L   D0,D1
  3893.     BPL iERROR31
  3894.     MOVEQ   #31,D0
  3895.     SUB.W   (A5)+,D0
  3896.     LSL.L   D0,D1
  3897.     OR.L    D1,-4(A4)
  3898.     RTs
  3899. ;*-*
  3900. ;; Get & double the GPR.
  3901. PASM_DBLGPR:
  3902.     CMP.W   #47,(A3)+
  3903.     BNE     iERROR100
  3904.     MOVEQ   #0,D0
  3905.     MOVE.W  (A3)+,D0
  3906.     MOVEQ   #$3B,D1
  3907.     SUB.L   D1,D0
  3908.     BMI     iERROR100
  3909.     CMP.W   #$20,D0
  3910.     BPL     iERROR100
  3911.     move.l  d0,d2
  3912.     moveq   #31,d1
  3913.     sub.w  (a5)+,d1
  3914.     lsl.l   d1,d0
  3915.     or.l    d0,-4(a4)
  3916.     moveq   #31,d1
  3917.     sub.w   (a5)+,d1
  3918.     lsl.l   d1,d2
  3919.     or.l    d2,-4(a4)
  3920.     rts
  3921. ;*-*
  3922. ;; Get & split 6 bit immediate value
  3923. PASM_SPLIT6BIT:
  3924.     CMP.W   #$F00,(A3)+
  3925.     BNE iERROR30
  3926.     BSR ASM_GRABVALUE
  3927.     TST.L   D0
  3928.     BMI iERROR30
  3929.     CMP.L   #$40,D1
  3930.     BPL iERROR31
  3931.     MOVE.L  D1,D2
  3932.     LSR.L   #5,D2
  3933.     MOVEQ   #31,D0
  3934.     SUB.W   (A5)+,D0
  3935.     LSL.L   D0,D2
  3936.     or.l    d2,-4(a4)
  3937.     AND.L   #31,D1
  3938.     MOVEQ   #31,d0
  3939.     sub.w   (a5)+,d0
  3940.     lsl.l   d0,d1
  3941.     OR.L    D1,-4(A4)
  3942.     RTs
  3943. ;*-*
  3944. ;; Get label
  3945. PASM_LABEL:
  3946.     CMP.W   #IDENT,(A3)+
  3947.     BNE     iERROR4
  3948.     MOVE.L  (A3)+,A1
  3949.     MOVe.W  10(A1),D0
  3950.     CLR.W   NEWOP
  3951.     BSR     ADDBRANCH
  3952.     RTS
  3953. ;*-*
  3954. ;; Get absolute
  3955. PASM_ABSOLUTE:
  3956.     CMP.W   #VALUE,(A3)+
  3957.     BNE     iERROR73
  3958.     MOVE.L  (A3)+,D0
  3959.     btst    #0,d0
  3960.     bne     iERROR0
  3961.     btst    #1,d0
  3962.     bne     iERROR0
  3963.     cmp.l   #$4000000,d0
  3964.     bpl     iERROR31
  3965.     or.l    d0,-4(a4)
  3966.     rts
  3967. ;*-*
  3968. ;; Get label 16bit
  3969. PASM_LAB16B:
  3970.     CMP.W   #IDENT,(A3)+
  3971.     BNE     iERROR4
  3972.     MOVE.L  (A3)+,A1
  3973.     MOVe.W  10(A1),D0
  3974.     CLR.W   NEWOP
  3975.     BSR     ADDBRANCH
  3976.     RTS
  3977. ;*-*
  3978. ;; Get absolute 16bit
  3979. PASM_ABS16B:
  3980.     CMP.W   #VALUE,(A3)+
  3981.     BNE     iERROR73
  3982.     MOVE.L  (A3)+,D0
  3983.     btst    #0,d0
  3984.     bne     iERROR0
  3985.     btst    #1,d0
  3986.     bne     iERROR0
  3987.     cmp.l   #$10000,d0
  3988.     bpl     iERROR31
  3989.     or.l    d0,-4(a4)
  3990.     rts
  3991. ;*-*
  3992. ;*-*
  3993.  
  3994.