home *** CD-ROM | disk | FTP | other *** search
/ M.u.C.S. Disc 2000 / MUCS2000.iso / falcon / whip.031 / vlm / dotbox.1_0 / source / dotbox.s next >
Text File  |  1999-06-21  |  12KB  |  719 lines

  1.  
  2.     OPT    D-
  3.     OUTPUT    E:\WHIP!\VLM\DOTBOX.VLM
  4.  
  5. ******** OBJECT EQUATES ********
  6.  
  7. boxwidth:    =    45<<8
  8. boxsteps:    =    14
  9. boxpoints:    =    boxsteps*boxsteps*boxsteps
  10.  
  11. boxcolorstep:    =    64/boxsteps
  12.  
  13. *** VLM STRUCTURE **************************************************************
  14.  
  15.     DC.B    "VLM2"            * vlm module type
  16.     DC.L    info_txt        * pointer to infotext
  17.     DC.L    settings_tbl        * pointer to settings-structure
  18.     DC.L    init            * pointer to init routine
  19.     DC.L    deinit            * pointer to deinit routine
  20.     DC.L    main            * pointer to mainloop routine
  21.  
  22. ******** OBJECT LIBRARIES ********
  23.  
  24.     INCLUDE    FIMATH.I
  25.     TEXT
  26.  
  27. * SERVICE ROUTINES PROVIDED BY THE CALLING PROGRAM
  28.  
  29. * INPUT: a0: new vbl subroutine
  30. set_vblrout:
  31.     movea.l    service_struct,A1
  32.     movea.l    (A1),A1
  33.     jsr    (A1)
  34.     rts
  35.  
  36. wait_vbl:
  37.     movea.l    service_struct,A1
  38.     movea.l    4(A1),A1
  39.     jsr    (A1)
  40.     rts
  41.  
  42. * INPUT: a0: new screen adress
  43. set_scradr:
  44.     movea.l    service_struct,A1
  45.     movea.l    8(A1),A1
  46.     jsr    (A1)
  47.     rts
  48.  
  49. * INPUT: d0.l: number of the wanted resolution
  50. set_resolution:
  51.     movea.l    service_struct,A1
  52.     movea.l    12(A1),A1
  53.     jsr    (A1)
  54.     rts
  55.  
  56. get_left_spec:
  57.     movea.l    service_struct,A1
  58.     movea.l    16(A1),A1
  59.     jsr    (A1)            * Returns in a0 the adress of left spec.
  60.     rts
  61.  
  62. get_right_spec:
  63.     movea.l    service_struct,A1
  64.     movea.l    20(A1),A1
  65.     jsr    (A1)            * Returns in a0 the adress of right spec.
  66.     rts
  67.  
  68. get_left_volume:
  69.     movea.l    service_struct,A1
  70.     movea.l    24(A1),A1
  71.     jsr    (A1)            * Returns in d0 the left volume value.
  72.     rts
  73.  
  74. get_right_volume:
  75.     movea.l    service_struct,A1
  76.     movea.l    28(A1),A1
  77.     jsr    (A1)            * Returns in d0 the right volume value.
  78.     rts
  79.  
  80. get_left_osci:
  81.     movea.l    service_struct,A1
  82.     movea.l    32(A1),A1
  83.     jsr    (A1)            * Returns in a0 the adress of osci data.
  84.     rts
  85.  
  86. get_right_osci:
  87.     movea.l    service_struct,A1
  88.     movea.l    36(A1),A1
  89.     jsr    (A1)            * Returns in a0 the adress of osci data.
  90.     rts
  91.  
  92. service_struct:
  93.     DC.L    0            * Must be set in 'init'.
  94.  
  95. ********************************************************************************
  96. info_txt:
  97.     DC.B    "DOTBOX (FRONT 242)",0
  98.     DC.B    "author:  EarX/fun",0
  99.     DC.B    "version: 1.0",0
  100.     DC.B    "date:    21-06-1999",0
  101.     DC.B    0
  102.     EVEN
  103.  
  104. settings_tbl:
  105.     DC.L    3
  106.  
  107.     DC.L    rotxname_txt
  108.     DC.L    3
  109. rotxspeed:
  110.     DC.L    7
  111.     DC.L    slider_tbl
  112.  
  113.     DC.L    rotyname_txt
  114.     DC.L    3
  115. rotyspeed:
  116.     DC.L    7
  117.     DC.L    slider_tbl
  118.  
  119.     DC.L    rotzname_txt
  120.     DC.L    3
  121. rotzspeed:
  122.     DC.L    7
  123.     DC.L    slider_tbl
  124.  
  125. slider_tbl:
  126.     DC.L    0
  127.     DC.L    16
  128.  
  129. rotxname_txt:
  130.     DC.B    "X ROTATION SPEED",0
  131. rotyname_txt:
  132.     DC.B    "Y ROTATION SPEED",0
  133. rotzname_txt:
  134.     DC.B    "Z ROTATION SPEED",0
  135.  
  136. * INPUT: a0: service structure
  137. init:    move.l    a0,service_struct
  138.  
  139.     lea    scr,a1
  140.     lea    scr_buf,a0
  141.     move.l    #320*100*2,d0
  142.     move.l    a0,(a1)+
  143.     adda.l    d0,a0
  144.     move.l    a0,(a1)+
  145.     adda.l    d0,a0
  146.     move.l    a0,(a1)+
  147.  
  148.     bsr    CALC_XYLOOKUPTABLE
  149.     bsr    CALC_FIRECOLORS
  150.  
  151.     lea    fire_buf,a0
  152.     moveq    #84/4-1,d7
  153.     moveq    #0,d0
  154. .loop:    move.l    d0,(a0)+
  155.     dbra    d7,.loop
  156.  
  157.     move.l    #$ef56a71c,random
  158.  
  159.     moveq    #2,D0            * Set resolution to 320x100.
  160.     bsr    set_resolution
  161.     rts
  162.  
  163. deinit:
  164.     rts
  165.  
  166. main:
  167. ;    movea.l    scr,a0
  168. ;    movea.l    scr+4,a1
  169. ;    bsr    BLUR_320100
  170.     bsr    PLOT_FIRE
  171.  
  172.     lea    orgaxis_tbl,a0
  173.     bsr    get_left_volume
  174.     move.w    d0,d1
  175.     bsr    get_right_volume
  176.     move.w    d0,d2
  177.     move.w    d1,d0
  178.     add.w    d2,d0
  179.     lsr.w    #3,d0
  180.     lsr.w    #2,d1
  181.     lsr.w    #2,d2
  182.     move.w    d0,(a0)
  183.     move.w    d1,6+2(a0)
  184.     move.w    d2,6*2+4(a0)
  185.  
  186.     move.w    $4bc.w,d0
  187.     move.w    d0,d1
  188.     move.w    d0,d2
  189.     mulu.w    rotxspeed+2,d0
  190.     lsr.l    #3,d0
  191.     mulu.w    rotyspeed+2,d1
  192.     lsr.l    #3,d1
  193.     mulu.w    rotzspeed+2,d2
  194.     lsr.l    #3,d2
  195.     movem.w    d0-d2,.rot_tbl
  196.     bsr    PLOT_DOTBOX
  197.  
  198. ;    lea    .rot_tbl(pc),a1
  199. ;    bsr    PLOT_ROTATION
  200.  
  201.     lea    scr,a1
  202.     movea.l    (a1)+,a0
  203.     move.l    (a1)+,d1
  204.     move.l    (a1),-4(a1)
  205.     move.l    a0,(a1)
  206.     move.l    d1,-8(a1)
  207.     bsr    set_scradr
  208.     rts                * end of the mainroutine
  209.  
  210. .rot_tbl:
  211.     DS.W    3
  212. .volume:
  213.     DC.W    0
  214.  
  215. ******** SUBROUTINES ********
  216.  
  217. CALC_FIRECOLORS:
  218.     lea    firecolor_tbl,a0
  219.     moveq    #0,d0
  220.     move.l    #%00000000001000000000000000100000,d1
  221.     move.l    #%00001000000000000000100000000000,d2
  222.     moveq    #64/2-1,d7
  223.  
  224. .loop:    addq    #4,a0
  225.     move.l    d0,(a0)+
  226.     add.l    d1,d0
  227.     addq    #4,a0
  228.     move.l    d0,(a0)+
  229.     add.l    d2,d0
  230.     add.l    d1,d0
  231.     dbra    d7,.loop
  232.  
  233.     move.w    #64-1,d7
  234.     lea    -64*8(a0),a0
  235.     lea    4(a0),a1
  236.     movea.l    a1,a2
  237.  
  238. .doubleloop:
  239.     move.l    (a1),d0
  240.     moveq    #64-1,d6
  241.  
  242. .innerloop:
  243.     move.l    d0,(a0)+
  244.     move.l    (a2),(a0)+
  245.     addq    #8,a2
  246.     dbra    d6,.innerloop
  247.  
  248.     lea    -64*8(a2),a2
  249.     lea    192*8(a0),a0
  250.     addq    #8,a1
  251.     dbra    d7,.doubleloop
  252.     rts
  253.  
  254. CALC_XYLOOKUPTABLE:
  255.     lea    xylookup_tbl,a0
  256.     moveq    #0,d1
  257.  
  258. .yloop:    moveq    #0,d0
  259.     move.b    d1,d3
  260.     ext.w    d3
  261.     addi.w    #50,d3
  262.     cmpi.w    #100,d3
  263.     blo.s    .yonscreen
  264.     moveq    #0,d7
  265.     moveq    #-1,d2
  266. .clrloop:
  267.     move.w    d2,(a0)+
  268.     addq.b    #1,d7
  269.     bne.s    .clrloop
  270.     bra.s    .endy
  271. .yonscreen:
  272.     mulu.w    #320,d3
  273.  
  274. .xloop:    move.b    d0,d2
  275.     ext.w    d2
  276.     addi.w    #80,d2
  277.     cmpi.w    #160,d2
  278.     blo.s    .xonscreen
  279.     move.w    #-1,(a0)+
  280.     bra.s    .endx
  281. .xonscreen:
  282.     ext.l    d2
  283.     add.l    d2,d2
  284.     add.l    d3,d2
  285.     move.w    d2,(a0)+
  286. .endx:    addq.b    #1,d0
  287.     bne.s    .xloop
  288.  
  289. .endy:    addq.b    #1,d1
  290.     bne.s    .yloop
  291.     rts
  292.  
  293. PLOT_TESTXY:
  294.     movea.l    scr,a0
  295.     lea    xylookup_tbl,a1
  296.     move.w    #$30f0,d0
  297.     moveq    #0,d1
  298.     move.w    (a1,d0.w*2),d1
  299.     bmi.s    .rts
  300.     move.w    #$ffff,(a0,d1.l*2)
  301. .rts    rts
  302.  
  303. PLOT_FIRE:
  304.     lea    firecolor_tbl,a4
  305.     lea    fire_buf,a1
  306.     lea    84(a1),a2
  307.     lea    84(a2),a3
  308.     movea.l    scr,a0
  309.     lea    640(a0),a5
  310.     moveq    #100-1,d7
  311.     move.l    #%11111100111111001111110011111100,d5
  312.     moveq    #0,d4
  313.  
  314. .yloop:    moveq    #80/4-1,d6
  315.  
  316. .xloop:    move.l    (a1)+,d0
  317.     add.l    d0,d0
  318.     add.l    (a3)+,d0
  319.     add.l    (a2)+,d0
  320.     ;add.l    -2(a1),d0
  321.     and.l    d5,d0
  322.     lsr.l    #2,d0
  323.     move.l    d0,-3(a2)
  324.     move.l    d0,d1
  325.     swap    d1
  326.     move.l    (a4,d1.w*8),(a0)+
  327.     move.l    (a4,d1.w*8),-(a5)
  328.     move.l    4(a4,d1.w*8),(a0)+
  329.     move.l    4(a4,d1.w*8),-(a5)
  330.     move.l    (a4,d0.w*8),(a0)+
  331.     move.l    (a4,d0.w*8),-(a5)
  332.     move.l    4(a4,d0.w*8),(a0)+
  333.     move.l    4(a4,d0.w*8),-(a5)
  334.     dbra    d6,.xloop
  335.  
  336.     addq    #4,a1
  337.     addq    #4,a2
  338.     addq    #4,a3
  339.     lea    80*4(a0),a0
  340.     lea    640(a0),a5
  341.     dbra    d7,.yloop
  342.  
  343. * Calculate new baseline of fire.
  344.     bsr    get_left_osci
  345.     movea.l    a0,a2
  346.     bsr    get_right_osci
  347.     lea    12*2(a0),a0
  348.     lea    12*2(a2),a2
  349.     lea    fire_buf,a1
  350.     moveq    #102-1,d7
  351.  
  352. .intlop:
  353.     move.b    (a0),d0
  354.     add.b    (a2),d0
  355.     lsr.b    #1,d0
  356.     move.b    d0,(a1)
  357.     addq    #2,a0
  358.     addq    #2,a2
  359.     lea    84(a1),a1
  360.     dbra    d7,.intlop
  361.     rts
  362.  
  363. * INPUT: a1: address of rotationtable
  364. PLOT_ROTATION:
  365.     movea.l    scr,a0
  366.     move.w    (a1)+,d7
  367.     Do_SinModulo    d7
  368.     mulu.w    #((1<<16)*320)/sintbllen,d7
  369.     swap    d7
  370.     move.w    d7,d6
  371.     subq.w    #1,d7
  372.     bmi.s    .endplotx
  373.  
  374. .loop:    move.w    #$f800,(a0)+
  375.     dbra    d7,.loop
  376.  
  377.     move.w    #320-1,d7
  378.     sub.w    d6,d7
  379.     bmi.s    .skipclr1
  380.     moveq    #0,d0
  381. .clrloop1:
  382.     move.w    d0,(a0)+
  383.     dbra    d7,.clrloop1
  384. .skipclr1:
  385. .endplotx:
  386.  
  387.     movea.l    scr,a0
  388.     adda.l    #320*2,a0
  389.     move.w    (a1)+,d7
  390.     Do_SinModulo    d7
  391.     mulu.w    #((1<<16)*320)/sintbllen,d7
  392.     swap    d7
  393.     move.w    d7,d6
  394.     subq.w    #1,d7
  395.     bmi.s    .endploty
  396.  
  397. .loop2:    move.w    #$03c0,(a0)+
  398.     dbra    d7,.loop2
  399.  
  400.     move.w    #320-1,d7
  401.     sub.w    d6,d7
  402.     bmi.s    .skipclr2
  403.     moveq    #0,d0
  404. .clrloop2:
  405.     move.w    d0,(a0)+
  406.     dbra    d7,.clrloop2
  407. .skipclr2:
  408. .endploty:
  409.  
  410.     movea.l    scr,a0
  411.     adda.l    #320*2*2,a0
  412.     move.w    (a1)+,d7
  413.     Do_SinModulo    d7
  414.     mulu.w    #((1<<16)*320)/sintbllen,d7
  415.     swap    d7
  416.     move.w    d7,d6
  417.     subq.w    #1,d7
  418.     bmi.s    .endplotz
  419.  
  420. .loop3:    move.w    #$001f,(a0)+
  421.     dbra    d7,.loop3
  422.  
  423.     move.w    #320-1,d7
  424.     sub.w    d6,d7
  425.     bmi.s    .skipclr3
  426.     moveq    #0,d0
  427. .clrloop3:
  428.     move.w    d0,(a0)+
  429.     dbra    d7,.clrloop3
  430. .skipclr3:
  431. .endplotz:
  432.     rts
  433.  
  434.  
  435. * INPUT: d0.w: X angle (a)
  436. *        d1.w: Y angle (b)
  437. *        d2.w: Z angle (c)
  438. PLOT_DOTBOX:
  439. * 1> rotate 3 axis.
  440.     Do_SinModulo    d0
  441.     Do_SinModulo    d1
  442.     Do_SinModulo    d2
  443.     movea.w    d0,a3
  444.     movea.w    d1,a4
  445.     movea.w    d2,a5
  446.     lea    sine_tbl,a2
  447.     lea    orgaxis_tbl,a1
  448.     lea    .rotaxis_tbl(pc),a0
  449.  
  450. * Do all rotations for X coordinate:
  451. * X := + x*cos(b)*cos(c)
  452. *      - y*cos(b)*sin(c)
  453. *      + z*sin(b)
  454.     Get_SinCos    a2,d1,d3,d4
  455.     Get_SinCos    a2,d2,d5,d6
  456.     muls.w    d4,d6                * / cos(b)*sin(c)
  457.     add.l    d6,d6                * |
  458.     swap    d6                * \
  459.     muls.w    d4,d5                * / cos(b)*sin(c)
  460.     add.l    d5,d5                * |
  461.     swap    d5                * \
  462.     moveq    #3-1,d7
  463. .xrotloop:
  464.     movem.w    (a1)+,d0-d2
  465.     muls.w    d6,d0
  466.     muls.w    d5,d1
  467.     muls.w    d3,d2
  468.     add.l    d2,d0
  469.     sub.l    d1,d0
  470.     add.l    d0,d0
  471.     swap    d0
  472.     move.w    d0,(a0)
  473.     addq    #6,a0
  474.     dbra    d7,.xrotloop
  475.     
  476. * Do all rotations for Y coordinate:
  477. * Y := + x*(sin(a)*sin(b)*cos(c)+cos(a)*sin(c))
  478. *      + y*(cos(a)*cos(c)-sin(a)*sin(b)*sin(c))
  479. *      - z*sin(a)*cos(b)
  480.     lea    -3*6(a1),a1
  481.     lea    -3*6+2(a0),a0
  482.     Get_SinCos    a2,a3,d0,d1
  483.     Get_Sin        a2,a4,d2
  484.     Get_SinCos    a2,a5,d4,d5
  485.     muls.w    d0,d2
  486.     add.l    d2,d2
  487.     swap    d2
  488.     muls.w    d2,d5
  489.     add.l    d5,d5
  490.     swap    d5
  491.     muls.w    d1,d4
  492.     add.l    d4,d4
  493.     swap    d4
  494.     add.w    d4,d5
  495.     move.w    d5,d3
  496.     ;Get_SinCos    a2,a3,d0,d1
  497.     Get_Sin        a2,a4,d2
  498.     Get_SinCos    a2,a5,d4,d5
  499.     muls.w    d1,d5
  500.     add.l    d5,d5
  501.     swap    d5
  502.     muls.w    d0,d2
  503.     add.l    d2,d2
  504.     swap    d2
  505.     muls.w    d2,d4
  506.     add.l    d4,d4
  507.     swap    d4
  508.     sub.w    d4,d5
  509.     Get_Cos        a2,a4,d4
  510.     muls.w    d0,d4
  511.     add.l    d4,d4
  512.     swap    d4
  513.     moveq    #3-1,d7
  514. .yrotloop:
  515.     movem.w    (a1)+,d0-d2
  516.     muls.w    d3,d0
  517.     muls.w    d5,d1
  518.     muls.w    d4,d2
  519.     sub.l    d2,d0
  520.     add.l    d1,d0
  521.     add.l    d0,d0
  522.     swap    d0
  523.     move.w    d0,(a0)
  524.     addq    #6,a0
  525.     dbra    d7,.yrotloop
  526.  
  527. * Do all rotations for Z coordinate:
  528. * Z := + x*(sin(a)*sin(c)-cos(a)*sin(b)*cos(c))
  529. *      + y*(cos(a)*sin(b)*sin(c)+sin(a)*cos(c))
  530. *      + z*cos(a)*cos(b)
  531.     lea    -3*6(a1),a1
  532.     lea    -3*6+2(a0),a0
  533.     Get_SinCos    a2,a3,d0,d1
  534.     Get_Sin        a2,a4,d2
  535.     Get_SinCos    a2,a5,d4,d5
  536.     muls.w    d0,d4
  537.     add.l    d4,d4
  538.     swap    d4
  539.     muls.w    d2,d1
  540.     add.l    d1,d1
  541.     swap    d1
  542.     muls.w    d1,d5
  543.     add.l    d5,d5
  544.     swap    d5
  545.     sub.w    d5,d4
  546.     move.w    d4,d3
  547.     ;Get_SinCos    a2,a3,d0,d1
  548.     Get_Sin        a2,a4,d2
  549.     Get_SinCos    a2,a5,d4,d5
  550.     muls.w    d1,d2
  551.     add.l    d2,d2
  552.     swap    d2
  553.     muls.w    d2,d4
  554.     add.l    d4,d4
  555.     swap    d4
  556.     muls.w    d0,d5
  557.     add.l    d5,d5
  558.     swap    d5
  559.     add.w    d4,d5
  560.     Get_Cos        a2,a4,d4
  561.     muls.w    d1,d4
  562.     add.l    d4,d4
  563.     swap    d4
  564.     moveq    #3-1,d7
  565. .zrotloop:
  566.     movem.w    (a1)+,d0-d2
  567.     muls.w    d3,d0
  568.     muls.w    d6,d1
  569.     muls.w    d4,d2
  570.     add.l    d2,d0
  571.     add.l    d1,d0
  572.     add.l    d0,d0
  573.     swap    d0
  574.     move.w    d0,(a0)
  575.     addq    #6,a0
  576.     dbra    d7,.zrotloop
  577.  
  578. * 2> Calculate start corner vertex.
  579.     lea    .rotaxis_tbl(pc),a0
  580.     moveq    #0,d0
  581.     movea.l    d0,a1
  582.     movea.l    d0,a2
  583.     movea.l    d0,a3
  584.     suba.w    (a0)+,a1
  585.     suba.w    (a0)+,a2
  586.     suba.w    (a0)+,a3
  587.     suba.w    (a0)+,a1
  588.     suba.w    (a0)+,a2
  589.     suba.w    (a0)+,a3
  590.     suba.w    (a0)+,a1
  591.     suba.w    (a0)+,a2
  592.     suba.w    (a0)+,a3
  593.     move.l    a1,d0
  594.     move.l    a2,d1
  595.     move.l    a3,d2
  596.     add.w    d0,d0    ;asr.w    #1,d0
  597.     add.w    d1,d1    ;asr.w    #1,d1
  598.     add.w    d2,d2    ;asr.w    #1,d2
  599.     movem.w    d0-d2,.startvertex_tbl
  600.  
  601. * 3> Calculate fixedpoint step values to interpolate between corners.
  602.     lea    .rotaxis_tbl(pc),a1
  603.     lea    .stepaxis_tbl(pc),a0
  604.     moveq    #3*3-1,d7
  605. .calcsteploop:
  606.     move.w    (a1)+,d0
  607.     ext.l    d0
  608.     divs.w    #boxsteps-1,d0
  609.     lsl.w    #2,d0
  610.     move.w    d0,(a0)+
  611.     dbra    d7,.calcsteploop
  612.  
  613. * 4> Calculate the positions of all points in the box and plot them!
  614.     movea.l    scr,a0
  615.     lea    gradient_dat,a5
  616.     lea    xylookup_tbl,a6
  617.     lea    .stepaxis_tbl(pc),a1
  618.     lea    .startvertex_tbl(pc),a2
  619.      movem.w    (a1),d3-d4
  620.     addq    #6,a1
  621.     moveq    #boxsteps-1,d7
  622.     movem.w    (a2),a3-a4
  623.     moveq    #0,d2
  624.     moveq    #0,d5
  625.  
  626. .zloop:    swap    d7
  627.     move.w    #boxsteps-1,d7
  628.     move.l    a3,d0
  629.     move.l    a4,d1
  630.  
  631. .yloop:    moveq    #boxsteps-1,d6
  632.  
  633. .xloop:    move.w    d1,d5
  634.     move.w    d0,d2
  635.      lsr.w    #8,d2
  636.     move.b    d2,d5
  637.     move.w    (a6,d5.l*2),d2
  638.     bmi.s    .noplot
  639.     move.l    (a5),(a0,d2.l*2)
  640. .noplot:
  641.     add.w    d3,d0
  642.     add.w    d4,d1
  643.     dbra    d6,.xloop
  644.  
  645.     lea    boxcolorstep*2(a5),a5
  646.     movem.w    (a1),d0-d1
  647.     adda.l    d0,a3
  648.     adda.l    d1,a4
  649.     move.l    a3,d0
  650.     move.l    a4,d1
  651.     dbra    d7,.yloop
  652.  
  653.     lea    2*((boxcolorstep-1)*64+(64-boxcolorstep*boxsteps))(a5),a5
  654.     movem.w    (a2),a3-a4
  655.     movem.w    6(a1),d0-d1
  656.     adda.l    d0,a3
  657.     adda.l    d1,a4
  658.     movem.w    a3-a4,(a2)
  659.     swap    d7
  660.     dbra    d7,.zloop 
  661.  
  662.     rts
  663.  
  664. .rotaxis_tbl:
  665.     DS.W    3*3
  666. .stepaxis_tbl:
  667.     DS.W    3*3
  668. .startvertex_tbl:
  669.     DS.W    3
  670.  
  671. * INPUT: a0: destination screenaddress
  672. *        a1: source screenaddress
  673. BLUR_320100:
  674.     move.w    #5*100-1,d7
  675.     move.l    #%01111011111011110111101111101111,d6
  676.     moveq    #4*4,d5
  677. .loop:    REPT    8
  678.     movem.l    (a1)+,d0-d3
  679.     lsr.l    #1,d0
  680.     and.l    d6,d0
  681.     lsr.l    #1,d1
  682.     and.l    d6,d1
  683.     lsr.l    #1,d2
  684.     and.l    d6,d2
  685.     lsr.l    #1,d3
  686.     and.l    d6,d3
  687.     movem.l    d0-d3,(a0)
  688.     adda.l    d5,a0
  689.     ENDR
  690.     dbra    d7,.loop
  691.     rts
  692.  
  693. ******** DATA SECTION ********
  694.  
  695.     DATA
  696.  
  697. orgaxis_tbl:
  698.     DC.W    boxwidth,0,0
  699.     DC.W    0,boxwidth,0
  700.     DC.W    0,0,boxwidth
  701. gradient_dat:
  702.     INCBIN    GRADIENT.RAW
  703. sine_tbl:
  704.     INCBIN    SINUS.DAT
  705.  
  706. ******** RESERVED SECTION ********
  707.  
  708.     BSS
  709.  
  710.     DS.W    1
  711. scr:    DS.L    3
  712. scr_buf:
  713.     DS.W    320*100*3
  714. xylookup_tbl:
  715.     DS.W    256*256
  716. firecolor_tbl:
  717.     DS.L    2*64*256
  718. fire_buf:
  719.     DS.B    102*84                * Y*X