home *** CD-ROM | disk | FTP | other *** search
/ M.u.C.S. Disc 2000 / MUCS2000.iso / falcon / modules / whipong / source / macros.s next >
Text File  |  1996-08-18  |  24KB  |  1,721 lines

  1.    r_1b    =    1
  2. r_2b    =    2
  3. r_4b    =    4
  4. r_8b    =    8
  5. r_true    =    16
  6. x320    =    320
  7. x640    =    640
  8. y200    =    200    
  9. y400    =    400
  10.  
  11. super    macro
  12.  
  13.     clr.l    -(sp)
  14.     move.w    #$20,-(sp)
  15.     trap    #1
  16.     addq.l    #6,sp
  17.  
  18.     endm
  19.  
  20. user    macro
  21.  
  22.     move.l    \1,-(sp)
  23.     move.w    #$20,-(sp)
  24.     trap    #1
  25.     addq.l    #6,sp
  26.  
  27.     endm
  28.     
  29. lågres    macro
  30.     
  31.     move.w    #0,-(sp)
  32.     move.l    #-1,-(sp)
  33.     move.l    #-1,-(sp)
  34.     move.w    #5,-(sp)
  35.     trap    #14
  36.     lea    12(sp),sp
  37.     
  38.     endm
  39.     
  40. medres    macro
  41.     
  42.     move.w    #1,-(sp)
  43.     move.l    #-1,-(sp)
  44.     move.l    #-1,-(sp)
  45.     move.w    #5,-(sp)
  46.     trap    #14
  47.     lea    12(sp),sp
  48.     
  49.     endm
  50.  
  51. slut    macro
  52.  
  53.     move.w    #\1,$ffff8240.w
  54.     move.w    #\2,$ffff8246.w
  55.     move.b    #7,$484.w
  56.     bset    #1,$ffff820a.w
  57.  
  58.     medres
  59.  
  60.     clr.w    -(sp)
  61.     trap    #1
  62.     
  63.     endm
  64.     
  65. vsync    macro
  66.  
  67.     clr.w    $468.w
  68.     tst.w    $468.w
  69.     dc.w    $67fa
  70.     
  71.     endm
  72.     
  73. savemfp    macro
  74.     
  75.     move.l    a1,-(sp)
  76.     
  77.     lea    \1,a1
  78.     
  79.     move.l    $70.w,(a1)+
  80.     move.l    $120.w,(a1)+
  81.     move.l    $68.w,(a1)+
  82.     move.b    $fffffa01.w,(a1)+
  83.     move.b    $fffffa03.w,(a1)+
  84.     move.b    $fffffa05.w,(a1)+
  85.     move.b    $fffffa07.w,(a1)+
  86.     move.b    $fffffa09.w,(a1)+
  87.     move.b    $fffffa0b.w,(a1)+
  88.     move.b    $fffffa0d.w,(a1)+
  89.     move.b    $fffffa0f.w,(a1)+
  90.     move.b    $fffffa11.w,(a1)+
  91.     move.b    $fffffa13.w,(a1)+
  92.     move.b    $fffffa15.w,(a1)+
  93.     move.b    $fffffa17.w,(a1)+
  94.     move.b    $fffffa19.w,(a1)+
  95.     move.b    $fffffa1b.w,(a1)+
  96.     move.b    $fffffa1d.w,(a1)+
  97.     move.b    $fffffa1f.w,(a1)+
  98.     move.b    $fffffa21.w,(a1)+
  99.     move.b    $fffffa23.w,(a1)+
  100.     move.b    $fffffa25.w,(a1)+
  101.     move.b    $fffffa27.w,(a1)+
  102.     move.b    $fffffa29.w,(a1)+
  103.     move.b    $fffffa2b.w,(a1)+
  104.     move.b    $fffffa2d.w,(a1)+
  105.     move.b    $fffffa2f.w,(a1)+
  106.  
  107.     move.l    (sp)+,a1
  108.  
  109.     endm
  110.     
  111. loadmfp    macro
  112.     
  113.     move.l    a1,-(sp)
  114.     
  115.     lea    \1,a1
  116.     
  117.     move.l    (a1)+,$70.w
  118.     move.l    (a1)+,$120.w
  119.     move.l    (a1)+,$68.w
  120.     move.b    (a1)+,$fffffa01.w
  121.     move.b    (a1)+,$fffffa03.w
  122.     move.b    (a1)+,$fffffa05.w
  123.     move.b    (a1)+,$fffffa07.w
  124.     move.b    (a1)+,$fffffa09.w
  125.     move.b    (a1)+,$fffffa0b.w
  126.     move.b    (a1)+,$fffffa0d.w
  127.     move.b    (a1)+,$fffffa0f.w
  128.     move.b    (a1)+,$fffffa11.w
  129.     move.b    (a1)+,$fffffa13.w
  130.     move.b    (a1)+,$fffffa15.w
  131.     move.b    (a1)+,$fffffa17.w
  132.     move.b    (a1)+,$fffffa19.w
  133.     move.b    (a1)+,$fffffa1b.w
  134.     move.b    (a1)+,$fffffa1d.w
  135.     move.b    (a1)+,$fffffa1f.w
  136.     move.b    (a1)+,$fffffa21.w
  137.     move.b    (a1)+,$fffffa23.w
  138.     move.b    (a1)+,$fffffa25.w
  139.     move.b    (a1)+,$fffffa27.w
  140.     move.b    (a1)+,$fffffa29.w
  141.     move.b    (a1)+,$fffffa2b.w
  142.     move.b    (a1)+,$fffffa2d.w
  143.     move.b    (a1)+,$fffffa2f.w
  144.  
  145.     move.l    (sp)+,a1
  146.  
  147.     endm
  148.  
  149. clickoff    macro
  150.  
  151.     clr.b    $484.w
  152.     
  153.     endm
  154.     
  155. clickon    macro
  156.  
  157.     move.b    #7,$484.w
  158.     
  159.     endm
  160.     
  161. slump    macro
  162.  
  163.     movem.l    a0-a6,-(sp)
  164.  
  165.     move.w    #17,-(sp)
  166.     trap    #14
  167.     addq.l    #2,sp
  168.     
  169.     movem.l    (sp)+,a0-a6
  170.     
  171.     endm
  172.     
  173. print    macro
  174.     
  175.     movem.l    d0-3/a0-3,-(sp)
  176.     move.l    \1,a3
  177.     moveq    #0,d3
  178.  
  179. om_igen\@
  180.     move.b    (a3)+,d3
  181.     move.w    d3,-(sp)
  182.     move.w    #2,-(sp)
  183.     move.w    #3,-(sp)
  184.     trap    #13
  185.     addq.l    #6,sp
  186.  
  187.     tst.b    (a3)
  188.     bne    om_igen\@
  189.     movem.l    (sp)+,d0-3/a0-3
  190.     
  191.     endm
  192.     
  193. synclock    macro
  194.  
  195.     move.l    d0,-(sp)
  196.     
  197.     move.b    $ffff8209.w,d0
  198.     dc.w    $67fa
  199.     not    d0
  200.     lsl    d0,d0
  201.  
  202.     move.l    (sp)+,d0
  203.     
  204.     endm
  205.  
  206. pvsync    macro
  207.  
  208.     move.w    #\1,$ffff8240.w
  209.  
  210.     clr.w    $468.w
  211.     tst.w    $468.w
  212.     dc.w    $67fa
  213.     
  214.     move.w    #\2,$ffff8240.w
  215.     
  216.     endm
  217.  
  218. pvsl    macro
  219.  
  220.     move.w    #\1,$ffff8240.w
  221.  
  222.     clr.w    $468.w
  223.     tst.w    $468.w
  224.     dc.w    $67fa
  225.  
  226.     move.l    d0,-(sp)
  227.     
  228.     move.b    $ffff8209.w,d0
  229.     dc.w    $67fa
  230.     not    d0
  231.     lsl    d0,d0
  232.  
  233.     dcb    \3/4,$4e71
  234.  
  235.     move.l    (sp)+,d0
  236.     
  237.     move.w    #\2,$ffff8240.w
  238.     
  239.     endm
  240.     
  241. spslut    macro
  242.     clr.w    -(sp)
  243.     move.l    \1,-(sp)
  244.     move.w    #$31,-(sp)
  245.     trap    #1
  246.     endm
  247.         
  248. mshrink    macro
  249.     move.l    4(sp),a5
  250.     move.l    $c(a5),d0
  251.     add.l    $14(a5),d0
  252.     add.l    $1c(a5),d0
  253.     add.l    #$1000,d0
  254.     add.l    #$100,d0
  255.     move.l    a5,d1
  256.     add.l    d0,d1
  257.     and.l    #-2,d1
  258.     move.l    d1,sp
  259.     move.l    d0,-(sp)
  260.     move.l    a5,-(sp)
  261.     move.w    d0,-(sp)
  262.     move.w    #$4a,-(sp)
  263.     trap    #1
  264.     lea    12(sp),sp
  265.     endm
  266.     
  267. lvsync    macro
  268.     clr.w    $468.w
  269. .wl\@    cmp.w    #\1,$468.w
  270.     bne.s    .wl\@
  271.     endm
  272.     
  273. aeslist    macro
  274. aes_pb    dc.l    control,global,int_in,int_out,addr_in,addr_out
  275. global    ds.w    7
  276.     dc.l    0,0,0,0
  277. control    ds.w    12
  278. int_in    ds.w    30
  279. int_out    ds.w    45
  280. addr_in    ds.l    2
  281. addr_out    ds.l    1    
  282.     endm
  283.  
  284. vdilist    macro
  285. vdi_pb    dc.l    contrl,intin,ptsin,intout,ptsout
  286. contrl    ds.w    12
  287. intin    ds.w    30
  288. ptstin    ds.w    30
  289. intout    ds.w    45
  290. ptstout    ds.w    12
  291.     endm
  292.     
  293. opta    macro
  294.     
  295.     opt    o+
  296.     opt    a+
  297.     opt    ow-
  298.     
  299.     endm
  300.  
  301. mulu_tab    macro    
  302.  
  303. tmp    set    0
  304.     rept    \2
  305.     dc.\0    tmp*\1
  306. tmp    set    tmp+1
  307.     endr
  308.     endm
  309.  
  310. mulu_tab_l    macro    
  311.  
  312. tmp    set    0
  313.     rept    \2
  314.     dc.l    tmp*\1
  315. tmp    set    tmp+1
  316.     endr
  317.     endm
  318.  
  319. dots_tab    macro
  320. dots
  321. tmp    set    $8000
  322.     rept    16
  323.     dc.w    tmp
  324. tmp    set    tmp/2
  325.     endr
  326.     endm
  327.  
  328. plot    macro
  329.     movem.l    a2-a5/d0-d2,-(sp)
  330.     lea    mulu,a2
  331.     move.w    \2,d0
  332.     move.w    \1,d1
  333.     move.l    \3,a5
  334.     add.w    d0,d0
  335.     move.w    (a2,d0),d0        
  336.     add.w    d0,a5
  337.     move.w    d1,d2
  338.     and.w    #$fff0,d1
  339.     asr.w    #1,d1
  340.     add.w    d1,a5
  341.     and.w    #$f,d2
  342.     lea    dots,a4
  343.     add.w    d2,d2
  344.     move.w    (a4,d2),d2
  345.     or.w    d2,\4*2(a5)
  346.     movem.l    (sp)+,a2-a5/d0-d2
  347.     endm
  348.  
  349. xplot    macro
  350.     movem.l    a2-a5/d0-d2,-(sp)
  351.     lea    mulu,a2
  352.     move.w    \2,d0
  353.     move.w    \1,d1
  354.     move.l    \3,a5
  355.     add.w    d0,d0
  356.     move.w    (a2,d0),d0        
  357.     add.w    d0,a5
  358.     move.w    d1,d2
  359.     and.w    #$fff0,d1
  360.     asr.w    #1,d1
  361.     add.w    d1,a5
  362.     and.w    #$f,d2
  363.     lea    dots,a4
  364.     add.w    d2,d2
  365.     move.w    (a4,d2),d2
  366.     eor.w    d2,\4*2(a5)
  367.     movem.l    (sp)+,a2-a5/d0-d2
  368.     endm
  369.  
  370. eplot    macro
  371.     movem.l    a2-a5/d0-d2,-(sp)
  372.     lea    mulu,a2
  373.     move.w    \2,d0
  374.     move.w    \1,d1
  375.     move.l    \3,a5
  376.     add.w    d0,d0
  377.     move.w    (a2,d0),d0        
  378.     add.w    d0,a5
  379.     move.w    d1,d2
  380.     and.w    #$fff0,d1
  381.     asr.w    #1,d1
  382.     add.w    d1,a5
  383.     and.w    #$f,d2
  384.     lea    dots,a4
  385.     add.w    d2,d2
  386.     move.w    (a4,d2),d2
  387.     not    d2
  388.     and.w    d2,\4*2(a5)
  389.     movem.l    (sp)+,a2-a5/d0-d2
  390.     endm
  391.  
  392. sluta    macro
  393.     medres
  394.     clr.w    -(sp)
  395.     trap    #1
  396.     endm
  397.     
  398. picmove    macro
  399.     movem.l    a0-a1/d0,-(sp)
  400.     move.l    \1,a0
  401.     move.l    \2,a1
  402.     move.w    #7999,d0
  403. loop\@    move.l    (a0)+,(a1)+
  404.     dbra    d0,loop\@
  405.     movem.l    (sp)+,a0-a1/d0
  406.     endm
  407.  
  408. fastcopy    macro
  409.     movem.l    a0-a1/d0,-(sp)
  410.     move.l    \1,a0
  411.     move.l    \2,a1
  412.     move.w    #\3/4-1,d0
  413. loop\@    move.l    (a0)+,(a1)+
  414.     dbra    d0,loop\@
  415.     ifne    \3-(\3/4)*4=0
  416.     moveq    #\3-(\3/4)*4-1,d0
  417. loop2\@    move.b    (a0)+,(a1)+
  418.     dbra    d0,loop2\@
  419.     endc
  420.     movem.l    (sp)+,a0-a1/d0
  421.     endm
  422.     
  423. copy    macro
  424.     movem.l    a0-a1/d0,-(sp)
  425.     move.l    \1,a0
  426.     move.l    \2,a1
  427.     move.l    #\3,d0
  428. loop\@    move.b    (a0)+,(a1)+
  429.     subq.l    #1,d0
  430.     bne.s    loop\@
  431.     movem.l    (sp)+,a0-a1/d0
  432.     endm
  433.     
  434.     
  435. alert    macro
  436.     move.w    #52,control
  437.     move.w    #1,control+2
  438.     move.w    #1,control+4
  439.     move.w    #1,control+6
  440.     move.w    #0,control+8
  441.     move.w    #\4,int_in
  442.     move.l    #set_alert\@,addr_in
  443.     move.l    #aes_pb,d1
  444.     move.w    #200,d0
  445.     trap    #2
  446.     move.w    int_out,d0
  447.     bra.w    klart\@
  448.     
  449. set_alert\@    dc.b    '[\1]'
  450.     dc.b    '[\2]'
  451.     dc.b    '[\3]'
  452.     dc.b    0
  453.     even
  454. klart\@
  455.     endm
  456.     
  457. fileselect    macro
  458.     movem.l    d1/d7/a0-1,-(sp)
  459.     move.w    #90,control
  460.     move.w    #0,control+2
  461.     move.w    #2,control+4
  462.     move.w    #2,control+6
  463.     move.w    #0,control+8
  464.     move.l    #set_file1\@,addr_in
  465.     move.l    #set_file2\@,addr_in+4
  466.     move.l    #aes_pb,d1
  467.     move.w    #200,d0
  468.     trap    #2
  469.     move.w    int_out+2,d0
  470.     beq.w    klart\@
  471.     move.l    \3,a0
  472.     lea    set_file1\@,a1
  473.     move.w    #200,d7
  474. loop\@    move.b    (a1)+,(a0)+
  475.     cmp.b    #'*',(a1)
  476.     dbeq    d7,loop\@
  477.     lea    set_file2\@,a1
  478.     move.w    #200,d7
  479. loop2\@    move.b    (a1)+,(a0)+
  480.     dbeq    d7,loop2\@
  481.     bra.w    klart\@
  482.  
  483. set_file1\@    dc.b    '\1',0
  484.     dcb.l    50,0
  485. set_file2\@    dc.b    '\2',0
  486.     dcb.l    50,0
  487.     even
  488. klart\@    
  489.     movem.l    (sp)+,d1/d7/a0-1
  490.     endm
  491.     
  492. rsc_load    macro
  493.     move.w    #110,control
  494.     move.w    #0,control+2
  495.     move.w    #1,control+4
  496.     move.w    #1,control+6
  497.     move.w    #0,control+8
  498.     move.l    #rsc_name\@,addr_in
  499.     move.l    #aes_pb,d1
  500.     move.w    #200,d0
  501.     trap    #2
  502.     move.w    int_out,d0
  503.     move.l    global+10,a0
  504.     bra.w    klart\@
  505.  
  506. rsc_name\@    dc.b    '\1',0
  507.     even
  508. klart\@    
  509.     endm
  510.  
  511. char    macro
  512.     move.w    \1,-(sp)
  513.     move.w    #2,-(sp)
  514.     move.w    #3,-(sp)
  515.     trap    #13
  516.     addq.l    #6,sp
  517.     endm
  518.  
  519. pr_esc    macro
  520.     move.w    #$1b,-(sp)
  521.     move.w    #2,-(sp)
  522.     move.w    #3,-(sp)
  523.     trap    #13
  524.     move.w    #'\1',-(sp)
  525.     move.w    #2,-(sp)
  526.     move.w    #3,-(sp)
  527.     trap    #13
  528.     lea    12(sp),sp
  529.     endm
  530.  
  531. wait_key    macro
  532.     move.w    #8,-(sp)
  533.     trap    #1
  534.     addq.l    #2,sp
  535.     endm
  536.     
  537. wait_keys    macro
  538. ch_l\@
  539.     cmp.b    #\1,$fffffc02.w
  540.     bne.s    ch_l\@
  541.     endm
  542.  
  543. hexdecasc    macro
  544.  
  545.     movem.l    a0/d0-d4,-(sp)
  546.  
  547.     move.l    \1,a0
  548.     add.l    #6,a0
  549.     moveq    #0,d0    
  550.     move.w    \2,d0
  551.     move.w    d0,d1
  552.     moveq    #2,d4
  553. loop\@
  554.     divu    #100,d1
  555.     swap    d1
  556.     move.w    d1,d0
  557.     lsr.l    #8,d1
  558.     lsr.l    #8,d1
  559.     move.l    d0,d2
  560.     divu    #10,d2
  561.     move.w    d2,d3
  562.     swap    d2
  563.     move.w    d2,d0
  564.     add.w    #$30,d0
  565.     add.w    #$30,d3
  566.     move.b    d0,-(a0)
  567.     move.b    d3,-(a0)
  568.     dbra    d4,loop\@
  569.     
  570.     movem.l    (sp)+,a0/d0-d4
  571.     
  572.     endm
  573.  
  574. color    macro
  575.     ifne    \2
  576.     move.w    #\2,$ffff8240+(\1*2).w
  577.     else
  578.     clr.w    $ffff8240+(\1*2).w
  579.     endc
  580.     endm
  581.  
  582. get_palette    macro
  583.  
  584.     movem.l    d0-7/a0-1,-(sp)
  585.     move.l    \1,a0
  586.     lea    $ffff8240.w,a1
  587.     movem.l    (a0)+,d0-7
  588.     movem.l    d0-7,(a1)
  589.     movem.l    (sp)+,d0-7/a0-1
  590.     endm
  591.     
  592. mem_reserve    macro
  593.     movem.l    d1/a0-1,-(sp)
  594.     move.l    \1,-(sp)
  595.     move.w    #72,-(sp)
  596.     trap    #1
  597.     addq.l    #6,sp
  598.     movem.l    (sp)+,d1/a0-1
  599.     endm
  600.  
  601. pause    macro
  602.     move.l    d0,-(sp)
  603.     move.w    #\1,d0
  604. loop\@
  605.     dbra    d0,loop\@
  606.     move.l    (sp)+,d0
  607.     endm    
  608.     
  609. slåg    macro
  610.     clr.w    -(sp)
  611.     move.l    \1,-(sp)
  612.     move.l    \2,-(sp)
  613.     move.w    #5,-(sp)
  614.     trap    #14
  615.     lea    $c(sp),sp
  616.     endm
  617.  
  618. smed    macro
  619.     move.w    #1,-(sp)
  620.     move.l    \1,-(sp)
  621.     move.l    \2,-(sp)
  622.     move.w    #5,-(sp)
  623.     trap    #14
  624.     lea    $c(sp),sp
  625.     endm
  626.  
  627. point    macro
  628.  
  629.     movem.l    a2-a5/d1-d3,-(sp)
  630.     
  631.     lea    mulu,a2
  632.     move.w    \2,d0
  633.     move.w    \1,d1
  634.     move.l    \3,a5
  635.     add.w    d0,d0
  636.     move.w    (a2,d0),d0        
  637.     add.w    d0,a5
  638.     move.w    d1,d2
  639.     and.w    #$fff0,d1
  640.     asr.w    #1,d1
  641.     add.w    d1,a5
  642.     and.w    #$f,d2
  643.     eor.w    #15,d2
  644.     
  645. *    lea    dots,a4
  646. *    add.w    d2,d2
  647. *    move.w    (a4,d2),d2
  648.  
  649.     move.l    (a5),d1
  650.     move.l    4(a5),d3
  651.     lsr.l    d2,d1
  652.     lsr.l    d2,d3
  653.     moveq    #0,d0
  654.  
  655.     swap    d1
  656.     and.w    #1,d1
  657.     beq    not1\@
  658.     addq.w    #1,d0
  659. not1\@
  660.     swap    d1
  661.     and.w    #1,d1
  662.     beq    not2\@
  663.     addq.w    #2,d0
  664. not2\@
  665.     swap    d3
  666.     and.w    #1,d3
  667.     beq    not3\@
  668.     addq.w    #4,d0
  669. not3\@
  670.     swap    d3
  671.     and.w    #1,d3
  672.     beq    not4\@
  673.     addq.w    #8,d0
  674. not4\@
  675.     movem.l    (sp)+,a2-a5/d1-d3
  676.     
  677.     endm    
  678.     
  679. scrn    macro
  680.  
  681. scrn    
  682. tmp    set    0
  683.     
  684.     rept    20
  685.     
  686.     dc.w    tmp,$8000,tmp,$4000,tmp,$2000,tmp,$1000
  687.     dc.w    tmp,$800,tmp,$400,tmp,$200,tmp,$100
  688.     dc.w    tmp,$80,tmp,$40,tmp,$20,tmp,$10
  689.     dc.w    tmp,$8,tmp,$4,tmp,$2,tmp,$1
  690.     
  691. tmp    set    tmp+8
  692.     
  693.     endr
  694.  
  695.     endm
  696.     
  697. pset    macro
  698.     movem.l    a2-5/d0-4,-(sp)
  699.     move.w    \4,d3
  700.     ext.l    d3
  701.     move.w    \2,d0
  702.     move.w    \1,d1
  703.     move.l    \3,a5
  704.     lea    mulu,a2
  705.     add.w    d0,d0
  706.     move.w    (a2,d0),d0        
  707.     add.w    d0,a5
  708.     move.w    d1,d2
  709.     and.w    #$fff0,d1
  710.     asr.w    #1,d1
  711.     add.w    d1,a5
  712.     and.w    #$f,d2
  713.     lea    dots,a4
  714.     add.w    d2,d2
  715.     move.w    (a4,d2),d2
  716.     move.w    d2,d4
  717.     not.w    d4
  718.     and.w    d4,(a5)
  719.     and.w    d4,2(a5)
  720.     and.w    d4,4(a5)
  721.     and.w    d4,6(a5)
  722.     btst.l    #0,d3
  723.     beq.s    e0\@
  724.     or.w    d2,(a5)
  725. e0\@    btst.l    #1,d3
  726.     beq.s    e1\@
  727.     or.w    d2,2(a5)
  728. e1\@    btst.l    #2,d3
  729.     beq.s    e2\@
  730.     or.w    d2,4(a5)
  731. e2\@    btst.l    #3,d3
  732.     beq.s    e3\@
  733.     or.w    d2,6(a5)
  734. e3\@    movem.l    (sp)+,a2-5/d0-4
  735.     endm
  736.  
  737. ppset    macro
  738.  
  739.     movem.l    a0-3/d0-7,-(sp)
  740.     
  741.     move.w    \2,d0
  742.     move.w    \1,d1
  743.     move.l    \3,a1
  744.     lea    mulu,a0
  745.     add.w    d0,d0
  746.     move.w    (a0,d0),d0        
  747.     add.w    d0,a1
  748.     move.w    d1,d2
  749.     and.w    #$fff0,d1
  750.     asr.w    #1,d1
  751.     add.w    d1,a1
  752.     and.w    #$f,d2
  753.     eor.w    #15,d2
  754.     move.l    (a1),d1
  755.     move.l    4(a1),d3
  756.     lsr.l    d2,d1
  757.     lsr.l    d2,d3
  758.     
  759.     move.w    \5,d4
  760.     move.w    \4,d5
  761.     move.l    \6,a2
  762.     add.w    d4,d4
  763.     move.w    (a0,d4),d4        
  764.     add.w    d4,a2
  765.     move.w    d5,d6
  766.     and.w    #$fff0,d5
  767.     asr.w    #1,d5
  768.     add.w    d5,a2
  769.     and.w    #$f,d6
  770.     lea    dots,a3
  771.     add.w    d6,d6
  772.     move.w    (a3,d6),d6
  773.     move.w    d6,d7
  774.     not.w    d7
  775.  
  776.     and.w    d7,(a2)
  777.     and.w    d7,2(a2)
  778.     and.w    d7,4(a2)
  779.     and.w    d7,6(a2)
  780.  
  781.     swap    d1
  782.     and.w    #1,d1
  783.     beq    not1\@
  784.     or.w    d6,(a2)
  785. not1\@
  786.     swap    d1
  787.     and.w    #1,d1
  788.     beq    not2\@
  789.     or.w    d6,2(a2)
  790. not2\@
  791.     swap    d3
  792.     and.w    #1,d3
  793.     beq    not3\@
  794.     or.w    d6,4(a2)
  795. not3\@
  796.     swap    d3
  797.     and.w    #1,d3
  798.     beq    not4\@
  799.     or.w    d6,6(a2)
  800. not4\@
  801.     movem.l    (sp)+,a0-3/d0-7
  802.     
  803.     endm    
  804.  
  805.  
  806. clrpoint    macro
  807.     movem.l    a2-5/d0-3,-(sp)
  808.     lea    mulu,a2
  809.     move.w    \2,d0
  810.     move.w    \1,d1
  811.     move.l    \3,a5
  812.     add.w    d0,d0
  813.     move.w    (a2,d0),d0        
  814.     add.w    d0,a5
  815.     move.w    d1,d2
  816.     and.w    #$fff0,d1
  817.     asr.w    #1,d1
  818.     add.w    d1,a5
  819.     and.w    #$f,d2
  820.     lea    dots,a4
  821.     add.w    d2,d2
  822.     move.w    (a4,d2),d2
  823.     move.w    d2,d3
  824.     not.w    d3
  825.     and.w    d3,(a5)
  826.     and.w    d3,2(a5)
  827.     and.w    d3,4(a5)
  828.     and.w    d3,6(a5)
  829.     movem.l    (sp)+,a2-5/d0-3
  830.     endm
  831.     
  832. mod    macro
  833.     move.w    d1,-(sp)
  834.     move.l    \1,d1
  835.     divu.w    #\2,d1
  836.     swap    d1
  837.     move.w    d1,\1
  838.     move.w    (sp)+,d1
  839.     endm
  840.  
  841. load    macro
  842.     movem.l    d0-1/a0,-(sp)
  843.     move.w    #2,-(sp)
  844.     move.l    \1,-(sp)
  845.     move.w    #$3d,-(sp)
  846.     trap    #1
  847.     addq.l    #8,sp
  848.     
  849.     move.w    d0,d1
  850.     bmi.s    .f\@
  851.     
  852.     move.l    \2,-(sp)
  853.     move.l    \3,-(sp)
  854.     move.w    d1,-(sp)
  855.     move.w    #$3f,-(sp)
  856.     trap    #1
  857.     lea    $c(sp),sp
  858.     
  859.     cmp.l    \3,d0
  860.     bne.s    .f\@
  861.     
  862.     move.w    d1,-(sp)
  863.     move.w    #$3e,-(sp)
  864.     trap    #1
  865.     addq.l    #4,sp
  866.     
  867. .f\@    movem.l    (sp)+,d0-1/a0
  868.     endm
  869.  
  870. save    macro
  871.     movem.l    d0-1/a0,-(sp)
  872.     clr.w    -(sp)
  873.     move.l    \1,-(sp)
  874.     move.w    #$3c,-(sp)
  875.     trap    #1
  876.     addq.l    #8,sp
  877.     
  878.     move.w    d0,d1
  879.     bmi.s    .f\@
  880.     
  881.     move.l    \2,-(sp)
  882.     move.l    \3,-(sp)
  883.     move.w    d1,-(sp)
  884.     move.w    #$40,-(sp)
  885.     trap    #1
  886.     lea    $c(sp),sp
  887.     
  888.     cmp.l    \3,d0
  889.     bne.s    .f\@
  890.     
  891.     move.w    d1,-(sp)
  892.     move.w    #$3e,-(sp)
  893.     trap    #1
  894.     addq.l    #4,sp
  895.  
  896. .f\@    movem.l    (sp)+,d0-1/a0
  897.     endm
  898.  
  899. get_dta    macro
  900.     movem.l    d1/a1,-(sp)
  901.     move.w    #47,-(sp)
  902.     trap    #1
  903.     addq.w    #2,sp
  904.     movem.l    (sp)+,d1/a1
  905.     endm
  906.  
  907. exist    macro
  908.     movem.l    d1/a1,-(sp)
  909.     move.w    #%01100,-(sp)    
  910.     move.l    \1,-(sp)
  911.     move.w    #78,-(sp)
  912.     trap    #1
  913.     addq.w    #8,sp
  914.     movem.l    (sp)+,d1/a1
  915.     endm
  916.         
  917. s50hz    macro
  918.     bset    #1,$ffff820a.w
  919.     endm
  920.  
  921. s60hz    macro
  922.     bclr    #1,$ffff820a.w
  923.     endm
  924.     
  925. changehz    macro
  926.     bchg    #1,$ffff820a.w
  927.     endm
  928.     
  929. inc    macro
  930.     addq.\0    #1,\1
  931.     endm
  932.  
  933. dec    macro
  934.     subq.\0    #1,\1
  935.     endm
  936.     
  937. dma_init    macro
  938.     move.l    \1,-(sp)
  939.     move.b    1(sp),$ffff8903.w
  940.     move.b    2(sp),$ffff8905.w
  941.     move.b    3(sp),$ffff8907.w
  942.     move.l    \2,(sp)
  943.     move.b    1(sp),$ffff890f.w
  944.     move.b    2(sp),$ffff8911.w
  945.     move.b    3(sp),$ffff8913.w
  946.     addq.w    #4,sp
  947.     move.b    \3,$ffff8921.w
  948.     endm
  949.     
  950. dma_setm    macro
  951.     move.l    d0,-(sp)
  952.     move.w    \1,d0
  953.     asr.w    #1,d0
  954.     add.w    #40,d0
  955.     move.w    #%11111111111,$ffff8924.w    
  956.     or.w    #%10011000000,d0
  957.     move.w    d0,$ffff8922.w
  958.     move.l    (sp)+,d0    
  959.     endm
  960.  
  961.  
  962. dma_setl    macro
  963.     move.l    d0,-(sp)
  964.     move.w    \1,d0
  965.     asr.w    #1,d0
  966.     add.w    #20,d0
  967.     move.w    #%11111011111,$ffff8924.w    
  968.     or.w    #%10101000000,d0
  969.     move.w    d0,$ffff8922.w
  970.     move.l    (sp)+,d0    
  971.     endm
  972.  
  973. dma_setr    macro
  974.     move.l    d0,-(sp)
  975.     move.w    \1,d0
  976.     asr.w    #1,d0
  977.     add.w    #20,d0
  978.     move.w    #%11111011111,$ffff8924.w    
  979.     or.w    #%10100000000,d0
  980.     move.w    d0,$ffff8922.w
  981.     move.l    (sp)+,d0    
  982.     endm
  983.  
  984. dma_sett    macro
  985.     move.l    d0,-(sp)
  986.     move.w    \1,d0
  987.     asr.w    #1,d0
  988.     add.w    #6,d0
  989.     move.w    #%11111001111,$ffff8924.w    
  990.     or.w    #%10010000000,d0
  991.     move.w    d0,$ffff8922.w
  992.     move.l    (sp)+,d0    
  993.     endm
  994.  
  995. dma_setb    macro
  996.     move.l    d0,-(sp)
  997.     move.w    \1,d0
  998.     asr.w    #1,d0
  999.     add.w    #6,d0
  1000.     move.w    #%11111001111,$ffff8924.w    
  1001.     or.w    #%10001000000,d0
  1002.     move.w    d0,$ffff8922.w
  1003.     move.l    (sp)+,d0    
  1004.     endm
  1005.  
  1006. mute_on    macro
  1007.     move.w    #%11111000011,$ffff8924.w    
  1008.     move.w    #%10000000000,$ffff8922.w
  1009.     endm
  1010.  
  1011. mute_off    macro
  1012.     move.w    #%11111000011,$ffff8924.w    
  1013.     move.w    #%10000000001,$ffff8922.w
  1014.     endm
  1015.  
  1016. ldbra    macro
  1017.     dec.l    \1
  1018.     bne.\0    \2
  1019.     endm
  1020.     
  1021. hkk    macro
  1022.     jsr.\0    \1
  1023.     endm
  1024.     
  1025. skk    macro
  1026.     bsr.\0    \1
  1027.     endm
  1028.     
  1029. clrmem    macro
  1030.     movem.l    d0/a0-a1,-(sp)
  1031.     move.l    /1,a0
  1032.     move.w    /2,d0
  1033. loop\@
  1034.     move.l    (a0)+,a1
  1035.     clr.w    (a1)+
  1036.     dbra    d0,loop\@
  1037.     movem.l    (sp)+,d0/a0-a1
  1038.     endm
  1039.  
  1040. grayscale    macro
  1041.     dc.w    $000,$888,$111,$999,$222,$aaa,$333,$bbb
  1042.     dc.w    $444,$ccc,$555,$ddd,$666,$eee,$777,$fff
  1043.     endm
  1044.  
  1045. redscale    macro
  1046.     dc.w    $000,$800,$100,$900,$200,$a00,$300,$b00
  1047.     dc.w    $400,$c00,$500,$d00,$600,$e00,$700,$f00
  1048.     endm
  1049.  
  1050. greenscale    macro
  1051.     dc.w    $000,$080,$010,$090,$020,$0a0,$030,$0b0
  1052.     dc.w    $040,$0c0,$050,$0d0,$060,$0e0,$070,$0f0
  1053.     endm
  1054.  
  1055. bluescale    macro
  1056.     dc.w    $000,$008,$001,$009,$002,$00a,$003,$00b
  1057.     dc.w    $004,$00c,$005,$00d,$006,$00e,$007,$00f
  1058.     endm
  1059.  
  1060. standard    macro
  1061.     dc.w    $fff,$f00,$0f0,$ff0,$00f,$f0f,$0ff,$555
  1062.     dc.w    $333,$f33,$3f3,$ff3,$33f,$f3f,$3ff,$000
  1063.     endm
  1064.  
  1065. pr_num    macro
  1066.     
  1067. x\@    =    \2
  1068. y\@    =    \3
  1069. antal\@    =    \4
  1070. tmp\@    =    \6    *bitplan
  1071.  
  1072.     movem.l    a0-a5/d0-d4/d6,-(sp)
  1073.  
  1074.     lea    num,a0
  1075.     lea    table,a2
  1076.     lea    mulu,a4
  1077.     move.l    \5,a1
  1078.     
  1079.     move.l    \1,d0
  1080.  
  1081.     moveq    #antal\@-1,d6
  1082. loop\@
  1083.     move.w    d6,d2
  1084.     move.l    d0,d1
  1085.  
  1086.     add.w    d2,d2
  1087.     add.w    d2,d2
  1088.  
  1089.     and.l    (a2,d2),d1
  1090.     lsr.l    d2,d1
  1091.     lsl.l    #3,d1
  1092.     move.l    a0,a5
  1093.     add.l    d1,a5    
  1094.     move.l    a1,a3
  1095.     move.w    #y\@,d2
  1096.     lsl.w    #4,d2
  1097.     move.w    (a4,d2),d2
  1098.     add.w    d2,a3
  1099.     move.w    #x\@,d2
  1100.     
  1101.     move.w    d6,d4
  1102.     move.w    #antal\@-1,d3
  1103.     sub.w    d4,d3
  1104.     add.w    d3,d2
  1105.     
  1106.     move.w    d2,d3
  1107.     and.w    #1,d3
  1108.     and.w    #$fffe,d2
  1109.     lsl.w    #2,d2
  1110.     add.w    d2,a3
  1111.     add.w    d3,a3    
  1112.     
  1113.     move.b    (a5)+,160*0+tmp\@*2(a3)
  1114.     move.b    (a5)+,160*1+tmp\@*2(a3)
  1115.     move.b    (a5)+,160*2+tmp\@*2(a3)
  1116.     move.b    (a5)+,160*3+tmp\@*2(a3)
  1117.     move.b    (a5)+,160*4+tmp\@*2(a3)
  1118.     move.b    (a5)+,160*5+tmp\@*2(a3)
  1119.     move.b    (a5)+,160*6+tmp\@*2(a3)
  1120.     move.b    (a5)+,160*7+tmp\@*2(a3)
  1121.     
  1122.     dbra    d6,loop\@
  1123.     
  1124.     movem.l    (sp)+,a0-a5/d0-d4/d6
  1125.  
  1126.     endm
  1127.  
  1128. pr_num_tab    macro
  1129. table    
  1130.     dc.l    $0000000f
  1131.     dc.l    $000000f0
  1132.     dc.l    $00000f00
  1133.     dc.l    $0000f000
  1134.     dc.l    $000f0000
  1135.     dc.l    $00f00000
  1136.     dc.l    $0f000000
  1137.     dc.l    $f0000000
  1138.  
  1139.     endm
  1140.  
  1141. pr_num_tab2    macro
  1142. num
  1143.     dc.b    %01111110
  1144.     dc.b    %01111110
  1145.     dc.b    %01100110
  1146.     dc.b    %01100110
  1147.     dc.b    %01100110
  1148.     dc.b    %01111110
  1149.     dc.b    %01111110
  1150.     dc.b    %00000000
  1151.  
  1152.     dc.b    %00011000
  1153.     dc.b    %00011000
  1154.     dc.b    %00011000
  1155.     dc.b    %00011000
  1156.     dc.b    %00011000
  1157.     dc.b    %00011000
  1158.     dc.b    %00011000
  1159.     dc.b    %00000000
  1160.  
  1161.     dc.b    %01111110
  1162.     dc.b    %01111110
  1163.     dc.b    %00000110
  1164.     dc.b    %01111110
  1165.     dc.b    %01100000
  1166.     dc.b    %01111110
  1167.     dc.b    %01111110
  1168.     dc.b    %00000000
  1169.  
  1170.     dc.b    %01111110
  1171.     dc.b    %01111110
  1172.     dc.b    %00000110
  1173.     dc.b    %00011110
  1174.     dc.b    %00000110
  1175.     dc.b    %01111110
  1176.     dc.b    %01111110
  1177.     dc.b    %00000000
  1178.  
  1179.     dc.b    %01100110
  1180.     dc.b    %01100110
  1181.     dc.b    %01100110
  1182.     dc.b    %01111110
  1183.     dc.b    %00000110
  1184.     dc.b    %00000110
  1185.     dc.b    %00000110
  1186.     dc.b    %00000000
  1187.  
  1188.     dc.b    %01111110
  1189.     dc.b    %01111110
  1190.     dc.b    %01100000
  1191.     dc.b    %01111110
  1192.     dc.b    %00000110
  1193.     dc.b    %01111110
  1194.     dc.b    %01111110
  1195.     dc.b    %00000000
  1196.  
  1197.     dc.b    %01111110
  1198.     dc.b    %01111110
  1199.     dc.b    %01100000
  1200.     dc.b    %01111110
  1201.     dc.b    %01100110
  1202.     dc.b    %01111110
  1203.     dc.b    %01111110
  1204.     dc.b    %00000000
  1205.  
  1206.     dc.b    %01111110
  1207.     dc.b    %01111110
  1208.     dc.b    %00000110
  1209.     dc.b    %00000110
  1210.     dc.b    %00000110
  1211.     dc.b    %00000110
  1212.     dc.b    %00000110
  1213.     dc.b    %00000000
  1214.  
  1215.     dc.b    %01111110
  1216.     dc.b    %01111110
  1217.     dc.b    %01100110
  1218.     dc.b    %01111110
  1219.     dc.b    %01100110
  1220.     dc.b    %01111110
  1221.     dc.b    %01111110
  1222.     dc.b    %00000000
  1223.  
  1224.     dc.b    %01111110
  1225.     dc.b    %01111110
  1226.     dc.b    %01100110
  1227.     dc.b    %01111110
  1228.     dc.b    %00000110
  1229.     dc.b    %01111110
  1230.     dc.b    %01111110
  1231.     dc.b    %00000000
  1232.  
  1233.     dc.b    %01111110
  1234.     dc.b    %01111110
  1235.     dc.b    %01100110
  1236.     dc.b    %01111110
  1237.     dc.b    %01100110
  1238.     dc.b    %01100110
  1239.     dc.b    %01100110
  1240.     dc.b    %00000000
  1241.  
  1242.     dc.b    %01111100
  1243.     dc.b    %01111110
  1244.     dc.b    %01100110
  1245.     dc.b    %01111100
  1246.     dc.b    %01100110
  1247.     dc.b    %01111110
  1248.     dc.b    %01111100
  1249.     dc.b    %00000000
  1250.  
  1251.     dc.b    %01111110
  1252.     dc.b    %01111110
  1253.     dc.b    %01100000
  1254.     dc.b    %01100000
  1255.     dc.b    %01100000
  1256.     dc.b    %01111110
  1257.     dc.b    %01111110
  1258.     dc.b    %00000000
  1259.  
  1260.     dc.b    %01111100
  1261.     dc.b    %01111110
  1262.     dc.b    %01100110
  1263.     dc.b    %01100110
  1264.     dc.b    %01100110
  1265.     dc.b    %01111110
  1266.     dc.b    %01111100
  1267.     dc.b    %00000000
  1268.  
  1269.     dc.b    %01111110
  1270.     dc.b    %01111110
  1271.     dc.b    %01100000
  1272.     dc.b    %01111000
  1273.     dc.b    %01100000
  1274.     dc.b    %01111110
  1275.     dc.b    %01111110
  1276.     dc.b    %00000000
  1277.  
  1278.     dc.b    %01111110
  1279.     dc.b    %01111110
  1280.     dc.b    %01100000
  1281.     dc.b    %01111000
  1282.     dc.b    %01100000
  1283.     dc.b    %01100000
  1284.     dc.b    %01100000
  1285.     dc.b    %00000000
  1286.  
  1287.     endm
  1288.  
  1289. box    macro
  1290.     
  1291.     movem.l    d2-6/a0,-(sp)
  1292.     
  1293.     move.w    \1,d2
  1294.     move.w    \2,d3
  1295.     move.w    \3,d4
  1296.     move.w    \4,d5
  1297.     move.l    \5,a0
  1298.     
  1299.     move.w    d2,d6
  1300. loop\@
  1301.     plot    d6,d3,a0,\6
  1302.     plot    d6,d5,a0,\6
  1303.     
  1304.     inc.w    d6
  1305.     cmp.w    d6,d4
  1306.     bhi    loop\@
  1307.     
  1308.     move.w    d3,d6
  1309. loop2\@
  1310.     plot    d2,d6,a0,\6
  1311.     plot    d4,d6,a0,\6
  1312.     
  1313.     inc.w    d6
  1314.     cmp.w    d6,d5
  1315.     bhi    loop2\@
  1316.     
  1317.     movem.l    (sp)+,d2-6/a0
  1318.     
  1319.     endm
  1320.     
  1321. setscreen    macro    logpek,physpek,mode
  1322.  
  1323.     movem.l    d0-a6,-(sp)
  1324.     
  1325.     move.w    \3,-(sp)
  1326.     move.w    #3,-(sp)
  1327.     move.l    \2,-(sp)
  1328.     move.l    \1,-(sp)
  1329.     move.w    #5,-(sp)
  1330.     trap    #14
  1331.     add.l    #14,sp
  1332.     
  1333.     movem.l    (sp)+,d0-a6
  1334.     
  1335.     endm
  1336.  
  1337. getphys    macro
  1338.  
  1339.     movem.l    d1-a6,-(sp)
  1340.     
  1341.     move.w    #2,-(sp)
  1342.     trap    #14
  1343.     addq.l    #2,sp
  1344.     
  1345.     movem.l    (sp)+,d1-a6
  1346.     
  1347.     endm
  1348.  
  1349. getlog    macro
  1350.  
  1351.     movem.l    d1-a6,-(sp)
  1352.     
  1353.     move.w    #3,-(sp)
  1354.     trap    #14
  1355.     addq.l    #2,sp
  1356.     
  1357.     movem.l    (sp)+,d1-a6
  1358.     
  1359.     endm
  1360.  
  1361. getres    macro
  1362.  
  1363.     movem.l    d1-a6,-(sp)
  1364.     
  1365.     move.w    #-1,-(sp)
  1366.     move.w    #88,-(sp)
  1367.     trap    #14
  1368.     addq.l    #4,sp
  1369.     
  1370.     movem.l    (sp)+,d1-a6
  1371.     
  1372.     endm
  1373.     
  1374. abs    macro
  1375.     move.\0    d0,-(sp)
  1376.     move.\0    \1,d0
  1377.  
  1378.     tst.\0    d0
  1379.     bpl    ejb\@
  1380.     neg.\0    d0
  1381. ejb\@
  1382.     move.\0    d0,\1
  1383.     move.\0    (sp)+,d0
  1384.     endm
  1385.  
  1386. stdinit    macro
  1387.  
  1388.     movem.l    d0-a6,-(sp)
  1389.     
  1390.     getphys
  1391.     move.l    d0,save_phys
  1392.     getlog
  1393.     move.l    d0,save_log
  1394.     getres
  1395.     move.w    d0,save_res
  1396.     
  1397.     setscreen    \1,\2,\3
  1398.     
  1399.     movem.l    (sp)+,d0-a6
  1400.     
  1401.     endm
  1402.  
  1403. stdexit    macro
  1404.  
  1405.     setscreen    save_log,save_phys,save_res
  1406.  
  1407.     clr.w    -(sp)
  1408.     trap    #1
  1409.     
  1410.     endm
  1411.     
  1412. stdbss    macro
  1413.  
  1414. save_phys    ds.l    1
  1415. save_log    ds.l    1
  1416. save_res    ds.w    1
  1417.  
  1418.     endm
  1419.  
  1420. qpoint_f    macro
  1421.  
  1422.     movem.l    d1-a6,-(sp)
  1423.     
  1424.     lea    mulu,a1
  1425.     move.w    \1,d0
  1426.     move.w    \2,d1
  1427.     move.l    \3,a0
  1428.     
  1429.     add.w    (a1,d1.w*2),a0
  1430.     move.w    d0,d1
  1431.     and.w    #$fff0,d0
  1432.     lsr.w    d0
  1433.     add.w    d0,a0
  1434.     and.w    #$f,d1
  1435.     moveq    #0,d0
  1436.     moveq    #0,d2
  1437.     moveq    #0,d3
  1438.     moveq    #0,d4
  1439.     moveq    #0,d5
  1440.     
  1441.     movem.w    (a0),d2-d5
  1442.     roxl    d1,d5
  1443.     roxl    d0
  1444.     roxl    d1,d4
  1445.     roxl    d0
  1446.     roxl    d1,d3
  1447.     roxl    d0
  1448.     roxl    d1,d2
  1449.     roxl    d0
  1450.     
  1451.     movem.l    (sp)+,d1-a6
  1452.     
  1453.     endm
  1454.  
  1455. pi12tru    macro
  1456.  
  1457.     movem.l    d0-a6,-(sp)
  1458.     
  1459.     move.l    \1,a0
  1460.     move.l    \2,a1
  1461.     move.l    \3,a2
  1462.     
  1463.     move.w    #199,d6
  1464. loop\@
  1465.     move.w    #319,d7
  1466. loop2\@
  1467.     qpoint_f    d7,d6,a0
  1468.     
  1469.     move.w    (a2,d0.w*2),d0
  1470.     
  1471.     move.w    d0,d1
  1472.     move.w    d0,d2
  1473.  
  1474.     and.w    #$700,d0
  1475.     lsl.w    #5,d0
  1476.     and.w    #$70,d1
  1477.     lsl.w    #4,d1
  1478.     and.w    #$7,d2
  1479.     lsl.w    #2,d2
  1480.     or.w    d1,d0
  1481.     or.w    d2,d0
  1482.     
  1483.     move.w    d0,(a1)+
  1484.     
  1485.     dbra    d7,loop2\@
  1486.     
  1487.     dbra    d6,loop\@
  1488.  
  1489.     movem.l    (sp)+,d0-a6
  1490.     
  1491.     endm
  1492.  
  1493.  
  1494.  
  1495. bload    macro
  1496.  
  1497.     move.w    #0,-(sp)
  1498.     pea    \1
  1499.     move.w    #$3d,-(sp)
  1500.     trap    #1
  1501.     addq.l    #8,sp
  1502.     move.l    d0,d6
  1503.     bmi    error\@
  1504.  
  1505.     move.w    #2,-(sp)
  1506.     move.w    d6,-(sp)
  1507.     move.l    #0,-(sp)
  1508.     move.w    #$42,-(sp)
  1509.     trap    #1
  1510.     lea    10(sp),sp
  1511.     move.l    d0,d5
  1512.     bmi    error\@
  1513.  
  1514.     move.w    #0,-(sp)
  1515.     move.w    d6,-(sp)
  1516.     move.l    #0,-(sp)
  1517.     move.w    #$42,-(sp)
  1518.     trap    #1
  1519.     lea    10(sp),sp
  1520.  
  1521.     pea    \2
  1522.     move.l    d5,-(sp)
  1523.     move.w    d6,-(sp)
  1524.     move.w    #$3f,-(sp)
  1525.     trap    #1
  1526.     lea    12(sp),sp
  1527.     cmp.l    d0,d5
  1528.     bne    error\@
  1529.  
  1530.     move.w    d6,-(sp)
  1531.     move.w    #$3e,-(sp)
  1532.     trap    #1
  1533.     addq.l    #4,sp
  1534.     tst.l    d0
  1535.     bmi    error\@
  1536.  
  1537.     moveq    #0,d0
  1538.     bra    end\@
  1539. error\@
  1540.     moveq    #-1,d0
  1541. end\@
  1542.     endm
  1543.  
  1544. bsave    macro
  1545.  
  1546.     move.w    #0,-(sp)
  1547.     pea    \1
  1548.     move.w    #$3c,-(sp)
  1549.     trap    #1
  1550.     addq.l    #8,sp
  1551.     move.l    d0,d6
  1552.     bmi    error\@
  1553.  
  1554.     move.l    #\3,d5
  1555.  
  1556.     pea    \2
  1557.     move.l    d5,-(sp)
  1558.     move.w    d6,-(sp)
  1559.     move.w    #$40,-(sp)
  1560.     trap    #1
  1561.     lea    12(sp),sp
  1562.     cmp.l    d0,d5
  1563.     bne    error\@
  1564.  
  1565.     move.w    d6,-(sp)
  1566.     move.w    #$3e,-(sp)
  1567.     trap    #1
  1568.     addq.l    #4,sp
  1569.     tst.l    d0
  1570.     bmi    error\@
  1571.  
  1572.     moveq    #0,d0
  1573.     bra    end\@
  1574. error\@
  1575.     moveq    #-1,d0
  1576. end\@
  1577.     endm
  1578.     
  1579. sload    macro
  1580.  
  1581.     move.w    #0,-(sp)
  1582.     pea    \1
  1583.     move.w    #$3d,-(sp)
  1584.     trap    #1
  1585.     addq.l    #8,sp
  1586.     move.l    d0,d6
  1587.     bmi    error\@
  1588.  
  1589.     move.w    #0,-(sp)
  1590.     move.w    d6,-(sp)
  1591.     move.l    #\3,-(sp)
  1592.     move.w    #$42,-(sp)
  1593.     trap    #1
  1594.     lea    10(sp),sp
  1595.     move.l    d0,d5
  1596.     bmi    error\@
  1597.  
  1598.     pea    \2
  1599.     move.l    #\4,-(sp)
  1600.     move.w    d6,-(sp)
  1601.     move.w    #$3f,-(sp)
  1602.     trap    #1
  1603.     lea    12(sp),sp
  1604.     cmp.l    d0,d5
  1605.     bne    error\@
  1606.  
  1607.     move.w    d6,-(sp)
  1608.     move.w    #$3e,-(sp)
  1609.     trap    #1
  1610.     addq.l    #4,sp
  1611.     tst.l    d0
  1612.     bmi    error\@
  1613.  
  1614.     moveq    #0,d0
  1615.     bra    end\@
  1616. error\@
  1617.     moveq    #-1,d0
  1618. end\@
  1619.     endm
  1620.     
  1621. ste2fpal    macro
  1622.     movem.l    d0-3/a0-1,-(sp)
  1623.  
  1624.     move.l    \1,a0
  1625.     move.l    \2,a1
  1626.     move.w    \3,d0
  1627.     dec.w    d0
  1628. loop\@
  1629.     move.w    (a0)+,d1
  1630.     move.w    d1,d2
  1631.     lsl.w    #1,d1    
  1632.     lsr.w    #3,d2
  1633.     and.w    #$eee,d1
  1634.     and.w    #$111,d2
  1635.     add.w    d2,d1
  1636.     move.w    d1,d2    
  1637.     move.w    d1,d3
  1638.     lsl.w    #4,d1    
  1639.     lsr.w    #4,d3
  1640.     and.w    #$f0,d2    
  1641.     and.w    #$f0,d3
  1642.     move.b    d3,(a1)+    
  1643.     move.b    d2,(a1)+    
  1644.     move.b    #0,(a1)+    
  1645.     move.b    d1,(a1)+
  1646.     dbra    d0,loop\@
  1647.     
  1648.     movem.l    (sp)+,d0-3/a0-1
  1649.     endm
  1650.         
  1651. bmove    macro
  1652.     movem.l    d0/a0-1,-(sp)
  1653.     move.l    \1,a0
  1654.     move.l    \2,a1
  1655.     move.l    \3,d0
  1656. loop\@
  1657.     move.\0    (a0)+,(a1)+
  1658.     ldbra    d0,loop\@
  1659.  
  1660.     movem.l    (sp)+,d0/a0-1
  1661.     endm
  1662.     
  1663. **************
  1664. * indata L: m_buffer  (14 bytes)
  1665. exit_mouse    macro
  1666.     movem.l    a0-1,-(sp)
  1667.     move.l    \1,a1
  1668.     move.l    6(a1),a0    Återställa musvektorn.
  1669.     move.l    10(a1),(a0)
  1670.     movem.l    (sp)+,a0-1
  1671.     endm
  1672. **************
  1673. * indata L: m_buffer  (14 bytes inehåller w:x w:y w:k  l:musvektor l:musrutin)
  1674. init_mouse    macro
  1675.     movem.l    d0/a0-1,-(sp)
  1676.     move.w    #34,-(sp)    Kbdvec
  1677.     trap    #14
  1678.     lea    2(sp),sp
  1679.     add.l    #16,d0
  1680.     move.l    \1,a0
  1681.     move.l    d0,6(a0)    Spara musvektorn & installera egna
  1682.     move.l    d0,a1
  1683.     move.l    (a1),10(a0)    
  1684.     move.l    #mouse_r\@,(a1)
  1685.     move.l    #0,(a0)
  1686.     bra    exit\@
  1687.  
  1688. **************
  1689. * Ny vector
  1690. mouse_r\@    movem.l    d0-a6,-(sp)
  1691.     move.b    (a0)+,d0
  1692.     move.b    (a0)+,d1
  1693.     move.b    (a0)+,d2
  1694.     move.l    \1,a0
  1695.     ext.w    d1
  1696.     ext.w    d2
  1697.     add.w    d1,(a0)
  1698.     add.w    d2,2(a0)
  1699.     and.w    #3,d0
  1700.     move.w    d0,4(a0)
  1701.     movem.l    (sp)+,d0-a6
  1702.     rts
  1703. **************
  1704.  
  1705. exit\@    movem.l    (sp)+,d0/a0-1
  1706.     endm
  1707.     
  1708.  
  1709. **************
  1710.     
  1711. sendchar    macro
  1712. wait\@    btst.b    #1,$fffffc00.w
  1713.     bne    wait\@
  1714.     move.b    \1,$fffffc02.w
  1715.     endm
  1716.     
  1717. getchar    macro
  1718.     move.b    $fffffc02.w,\1
  1719.     endm
  1720.     
  1721.