home *** CD-ROM | disk | FTP | other *** search
/ Club Amiga de Montreal - CAM / CAM_CD_1.iso / files / 545b.lha / Fmon_v1.8 / src.lzh / assem.a next >
Encoding:
Text File  |  1991-09-03  |  27.0 KB  |  992 lines

  1.  
  2. **********************************************************
  3. *                                                        *
  4. *    Fmon V1.8     -     assem.a: assembler              *
  5. *                                                        *
  6. *    (c) 1991  Michael Schröder                          *
  7. *                                                        *
  8. *    This program is freely distributable as long as     *
  9. *    the above copyright message is left intact.         *
  10. *                                                        *
  11. **********************************************************
  12.  
  13.  
  14.                xdef _assem
  15.                xdef _col
  16.                xdef _mask1
  17.                xdef _mask2
  18.                xdef _mask3
  19.                xdef _cbed
  20.  
  21.                xref dodis
  22.                xref _gcla
  23.                xref _gcl
  24.                xref _frmval2
  25.                xref _frmval3
  26.  
  27.                csect text,0,,2,2
  28.  
  29.                xref _ps
  30.                xref _cl
  31.                xref _comt
  32.  
  33. _assem         movem.l d2-d7/a2-a6,-(a7)
  34.                subq.l #6,a7
  35. spl            jsr _gcl(pc)
  36.                cmp.b #' ',d0
  37.                bne.s nosp
  38.                addq.w #1,_ps(a4)
  39.                bra.s spl
  40. nosp           lea _cl(a4),a2
  41.                add.w _ps(a4),a2
  42.                clr.l d5
  43.                moveq.l #-1,d7
  44.                move.l a2,a0
  45. la2            addq.l #1,d7
  46.                move.b (a0)+,d0
  47.                beq.s la1
  48.                cmpi.b #' ',d0
  49.                beq.s la1
  50.                cmpi.b #'.',d0
  51.                bne.s la2
  52. la1            moveq.l #-2,d6
  53. loop           addq.l #2,d6
  54.                cmp.w #87*2,d6
  55.                bne.s loopok
  56.                addq.w #1,d5
  57.                add.w d5,_ps(a4)
  58.                bra errret
  59. loopok         lea _comt(a4),a0
  60.                move.w 0(a0,d6.w),d0
  61.                move.w d0,d2
  62.                lsr.w #3,d0
  63.                add.w d0,a0
  64.                andi.w #7,d2
  65.                addq.w #1,d2
  66.                moveq.l #-1,d3
  67.                move.l a2,a1
  68. la4            addq.l #1,d3
  69.                cmp.w d2,d3
  70.                bcc.s la3
  71.                cmp.w d7,d3
  72.                bcc.s la3
  73.                cmpm.b (a0)+,(a1)+
  74.                beq.s la4
  75. la3            cmp.l d3,d5
  76.                bcc.s la5
  77.                move.l d3,d5
  78. la5            cmp.w d3,d2
  79.                bne loop
  80.                cmp.w #80*2,d6 ; SCC
  81.                beq.s spec
  82.                cmp.w #35*2,d6 ; BCC
  83.                beq.s spec
  84.                cmp.w #49*2,d6 ; DBCC
  85.                beq.s spec
  86.                cmp.w d2,d7
  87.                bne loop
  88.                clr.l d3
  89.                bra found
  90. spec           move.b (a1)+,d0
  91.                addq.w #1,d2
  92.                cmp.w d2,d7
  93.                bne.s spec2
  94.                moveq.l #0,d3
  95.                cmp.b #'t',d0
  96.                beq.s spec3
  97.                moveq.l #1,d3
  98.                cmp.b #'f',d0
  99.                beq.s spec3
  100.                bra loop
  101. spec2          addq.w #1,d2
  102.                cmp.w d2,d7
  103.                bne loop
  104.                move.b (a1),d1
  105.                moveq.l #2,d3
  106.                lea _cbed+4(a4),a0
  107. spec6          cmp.b (a0)+,d0
  108.                bne.s spec4
  109.                cmp.b (a0),d1
  110.                beq spec3
  111. spec4          addq.l #1,a0
  112.                addq.l #1,d3
  113.                cmp.w #18,d3
  114.                bne.s spec6
  115.                bra loop
  116. spec3          cmp.w #35*2,d6
  117.                bne.s spec7
  118.                cmp.w #1,d3
  119.                bne.s spec8
  120. spec9          addq.w #2,_ps(a4)
  121.                bra errret
  122. spec7          cmp.w #17,d3
  123.                beq.s spec9
  124.                cmp.w #16,d3
  125.                bne.s spec8
  126.                cmp.w #49*2,d6
  127.                bne.s spec9
  128.                moveq.l #1,d3
  129. spec8          andi.w #15,d3
  130.                lsl.w #8,d3
  131. found          add.w d7,_ps(a4)
  132.                jsr _gcla(pc)
  133.                moveq.l #4,d7
  134.                move.w _ps(a4),4(a7)
  135.                cmp.b #'.',d0
  136.                bne.s nolen
  137.                jsr _gcla(pc)
  138.                clr.l d7
  139.                cmp.b #'b',d0
  140.                beq.s fo1
  141.                moveq.l #1,d7
  142.                cmp.b #'w',d0
  143.                beq.s fo1
  144.                moveq.l #2,d7
  145.                cmp.b #'l',d0
  146.                beq.s fo1
  147.                cmp.w #35*2,d6
  148.                bne errret
  149.                cmp.b #'s',d0
  150.                bne errret
  151.                moveq.l #3,d7
  152. fo1            move.w _ps(a4),4(a7)
  153.                jsr _gcla(pc)
  154. nolen          move.w d6,d2
  155.                move.w d3,d6
  156.                bsr getarg
  157.                move.w _ps(a4),2(a7)
  158.                move.l d4,d3
  159.                move.l d6,d5
  160.                move.l a3,a2
  161.                move.l a6,a5
  162.                tst.b d0
  163.                beq.s onlyone
  164.                cmp.b #',',d0
  165.                bne errret
  166.                jsr _gcla(pc)
  167.                tst.b d0
  168.                beq errret
  169. onlyone        move.l d1,d6
  170.                bsr getarg
  171.                tst.b d0
  172.                bne errret
  173.                or.w d1,d5
  174.                move.w d2,d1
  175.                cmp.w #68*2,d1
  176.                bne.s tra1
  177.                move.w #69*2,d0 ; MOVECCR
  178.                cmp.b #18,d4
  179.                beq.s tra2
  180.                addq.w #2,d0
  181.                cmp.b #19,d4
  182.                beq.s tra2
  183.                addq.w #2,d0
  184.                cmp.b #19,d3
  185.                beq.s tra2
  186.                addq.w #2,d0
  187.                cmp.b #20,d3
  188.                beq.s tra2
  189.                cmp.b #20,d4
  190.                beq.s tra2
  191.                addq.w #2,d0
  192.                cmp.b #1,d4
  193.                bne trans2
  194. tra2           move.w d0,d1
  195.                bra trans2
  196. tra1           cmp.b #1,d4
  197.                bne.s tra3
  198.                moveq.l #8*2,d0
  199.                cmp.w #4*2,d1
  200.                beq.s tra2
  201.                moveq.l #9*2,d0
  202.                cmp.w #5*2,d1
  203.                beq.s tra2
  204.                moveq.l #10*2,d0
  205.                cmp.w #41*2,d1
  206.                beq.s tra2
  207.                bra trans2
  208. tra3           cmp.b #11,d3
  209.                bne.s tra4
  210.                moveq.l #11*2,d0
  211.                cmp.w #4*2,d1
  212.                beq.s tra5
  213.                moveq.l #12*2,d0
  214.                cmp.w #5*2,d1
  215.                beq.s tra5
  216.                moveq.l #13*2,d0
  217.                cmp.w #6*2,d1
  218.                beq.s tra5
  219.                moveq.l #14*2,d0
  220.                cmp.w #7*2,d1
  221.                beq.s tra5
  222.                moveq.l #15*2,d0
  223.                cmp.w #54*2,d1
  224.                beq.s tra5
  225.                moveq.l #16*2,d0
  226.                cmp.w #41*2,d1
  227.                bne.s trans2
  228. tra5           move.w d0,d1
  229.                bra.s trans2
  230. tra4           cmp.w #41*2,d1
  231.                bne.s trans2
  232.                cmp.b #3,d4
  233.                bne.s trans2
  234.                moveq.l #48*2,d1
  235. trans2         cmp.b #4,d7
  236.                bne.s trans3
  237.                lea _mask3(a4),a0
  238.                move.w 0(a0,d1.w),d7
  239.                lsr.l #8,d7
  240.                lsr.l #4,d7
  241. trans3         move.b d7,d0
  242.                lsl.b #6,d0
  243.                or.b d0,d5
  244.                or.b d0,d6
  245.                lea jtab1(pc),a0
  246.                add.w 0(a0,d1.w),a0
  247.                jsr (a0)
  248.                lea _mask1(a4),a0
  249.                move.w 0(a0,d1.w),d0
  250.                or.w d0,d5
  251.                eor.w d0,d5
  252.                lea _mask2(a4),a0
  253.                or.w 0(a0,d1.w),d5
  254.                move.l d5,d2
  255.                movem.l d1-d7/a2/a3,-(a7)
  256.                jsr dodis(pc)
  257.                tst.l d0
  258.                bmi.s posop1
  259.                moveq.l #-1,d0
  260.                cmp.b 27(a7),d7
  261.                beq.s lenoks
  262.                move.w 4+4*9(a7),_ps(a4)
  263.                bra.s dddd
  264. lenoks         lea vtab(a4),a0
  265.                move.b 0(a0,d3.w),d1
  266.                cmp.b 11(a7),d1
  267.                beq.s op1oks
  268. posop1         move.w 2+4*9(a7),_ps(a4)
  269.                bra.s dddd
  270. op1oks         move.b 0(a0,d4.w),d1
  271.                cmp.b 15(a7),d1
  272.                bne.s dddd
  273.                clr.l d0
  274. dddd           movem.l (a7)+,d1-d7/a2/a3
  275.                tst.l d0
  276.                bne.s errret
  277.                move.l 4+6+11*4(a7),a0
  278.                move.l a0,d0
  279.                move.w d2,(a0)+
  280.                cmp.w #74*2,d1 ; MOVEM
  281.                bne.s nomomy
  282.                move.w (a7),(a0)+
  283. nomomy         cmp.w #1,a5
  284.                bne.s poke1
  285.                move.w a2,(a0)+
  286. poke1          cmp.w #2,a5
  287.                bne.s poke2
  288.                move.l a2,(a0)+
  289. poke2          cmp.w #1,a6
  290.                bne.s poke3
  291.                move.w a3,(a0)+
  292. poke3          cmp.w #2,a6
  293.                bne.s poke4
  294.                move.l a3,(a0)+
  295. poke4          exg.l d0,a0
  296.                sub.l a0,d0
  297.                bra.s assret
  298. errret         clr.l d0
  299. assret         addq.w #6,a7
  300.                movem.l (a7)+,d2-d7/a2-a6
  301.                rts
  302.  
  303.  
  304. jtab1          dc.w labcd-jtab1
  305.                dc.w lsbcd-jtab1
  306.                dc.w laddx-jtab1
  307.                dc.w lsubx-jtab1
  308.                dc.w ladd-jtab1
  309.                dc.w lsub-jtab1
  310.                dc.w land-jtab1
  311.                dc.w lor-jtab1
  312.                dc.w ladda-jtab1
  313.                dc.w lsuba-jtab1
  314.                dc.w lcmpa-jtab1
  315.                dc.w laddi-jtab1
  316.                dc.w lsubi-jtab1
  317.                dc.w landi-jtab1
  318.                dc.w lori-jtab1
  319.                dc.w leori-jtab1
  320.                dc.w lcmpi-jtab1
  321.                dc.w laddq-jtab1
  322.                dc.w lsubq-jtab1
  323.                dc.w lasl1-jtab1
  324.                dc.w lasr1-jtab1
  325.                dc.w llsl1-jtab1
  326.                dc.w llsr1-jtab1
  327.                dc.w lrol1-jtab1
  328.                dc.w lror1-jtab1
  329.                dc.w lroxl1-jtab1
  330.                dc.w lroxr1-jtab1
  331.                dc.w lasl1-jtab1
  332.                dc.w lasr1-jtab1
  333.                dc.w llsl1-jtab1
  334.                dc.w llsr1-jtab1
  335.                dc.w lrol1-jtab1
  336.                dc.w lror1-jtab1
  337.                dc.w lroxl1-jtab1
  338.                dc.w lroxr1-jtab1
  339.                dc.w lbcc-jtab1
  340.                dc.w lbset-jtab1
  341.                dc.w lbclr-jtab1
  342.                dc.w lbchg-jtab1
  343.                dc.w lbtst-jtab1
  344.                dc.w lchk-jtab1
  345.                dc.w lcmp-jtab1
  346.                dc.w lclr-jtab1
  347.                dc.w lneg-jtab1
  348.                dc.w lnegx-jtab1
  349.                dc.w lnot-jtab1
  350.                dc.w lswap-jtab1
  351.                dc.w ltst-jtab1
  352.                dc.w lcmpm-jtab1
  353.                dc.w ldbcc-jtab1
  354.                dc.w lmuls-jtab1
  355.                dc.w lmulu-jtab1
  356.                dc.w ldivs-jtab1
  357.                dc.w ldivu-jtab1
  358.                dc.w leor-jtab1
  359.                dc.w lexg-jtab1
  360.                dc.w lext-jtab1
  361.                dc.w lillegal-jtab1
  362.                dc.w lnop-jtab1
  363.                dc.w lreset-jtab1
  364.                dc.w lrte-jtab1
  365.                dc.w lrtr-jtab1
  366.                dc.w lrts-jtab1
  367.                dc.w ltrapv-jtab1
  368.                dc.w ljmp-jtab1
  369.                dc.w ljsr-jtab1
  370.                dc.w llea-jtab1
  371.                dc.w llink-jtab1
  372.                dc.w lmove-jtab1
  373.                dc.w lmoveccr-jtab1
  374.                dc.w lmovezsr-jtab1
  375.                dc.w lmovevsr-jtab1
  376.                dc.w lmoveusp-jtab1
  377.                dc.w lmovea-jtab1
  378.                dc.w lmovem-jtab1
  379.                dc.w lmovep-jtab1
  380.                dc.w lmoveq-jtab1
  381.                dc.w lnbcd-jtab1
  382.                dc.w ltas-jtab1
  383.                dc.w lpea-jtab1
  384.                dc.w lscc-jtab1
  385.                dc.w lstop-jtab1
  386.                dc.w ltrap-jtab1
  387.                dc.w lunlk-jtab1
  388.                dc.w llinea-jtab1
  389.                dc.w llinef-jtab1
  390.                dc.w ldc-jtab1
  391.  
  392. labcd
  393. lsbcd
  394. laddx
  395. lsubx          cmp.b #4,d3
  396.                bne.s jt1
  397.                bset.l #3,d5
  398. jt1            rts
  399. ladd
  400. lsub
  401. land
  402. lor            tst.b d4
  403.                beq.s jt1
  404.                move.l d6,d5
  405.                bset.l #8,d5
  406.                rts
  407. ladda
  408. lsuba
  409. lcmpa          cmp.b #1,d7
  410.                bne.s jt2
  411.                or.w #3<<6,d5
  412.                rts
  413. jt2            or.w #7<<6,d5
  414.                rts
  415. landi
  416. lori
  417. leori          cmp.b #4,d7
  418.                bne.s lmovevsr
  419.                moveq.l #0,d7
  420.                cmp.b #18,d4
  421.                beq.s lmovevsr
  422.                moveq.l #1,d7
  423.                ori.b #$40,d6
  424. laddi
  425. lsubi
  426. lcmpi
  427. leor
  428. lmovevsr       move.l d6,d5
  429.                rts
  430. laddq
  431. lsubq          move.l a2,d5
  432.                beq swerr
  433.                cmp.l #9,d5
  434.                bcc jt5
  435.                lsl.l #8,d5
  436.                lsl.l #1,d5
  437.                move.b d6,d5
  438.                sub.l a5,a5
  439.                rts
  440. lasl1
  441. lasr1
  442. llsl1
  443. llsr1
  444. lrol1
  445. lror1
  446. lroxl1
  447. lroxr1         tst.b d4
  448.                beq.s jt3
  449.                add.w #(27-19)*2,d1
  450.                rts
  451. jt3            tst.b d3
  452.                bne.s jt4
  453.                move.l d6,d5
  454.                bset.l #5,d5
  455.                rts
  456. jt4            move.l a2,d5
  457.                beq.s jt5
  458.                cmp.l #9,d5
  459.                bcc.s jt5
  460.                lsl.l #8,d5
  461.                lsl.l #1,d5
  462.                move.b d6,d5
  463.                and.b #$c7,d5
  464.                sub.l a5,a5
  465.                rts
  466. jt5            move.w 2+4(a7),_ps(a4)
  467.                bra.s goswerr
  468. lbcc           move.l 10+4+11*4(a7),d0
  469.                cmp.b #22,d3
  470.                bne.s jt6
  471.                moveq.l #8,d3
  472.                move.l d0,a2
  473.                cmp.b #4,d7
  474.                bne.s jt6
  475.                moveq.l #2,d7
  476. jt6            cmp.b #8,d3
  477.                bne.s goswerr
  478.                cmp.b #22,d4
  479.                bne.s goswerr
  480.                moveq.l #22,d3
  481.                moveq.l #13,d4
  482.                sub.l d0,a2
  483.                subq.l #2,a2
  484.                clr.b d5
  485.                move.l a2,d0
  486.                beq.s jt7
  487.                cmp.b #2,d7
  488.                beq.s jt7
  489.                ext.w d0
  490.                ext.l d0
  491.                cmp.l d0,a2
  492.                bne.s jt7
  493. jt8            move.b d0,d5
  494.                sub.l a5,a5
  495.                cmp.b #4,d7
  496.                bne.s jt9
  497.                moveq.l #3,d7
  498. jt9            rts
  499. jt7            cmp.b #3,d7
  500.                bne.s jt77
  501.                move.w 4+4(a7),_ps(a4)
  502. goswerr        bra swerr
  503. jt77           move.l a2,d0
  504.                ext.l d0
  505.                cmp.l d0,a2
  506.                bne.s goswerr
  507.                cmp.b #4,d7
  508.                bne.s jt007
  509.                moveq.l #2,d7
  510. jt007          move.w #1,a5
  511.                rts
  512. lbset
  513. lbclr
  514. lbchg
  515. lbtst          cmp.b #4,d7
  516.                bne.s jt10
  517.                clr.l d7
  518.                tst.b d4
  519.                bne.s jt10
  520.                moveq.l #2,d7
  521. jt10           move.w d6,d5
  522.                cmp.b #11,d3
  523.                bne.s jt11
  524.                move.w #1,a5
  525.                andi.w #$003f,d5
  526.                ori.w #$0840,d5
  527.                rts
  528. jt11           bset.l #8,d5
  529. lchk
  530. lcmp
  531. lclr
  532. lneg
  533. lnegx
  534. lnot
  535. lswap
  536. ltst
  537. lcmpm
  538. lmuls
  539. lmulu
  540. ldivs
  541. ldivu
  542. lnbcd
  543. ltas
  544. lmoveccr
  545. lmovezsr
  546. ltrapv
  547. lillegal
  548. lnop
  549. lreset
  550. lrte
  551. lrtr
  552. lrts
  553. ljmp
  554. ljsr
  555. llea
  556. lpea
  557. llink
  558. lstop
  559. lscc
  560. lunlk          rts
  561. ldbcc          move.l 10+4+11*4(a7),d0
  562.                cmp.b #22,d4
  563.                bne.s jt12
  564.                moveq.l #8,d4
  565.                move.l d0,a3
  566. jt12           cmp.b #8,d4
  567.                bne.s goswerr
  568.                moveq.l #13,d4
  569.                sub.l d0,a3
  570.                subq.l #2,a3
  571.                move.l a3,d0
  572.                ext.l d0
  573.                cmp.l d0,a3
  574.                bne.s goswerr
  575.                move.w #1,a6
  576.                rts
  577. lexg           move.l d6,d5
  578.                tst.b d3
  579.                bne.s jt13
  580.                cmp.b #1,d4
  581.                beq.s jt14
  582. jt13           bclr.l #7,d5
  583.                bset.l #6,d5
  584. jt14           rts
  585. lext           add.w #$0040,d5
  586.                rts
  587. lmove
  588. lmovea         move.l d7,d0
  589.                bset.l d0,d0
  590.                lsl.l #8,d0
  591.                ror.b #3,d6
  592.                move.b d6,d0
  593.                lsl.w #3,d0
  594.                lsl.b #2,d0
  595.                lsl.w #1,d0
  596.                andi.w #$003f,d5
  597.                or.w d0,d5
  598.                rts
  599. lmoveusp       cmp.b #20,d4
  600.                bne.s jt15
  601.                bclr.l #3,d5
  602.                rts
  603. jt15           move.l d6,d5
  604.                bset.l #3,d5
  605.                rts
  606. lmovem         cmp.b #16,d3
  607.                beq.s jt16
  608.                bset.l #10,d5
  609.                bra.s jt17
  610. jt16           move.l d6,d5
  611.                bclr.l #10,d5
  612. jt17           bchg.l #6,d5
  613.                cmp.b #4,d4
  614.                bne.s jt18
  615.                move.w 4(a7),d0
  616.                moveq.l #15,d6
  617. jt19           lsr.w #1,d0
  618.                roxl.w #1,d2
  619.                dbf d6,jt19
  620.                move.w d2,4(a7)
  621. jt18           rts
  622. lmovep         tst.b d3
  623.                bne.s jt20
  624.                move.l d6,d5
  625.                add.w #$0040,d5
  626.                rts
  627. jt20           sub.w #$0040,d5
  628.                rts
  629. lmoveq         move.l a2,d0
  630.                moveq.l #-128,d2
  631.                cmp.l d2,d0
  632.                bcc.s jt21
  633.                neg.l d2
  634.                lsl.l #1,d2
  635.                cmp.l d2,d0
  636.                bcc jt5
  637. jt21           move.b d0,d5
  638.                sub.l a5,a5
  639.                rts
  640. ltrap          move.l a2,d5
  641.                cmp.l #16,d5
  642.                bcc.s swerr
  643.                sub.l a5,a5
  644.                rts
  645. llinea
  646. llinef
  647. ldc            cmp.b #8,d3
  648.                beq.s jt22
  649.                cmp.b #7,d3
  650.                bne.s swerr
  651. jt22           move.l a2,d5
  652.                cmp.l #$10000,d5
  653.                bcc.s swerr
  654.                moveq.l #8,d3
  655.                sub.l a5,a5
  656.                rts
  657. swerr          addq.l #4,a7
  658.                bra errret
  659.  
  660.  
  661. getarg         sub.l a6,a6
  662.                sub.l a3,a3
  663.                tst.b d0
  664.                bne.s garg
  665.                clr.l d1
  666.                moveq.l #22,d4
  667.                rts
  668. garg           cmp.b #' ',d0
  669.                bne.s ggarg
  670.                jsr _gcla(pc)
  671.                bra.s garg
  672. ggarg          move.w _ps(a4),-(a7)
  673.                subq.w #1,(a7)
  674.                clr.l -(a7)
  675.                moveq.l #'$',d1
  676.                move.l d1,-(a7)
  677.                move.l a7,-(a7)
  678.                addq.l #4,(a7)
  679.                cmp.b #'#',d0
  680.                bne.s noimm
  681.                moveq.l #11,d4
  682.                jsr _frmval3(pc)
  683.                tst.l d0
  684.                bpl.s frmok
  685. gaerr          add.w #14+4,a7
  686.                bra errret
  687. frmok          move.l 8(a7),a3
  688.                moveq.l #2,d1
  689.                cmp.l d1,d7
  690.                beq.s ga1
  691.                moveq.l #1,d1
  692. ga1            move.l d1,a6
  693.                bra gaok
  694. noimm          moveq.l #0,d4
  695.                cmp.b #'d',d0
  696.                beq.s reg
  697.                cmp.b #'a',d0
  698.                bne noreg
  699.                moveq.l #1,d4
  700. reg            jsr _gcla(pc)
  701.                sub.b #'0',d0
  702.                bcs fr
  703.                cmp.b #8,d0
  704.                bcc fr
  705.                or.l d0,d6
  706.                jsr _gcla(pc)
  707.                cmp.b #'0',d0
  708.                bcc fr
  709.                cmp.w #74*2,d2 ; MOVEM
  710.                bne gaok
  711.                move.l d7,(a7)
  712.                lsl.l #3,d4
  713.                or.b d4,d6
  714.                moveq.l #15,d7
  715.                and.l d7,d6
  716.                clr.l d7
  717.                bset.l d6,d7
  718. mom2           cmp.b #'-',d0
  719.                beq.s min
  720.                cmp.b #'/',d0
  721.                beq.s min
  722.                move.w d7,14+4(a7)
  723.                move.l (a7),d7
  724.                clr.l d6
  725.                moveq.l #16,d4
  726.                bra gaok
  727. min            move.l d0,d1
  728.                jsr _gcla(pc)
  729.                sub.b #'d',d0
  730.                beq.s dat2
  731.                cmp.b #'a'-'d',d0
  732.                bne gaerr
  733.                moveq.l #8,d0
  734. dat2           cmp.b #'-',d1
  735.                bne.s nomin
  736.                eor.b d0,d4
  737.                bne gaerr
  738. nomin          move.l d0,d4
  739.                jsr _gcla(pc)
  740.                sub.b #'0',d0
  741.                bcs gaerr
  742.                cmp.b #8,d0
  743.                bcc gaerr
  744.                or.b d4,d0
  745.                cmp.b #'-',d1
  746.                beq.s bis
  747.                move.l d0,d6
  748. bis            move.l d6,d1
  749.                move.l d0,d6
  750.                cmp.l d0,d1
  751.                bcc.s bis1
  752.                exg.l d0,d1
  753. bis1           bset.l d0,d7
  754.                addq.l #1,d0
  755.                cmp.l d0,d1
  756.                bcc.s bis1
  757.                jsr _gcla(pc)
  758.                bra mom2
  759. noreg          moveq.l #2,d4
  760.                cmp.b #'-',d0
  761.                bne.s noprede
  762.                jsr _gcla(pc)
  763.                cmp.b #'(',d0
  764.                bne fr
  765.                moveq.l #4,d4
  766. noprede        cmp.b #'(',d0
  767.                bne noind
  768.                jsr _gcla(pc)
  769.                cmp.b #'a',d0
  770.                bne fr
  771.                jsr _gcla(pc)
  772.                sub.b #'0',d0
  773.                bcs fr
  774.                cmp.b #8,d0
  775.                bcc fr
  776.                or.l d0,d6
  777.                jsr _gcla(pc)
  778.                cmp.b #')',d0
  779.                bne fr
  780.                jsr _gcla(pc)
  781.                cmp.b #2,d4
  782.                bne.s ind2
  783.                cmp.b #'+',d0
  784. ind2           bne gaok
  785.                moveq.l #3,d4
  786.                bra gaokgc
  787. noind          cmp.b #'c',d0
  788.                bne.s noccr
  789.                jsr _gcla(pc)
  790.                cmp.b #'c',d0
  791.                bne fr
  792.                jsr _gcla(pc)
  793.                cmp.b #'r',d0
  794.                bne fr
  795.                moveq.l #18,d4
  796.                bra gaokgc
  797. noccr          cmp.b #'s',d0
  798.                bne.s nosr
  799.                jsr _gcla(pc)
  800.                cmp.b #'r',d0
  801.                bne gaerr
  802.                moveq.l #19,d4
  803.                bra gaokgc
  804. nosr           cmp.b #'u',d0
  805.                bne.s fr
  806.                jsr _gcla(pc)
  807.                cmp.b #'s',d0
  808.                bne gaerr
  809.                jsr _gcla(pc)
  810.                cmp.b #'p',d0
  811.                bne gaerr
  812.                moveq.l #20,d4
  813.                bra gaokgc
  814. fr             move.w 12(a7),_ps(a4)
  815.                jsr _frmval3(pc)
  816.                move.l 8(a7),a3
  817.                cmp.b #'(',d0
  818.                bne abso
  819.                move.l a3,d0
  820.                ext.l d0
  821.                cmp.l d0,a3
  822.                beq.s frok1
  823.                subq.w #1,_ps(a4)
  824.                bra gaerr
  825. frok1          jsr _gcla(pc)
  826.                cmp.b #'a',d0
  827.                bne.s noad
  828.                jsr _gcla(pc)
  829.                sub.b #'0',d0
  830.                bcs gaerr
  831.                cmp.b #8,d0
  832.                bcc gaerr
  833.                or.l d0,d6
  834.                jsr _gcla(pc)
  835.                moveq.l #5,d4
  836.                bra frok2
  837. noad           cmp.b #'p',d0
  838.                bne gaerr
  839.                jsr _gcla(pc)
  840.                cmp.b #'c',d0
  841.                bne gaerr
  842.                jsr _gcla(pc)
  843.                moveq.l #9,d4
  844. frok2          cmp.b #',',d0
  845.                bne frok3
  846.                addq.l #1,d4
  847.                exg.l d7,a3
  848.                move.l d7,d0
  849.                ext.w d0
  850.                ext.l d0
  851.                cmp.l d0,d7
  852.                bne gaerr
  853.                clr.l d7
  854.                move.b d0,d7
  855.                jsr _gcla(pc)
  856.                cmp.b #'d',d0
  857.                beq.s pud
  858.                cmp.b #'a',d0
  859.                bne gaerr
  860.                bset.l #15,d7
  861. pud            jsr _gcla(pc)
  862.                sub.b #'0',d0
  863.                bcs gaerr
  864.                cmp.b #8,d0
  865.                bcc gaerr
  866.                lsl.w #8,d0
  867.                lsl.w #4,d0
  868.                or.w d0,d7
  869.                jsr _gcla(pc)
  870.                cmp.b #'.',d0
  871.                bne.s frok4
  872.                jsr _gcla(pc)
  873.                cmp.b #'w',d0
  874.                beq.s nix
  875.                cmp.b #'l',d0
  876.                bne gaerr
  877.                bset.l #11,d7
  878. nix            jsr _gcla(pc)
  879. frok4          exg.l d7,a3
  880. frok3          cmp.b #')',d0
  881.                bne gaerr
  882.                jsr _gcla(pc)
  883.                move.w #1,a6
  884.                bra gaok
  885. abso           move.w 12(a7),_ps(a4)
  886.                jsr _frmval2(pc)
  887.                tst.l d0
  888.                bmi gaerr
  889.                move.l 8(a7),a3
  890.                moveq.l #8,d4
  891.                move.w #2,a6
  892.                cmp.w #35*2,d6 ; Bcc
  893.                beq gaok
  894.                cmp.w #49*2,d6 ; DBcc
  895.                beq gaok
  896.                move.l a3,d1
  897.                ext.l d1
  898.                cmp.l d1,a3
  899.                bne.s nosh
  900.                moveq.l #7,d4
  901.                subq.l #1,a6
  902. nosh           cmp.b #'.',d0
  903.                bne.s gaok
  904.                jsr _gcla(pc)
  905.                cmp.b #'l',d0
  906.                bne.s sho
  907.                moveq.l #8,d4
  908.                move.w #2,a6
  909.                bra.s gaokgc
  910. sho            cmp.b #'w',d0
  911.                bne gaerr
  912.                cmp.b #7,d4
  913.                bne gaerr
  914. gaokgc         jsr _gcla(pc)
  915. gaok           move.l d6,-(a7)
  916.                move.l d4,d1
  917.                cmp.b #8,d4
  918.                bcc.s spe
  919.                lsl.w #3,d1
  920.                or.w d1,d6
  921.                bra.s garr
  922. spe            clr.b d6
  923.                sub.w #7,d1
  924.                cmp.b #12,d4
  925.                bcs.s spe3
  926.                cmp.b #18,d4
  927.                beq.s spe2
  928.                cmp.b #19,d4
  929.                bne.s garr
  930. spe2           moveq.l #4,d1
  931. spe3           ori.b #$38,d1
  932.                or.b d1,d6
  933. garr           move.l (a7)+,d1
  934.                and.l #7,d1
  935.                lsl.w #8,d1
  936.                lsl.w #1,d1
  937. garrl          cmp.b #' ',d0
  938.                bne.s garrr
  939.                jsr _gcla(pc)
  940.                bra.s garrl
  941. garrr          add.w #14,a7
  942.                rts
  943.  
  944.  
  945.                csect data,1
  946.  
  947. _mask1         dc.w $f1f0,$f1f0,$f130,$f130,$f000,$f000,$f000,$f000
  948.                dc.w $f0c0,$f0c0,$f0c0,$ff00,$ff00,$ff00,$ff00,$ff00
  949.                dc.w $ff00,$f100,$f100,$f118,$f118,$f118,$f118,$f118
  950.                dc.w $f118,$f118,$f118,$ffc0,$ffc0,$ffc0,$ffc0,$ffc0
  951.                dc.w $ffc0,$ffc0,$ffc0,$f000,$f0c0,$f0c0,$f0c0,$f0c0
  952.                dc.w $f1c0,$f100,$ff00,$ff00,$ff00,$ff00,$fff8,$ff00
  953.                dc.w $f138,$f0f8,$f1c0,$f1c0,$f1c0,$f1c0,$f100,$f130
  954.                dc.w $ff38,$ffff,$ffff,$ffff,$ffff,$ffff,$ffff,$ffff
  955.                dc.w $ffc0,$ffc0,$f1c0,$fff8,$c000,$ffc0,$ffc0,$ffc0
  956.                dc.w $fff0,$e1c0,$fb80,$f138,$f100,$ffc0,$ffc0,$ffc0
  957.                dc.w $f0c0,$ffff,$fff0,$fff8,$f000,$f000,$0000
  958.  
  959. _mask2         dc.w $c100,$8100,$d100,$9100,$d000,$9000,$c000,$8000
  960.                dc.w $d0c0,$90c0,$b0c0,$0600,$0400,$0200,$0000,$0a00
  961.                dc.w $0c00,$5000,$5100,$e100,$e000,$e108,$e008,$e118
  962.                dc.w $e018,$e110,$e010,$e1c0,$e0c0,$e3c0,$e2c0,$e7c0
  963.                dc.w $e6c0,$e5c0,$e4c0,$6000,$00c0,$0080,$0040,$0000
  964.                dc.w $4180,$b000,$4200,$4400,$4000,$4600,$4840,$4a00
  965.                dc.w $b108,$50c8,$c1c0,$c0c0,$81c0,$80c0,$b100,$c100
  966.                dc.w $4800,$4afc,$4e71,$4e70,$4e73,$4e77,$4e75,$4e76
  967.                dc.w $4ec0,$4e80,$41c0,$4e50,$0000,$44c0,$46c0,$40c0
  968.                dc.w $4e60,$2040,$4880,$0108,$7000,$4800,$4ac0,$4840
  969.                dc.w $50c0,$4e72,$4e40,$4e58,$a000,$f000,$0000
  970.  
  971. _mask3         dc.w $0fff,$0fff,$1fff,$1fff,$1fff,$1fff,$1ffd,$1ffd
  972.                dc.w $1fff,$1fff,$1fff,$11fd,$11fd,$49fd,$49fd,$49fd
  973.                dc.w $11fd,$11ff,$11ff,$1fff,$1fff,$1fff,$1fff,$1fff
  974.                dc.w $1fff,$1fff,$1fff,$11fc,$11fc,$11fc,$11fc,$11fc
  975.                dc.w $11fc,$11fc,$11fc,$4fff,$41fd,$41fd,$41fd,$4ffd
  976.                dc.w $1ffd,$1fff,$11fd,$11fd,$11fd,$11fd,$1fff,$11fd
  977.                dc.w $1fff,$1fff,$1ffd,$1ffd,$1ffd,$1ffd,$11fd,$2fff
  978.                dc.w $1fff,$4fff,$4fff,$4fff,$4fff,$4fff,$4fff,$4fff
  979.                dc.w $47e4,$47e4,$47e4,$4fff,$1fff,$1ffd,$1ffd,$11fd
  980.                dc.w $2fff,$1fff,$17fc,$1fff,$2fff,$01fd,$01fd,$47e4
  981.                dc.w $01fd,$4fff,$4fff,$4fff,$4fff,$4fff,$4fff
  982.  
  983. vtab           dc.b 0,1,2,3,4,5,6,7,8,9,10,11,11,13
  984.                dc.b 11,11,16,8,18,19,20,21,22,23
  985.  
  986. _cbed          dc.b 't',0,'f',0,'hilscccsneeqvcvsplmigeltgtlerasr'
  987. _col           dc.b 'bwls'
  988.  
  989.  
  990.                end
  991.  
  992.