home *** CD-ROM | disk | FTP | other *** search
/ Fujiology Archive / fujiology_archive_v1_0.iso / !FALCON / LINEOUT / DELTA.ZIP / DELTASRC.ZIP / DELTA.SRC / RADIALT.SO < prev    next >
Text File  |  2002-12-30  |  16KB  |  781 lines

  1. ; Radial blur. 160*100 hicolor.
  2. ;
  3. ; Needs at least 4 pixeladds to look good. Increasingly small scalefactors
  4. ; give best results (long lines).
  5. ;
  6. ; It's best to shift entire picture 3 bits right. But this gives very little
  7. ; color info (2bit R, 3 bits G, 2 bits B) So it might be best to make a
  8. ; 24b picture out of a 15b picture? Would be more precise. Slightly slower
  9. ; tho.
  10. ;
  11. ; Maybe it's best to prescale a number of pictures, to avoid extra
  12. ; mem reads and lookups. Maybe this is cachemiss city. Hell, we'll see
  13. ; when it gets too slow. 
  14. ;
  15. ; Hhhmm. It seems it actually is too slow. 6 adds looks great, but slows
  16. ; down on CT2 to 25fps in vga100. Snails!! Prescaling would be the best
  17. ; option to me. At least you don't need nasty quadrants and offsets anymore
  18. ; so it basicly be alot faster. An additional goodie, is that you can do
  19. ; 2 pixels in one go. It would seem to me that this would almost double
  20. ; speed and I need that.
  21. ;
  22. ; Ah! another solution. It seems by doing half the indexing and using longs
  23. ; in one go, it also still looks quite good and is much faster (40fps!).
  24. ; However, this might be due to TTRAM being much better for longword stuff!
  25. ;
  26. ; Best so far is: prescaling and just adding pictures toghether longwise.
  27. ; Seems hyperfast. Something like 78fps on CT2 vga100.
  28. ; Well.. It might be fast, but there are some contra's: very memory
  29. ; intensive, very low colordepth.
  30. ;
  31. ; With all methods thusfar it seems best to keep focus on the center.
  32. ; Otherwise you can clearly see the multiple picture copies.
  33. ;
  34. ; Now trying 8bit mode. I think this might really improve shit!
  35. ;
  36. ; 8bit mode looks a bit shitty. I think the picture causes it. I think
  37. ; it must be damn smooth and spread out. This would give a 'blobbish'
  38. ; effect which looks great (judging from a gba demo I saw).
  39. ;
  40. ; I redid all the scales with equates to make experiments easy. Now it
  41. ; seems the scales must really be low (big mem use!) and it looks quite
  42. ; cool in highcolor!
  43.  
  44. ;======= OBJECT EQUATES ========
  45.  
  46. Radial.DARKEN:    =    1                ; 1: darken the picture, 0: leave it
  47.  
  48. Radial.SCALES:    =    5
  49.  
  50. Radial.SCALE1:    =    $EC    ;$E8
  51. Radial.SCALE2:    =    $D8    ;$D0
  52. Radial.SCALE3:    =    $C4    ;$B8
  53. Radial.SCALE4:    =    $B0    ;$A0
  54. Radial.SCALE5:    =    $9C    ;$88
  55.  
  56. Radial.W1:    =    256*256/Radial.SCALE1+1
  57. Radial.W2:    =    256*256/Radial.SCALE2+1
  58. Radial.W3:    =    256*256/Radial.SCALE3+1
  59. Radial.W4:    =    256*256/Radial.SCALE4+1
  60. Radial.W5:    =    256*256/Radial.SCALE5+1
  61.  
  62. Radial.H1:    =    200*256/Radial.SCALE1
  63. Radial.H2:    =    200*256/Radial.SCALE2
  64. Radial.H3:    =    200*256/Radial.SCALE3
  65. Radial.H4:    =    200*256/Radial.SCALE4
  66. Radial.H5:    =    200*256/Radial.SCALE5
  67.  
  68. Radial.M1:    =    Radial.W1*(Radial.H1/2-50)+Radial.W1/2-80
  69. Radial.M2:    =    Radial.W2*(Radial.H2/2-50)+Radial.W2/2-80
  70. Radial.M3:    =    Radial.W3*(Radial.H3/2-50)+Radial.W3/2-80
  71. Radial.M4:    =    Radial.W4*(Radial.H4/2-50)+Radial.W4/2-80
  72. Radial.M5:    =    Radial.W5*(Radial.H5/2-50)+Radial.W5/2-80
  73.  
  74.             RSRESET
  75. Radial.pic:        RS.W    256*200
  76. Radial.scaledPic1:    RS.W    Radial.W1*Radial.H1
  77. Radial.scaledPic2:    RS.W    Radial.W2*Radial.H2
  78. Radial.scaledPic3:    RS.W    Radial.W3*Radial.H3
  79. Radial.scaledPic4:    RS.W    Radial.W4*Radial.H4
  80. Radial.scaledPic5:    RS.W    Radial.W5*Radial.H5+1000
  81. Radial.BLOCK_SIZE:    RS.B    0
  82.  
  83. ;======= OBJECT TABLE ========
  84.  
  85. ; Must be first in object!!
  86. Radial.table:
  87.     DC.L    Radial.mainLoop
  88.     DC.L    Radial.init
  89.     DC.L    Radial.setRes
  90. ; Add more addresses here..
  91.     DC.L    0
  92.  
  93.     IFND    DEMO_SYSTEM
  94.     INCLUDE    ..\DELTA\SFLY_DSP.S
  95.     TEXT
  96.     ENDC
  97.  
  98. ;======= RESOLUTION SETTING ROUTINE ========
  99.  
  100. Radial.setRes:
  101.     IFEQ    testmode
  102.     move.w    monitormode,d0
  103.     cmpi.w    #vga60,d0
  104.     beq.s    .vga60
  105.     cmpi.w    #vga100,d0
  106.     beq.s    .vga100
  107.     cmpi.w    #rgb50,d0
  108.     beq.s    .rgb50
  109. ; Unknown monitormode..
  110.     rts
  111. .vga60:    bra.l    vga60_16bit_160_200
  112. .vga100:bra.l    vga100_16bit_160_100
  113. .rgb50:    bra.l    rgb50_16bit_320_100
  114.     ENDC
  115.     rts
  116.  
  117. ;======= INIT SUBROUTINE ========
  118.  
  119. ; OUTPUT:
  120. ; d0.l: =0 all clear, <0 error
  121. Radial.init:
  122.     move.l    #Radial.BLOCK_SIZE,d0
  123.     bsr.l    Mem.register
  124.  
  125. .success:
  126.     moveq    #0,d0
  127.     rts
  128. .error:    moveq    #-1,d0
  129.     rts
  130.  
  131. ;======= REALTIME INIT SUBROUTINE ========
  132.  
  133. Radial.realtimeInit:
  134.     move.l    #rts,vbl_gfx
  135.  
  136.     bsr.l    Mem.getBlock
  137.     move.l    d0,Radial.baseAdr
  138.  
  139.     bsr.l    HumanFly.init
  140.  
  141.     lea    Viewport.settingsTable,a0
  142.     move.w    #256,Viewport.XSCREEN(a0)
  143.     move.w    #200,Viewport.YSCREEN(a0)
  144.     move.w    #0,Viewport.XSTART(a0)
  145.     move.w    #0,Viewport.YSTART(a0)
  146.     move.w    #256,Viewport.XEND(a0)
  147.     move.w    #200,Viewport.YEND(a0)
  148.     move.w    #128,Viewport.XCENTER(a0)
  149.     move.w    #100,Viewport.YCENTER(a0)
  150.     move.w    #256+32,Viewport.ASPECT(a0)
  151.     move.w    #$100,Viewport.FOCAL(a0)
  152.     bsr.l    Viewport.update
  153.  
  154.     lea    Radial.colInstTable,a1
  155.     lea    Radial.pal,a0
  156.     bsr.l    Pal.makeGradientHc
  157.  
  158.     lea    Radial.textureTable,a0
  159.     lea    Radial.pal,a1
  160.     bsr.l    Polygon.init
  161.  
  162.     bsr    Radial.clearScaleBuf
  163.     bsr    Radial.initPic
  164.  
  165.     IFNE    Radial.DARKEN
  166.     bsr    Radial.darkenPicture
  167.     ENDC
  168.  
  169.     bsr    Radial.fillScaleTables
  170.  
  171. .end:    rts
  172.  
  173. ;======= SCREENINIT SUBROUTINE ========
  174.  
  175. Radial.initScreen:
  176.     rts
  177.  
  178. ;======= MAINLOOP SUBROUTINE ========
  179.  
  180. Radial.mainLoop:
  181.     move.w    $0468.w,.old468
  182.  
  183.     move.l    frmcnt,d0
  184.     sub.l    lastframecount,d0
  185.     bne.s    .end_realtime_init
  186.     move.l    d0,-(sp)
  187.     bsr    Radial.realtimeInit
  188.     move.l    (sp)+,d0
  189. .end_realtime_init:
  190.     cmpi.l    #3,d0
  191.     bhs.s    .end_screeninit
  192.     move.l    d0,-(sp)
  193.     bsr    Radial.initScreen
  194.     move.l    (sp)+,d0
  195. .end_screeninit:
  196.  
  197. .scale:    subq.l    #1,d0
  198.     bmi.s    .still
  199.     cmpi.l    #Radial.SCALES,d0
  200.     bhi.s    .end_scaling
  201.     beq.s    .start
  202.     move.l    d0,d7
  203.     bsr    Radial.scalePic
  204. .still:    clr.w    d0
  205.     clr.w    d1
  206.     bra.s    .paint
  207. .start:    move.w    $04BC.w,Radial.startTime
  208. .end_scaling:
  209.  
  210.     bsr    Radial.calcPicCenter
  211.  
  212. .paint:    bsr    Radial.blurPics
  213.  
  214.     IFEQ    testmode
  215.     lea    scr,a0
  216.     move.l    (a0)+,d0
  217.     move.l    (a0)+,d1
  218.     move.l    (a0),-4(a0)
  219.     move.l    d0,(a0)
  220.     move.l    d1,-8(a0)
  221.     move.l    d0,d1
  222.     lsr.w    #8,d0
  223.     move.l    d0,$ffff8200.w
  224.     move.b    d1,$ffff820d.w
  225.     ENDC
  226.  
  227.     move.w    .old468(pc),d0
  228. .wait:    cmp.w    $0468.w,d0
  229.     beq.s    .wait
  230.  
  231.     move.l    frmcnt,d0
  232.     sub.l    lastframecount,d0
  233.     bne.s    .res_done
  234.     bsr    Radial.setRes
  235. .res_done:
  236.  
  237.     rts
  238.  
  239. .old468:DC.W    0
  240.  
  241. ;======= OBJECT SUBROUTINES ========
  242.  
  243. Radial.initPic:
  244. ; Paint delta logo..
  245.     movea.l    Radial.baseAdr,a0
  246.     adda.l    #Radial.pic,a0
  247.     bsr.l    Primitive.setScreenbuffer
  248.  
  249.     lea    Radial.gouPoly,a1
  250.     bsr.l    Polygon.paintClippedGouraudshaded
  251.     lea    Radial.gouPoly2,a1
  252.     bsr.l    Polygon.paintClippedGouraudshaded
  253.     lea    Radial.gouPoly3,a1
  254.     bsr.l    Polygon.paintClippedGouraudshaded
  255.  
  256. ; Put some puke on the background..
  257.     lea    Texture.8bTexture1,a1
  258.     movea.l    Radial.baseAdr,a0
  259.     adda.l    #Radial.pic,a0
  260.     lea    FlareGen.fogPal,a2
  261.     move.w    #256*200-1,d7
  262.     clr.l    d0
  263. .loop:    move.b    (a1)+,d0
  264.     lsr.w    d0
  265.     move.w    (a2,d0.l*2),d1
  266.     move.w    (a0),d4
  267.     move.w    d1,d2
  268.     move.w    d1,d3
  269.     move.w    d4,d5
  270.     move.w    d4,d6
  271.     andi.w    #$F800,d1
  272.     andi.w    #$07E0,d2
  273.     andi.w    #$001F,d3
  274.     andi.w    #$F800,d4
  275.     andi.w    #$07E0,d5
  276.     andi.w    #$001F,d6
  277.     add.w    d1,d4
  278.     bcc.s    .r_ok
  279.     move.w    #$F800,d4
  280. .r_ok:    add.w    d2,d5
  281.     cmpi.w    #$07E0,d5
  282.     blt.s    .g_ok
  283.     move.w    #$07E0,d5
  284. .g_ok:    add.w    d3,d6
  285.     cmpi.w    #$001F,d6
  286.     blt.s    .b_ok
  287.     move.w    #$001F,d6
  288. .b_ok:    or.w    d4,d6
  289.     or.w    d5,d6
  290.     move.w    d6,(a0)+
  291.     dbf    d7,.loop
  292.  
  293.     rts
  294.  
  295. Radial.clearScaleBuf:
  296.     movea.l    Radial.baseAdr,a0
  297.     clr.l    d0
  298.     move.l    #Radial.BLOCK_SIZE/8-1,d7
  299. .loop:    move.l    d0,(a0)+
  300.     move.l    d0,(a0)+
  301.     subq.l    #1,d7
  302.     bne.s    .loop
  303.     rts
  304.  
  305. Radial.darkenPicture:
  306.     movea.l    Radial.baseAdr,a0
  307.     adda.l    #Radial.pic,a0
  308.     move.w    #256*200-1,d7
  309.  
  310. .loop:    clr.l    d0
  311.     clr.l    d1
  312.     clr.l    d2
  313.     move.w    (a0),d0
  314.     move.w    d0,d1
  315.     move.w    d0,d2
  316.     andi.w    #$F800,d0
  317.     andi.w    #$07E0,d1
  318.     andi.w    #$001F,d2
  319.     add.w    d2,d2
  320.  
  321.     divu.w    #Radial.SCALES+1,d0
  322.     divu.w    #Radial.SCALES+1,d1
  323.     divu.w    #Radial.SCALES+1,d2
  324.  
  325.     btst    #10,d0
  326.     beq.s    .r_rounded
  327.     addi.w    #$0400,d0
  328. .r_rounded:
  329.     btst    #4,d1
  330.     beq.s    .g_rounded
  331.     addi.w    #$0020,d1
  332.     cmpi.w    #$07E0/(Radial.SCALES+1),d1
  333.     blt.s    .g_rounded
  334.     move.w    #($07E0/(Radial.SCALES+1))&$07E0,d1
  335. .g_rounded:
  336.     lsr.w    d2
  337.     bcc.s    .b_rounded
  338.     addq.w    #1,d2
  339. .b_rounded:
  340.  
  341.     andi.w    #$F800,d0
  342.     andi.w    #$07E0,d1
  343.     andi.w    #$001F,d2
  344.     or.w    d1,d0
  345.     or.w    d2,d0
  346.     move.w    d0,(a0)+
  347.     dbf    d7,.loop
  348.     rts
  349.  
  350. ; Output prescaled pictures in various sizes.
  351. Radial.scaleStuff:
  352. ; Make pointer table to scaled piccies.
  353.     lea    Radial.picAddys,a0
  354.     movea.l    Radial.baseAdr,a1
  355.     movea.l    a1,a2
  356.     adda.l    #Radial.scaledPic1,a2
  357.     move.l    a2,(a0)+
  358.     movea.l    a1,a2
  359.     adda.l    #Radial.scaledPic2,a2
  360.     move.l    a2,(a0)+
  361.     movea.l    a1,a2
  362.     adda.l    #Radial.scaledPic3,a2
  363.     move.l    a2,(a0)+
  364.     movea.l    a1,a2
  365.     adda.l    #Radial.scaledPic4,a2
  366.     move.l    a2,(a0)+
  367.     movea.l    a1,a2
  368.     adda.l    #Radial.scaledPic5,a2
  369.     move.l    a2,(a0)+
  370.  
  371.     clr.l    d7
  372.  
  373. ; Scale the shit!
  374. .loop:    clr.l    d3
  375.     move.w    (Radial.scaleTable,d7.l*2),d0
  376.     add.w    d0,d0
  377.     movea.l    (Radial.picAddys,d7.l*4),a0
  378.     movea.l    Radial.baseAdr,a1
  379.     adda.l    #Radial.pic,a1
  380.     clr.w    d2
  381.  
  382. ; Measure linewidth (in bytes).
  383.     clr.w    d1
  384.     moveq    #0,d6
  385. .count_width_loop:
  386.     addq.w    #1,d6
  387.     add.w    d0,d1
  388.     bcc.s    .count_width_loop
  389.     subi.w    #160,d6
  390.     add.w    d6,d6
  391.     move.w    d6,(Radial.widthTable,d7.l*2)
  392.  
  393. ; Scale picture..
  394. .yloop:    clr.w    d1
  395.  
  396. .xloop:    move.w    d1,d4
  397.     move.w    d2,d3
  398.     lsr.w    #8,d4
  399.     move.b    d4,d3
  400.     move.w    (a1,d3.l*2),(a0)+
  401.     add.w    d0,d1
  402.     bcc.s    .xloop
  403.  
  404.     add.w    d0,d2
  405.     cmpi.w    #200<<8,d2
  406.     blo.s    .yloop
  407.  
  408.     addq.w    #1,d7
  409.     cmpi.w    #Radial.SCALES,d7
  410.     blt.s    .loop
  411.     rts
  412.  
  413. ; Fills picadr- and width- tables.
  414. Radial.fillScaleTables:
  415. ; Make pointer table to scaled piccies.
  416.     lea    Radial.picAddys,a0
  417.     movea.l    Radial.baseAdr,a1
  418.     movea.l    a1,a2
  419.     adda.l    #Radial.scaledPic1,a2
  420.     move.l    a2,(a0)+
  421.     movea.l    a1,a2
  422.     adda.l    #Radial.scaledPic2,a2
  423.     move.l    a2,(a0)+
  424.     movea.l    a1,a2
  425.     adda.l    #Radial.scaledPic3,a2
  426.     move.l    a2,(a0)+
  427.     movea.l    a1,a2
  428.     adda.l    #Radial.scaledPic4,a2
  429.     move.l    a2,(a0)+
  430.     movea.l    a1,a2
  431.     adda.l    #Radial.scaledPic5,a2
  432.     move.l    a2,(a0)+
  433.  
  434.  
  435.     clr.l    d7
  436.  
  437. .loop:    move.w    (Radial.scaleTable,d7.l*2),d0
  438.     add.w    d0,d0
  439.  
  440. ; Measure linewidth (in bytes).
  441.     clr.w    d1
  442.     moveq    #0,d6
  443. .count_width_loop:
  444.     addq.w    #1,d6
  445.     add.w    d0,d1
  446.     bcc.s    .count_width_loop
  447.     subi.w    #160,d6
  448.     add.w    d6,d6
  449.     move.w    d6,(Radial.widthTable,d7.l*2)
  450.  
  451.     addq.w    #1,d7
  452.     cmpi.w    #Radial.SCALES,d7
  453.     blt.s    .loop
  454.     rts
  455.  
  456.  
  457. ; Scale the shit!
  458. ; INPUT:
  459. ; d7.l=picnum
  460. Radial.scalePic:
  461.     clr.l    d3
  462.     move.w    (Radial.scaleTable,d7.l*2),d0
  463.     add.w    d0,d0
  464.     movea.l    (Radial.picAddys,d7.l*4),a0
  465.     movea.l    Radial.baseAdr,a1
  466.     adda.l    #Radial.pic,a1
  467.     clr.w    d2
  468.  
  469. ; Scale picture..
  470. .yloop:    clr.w    d1
  471.  
  472. .xloop:    move.w    d1,d4
  473.     move.w    d2,d3
  474.     lsr.w    #8,d4
  475.     move.b    d4,d3
  476.     move.w    (a1,d3.l*2),(a0)+
  477.     add.w    d0,d1
  478.     bcc.s    .xloop
  479.  
  480.     add.w    d0,d2
  481.     cmpi.w    #200<<8,d2
  482.     blo.s    .yloop
  483.  
  484.     rts
  485.  
  486. ; OUTPUT:
  487. ; a0: centered picture
  488. Radial.calcPicAddy:
  489.     movea.l    Radial.baseAdr,a0
  490.     adda.l    #Radial.pic,a0
  491.     move.w    $04BC.w,d0
  492.     move.w    d0,d1
  493. ;    mulu.w    #3,d0
  494.     mulu.w    #5,d1
  495.     lsr.l    #2,d1
  496.     Do_SinModulo    d0
  497.     Do_SinModulo    d1
  498.     Get_Sin    sine_tbl,d0,d0
  499.     Get_Sin    sine_tbl,d1,d1
  500.     muls.w    #256-160,d0
  501.     muls.w    #200-100,d1
  502.     swap    d0
  503.     swap    d1
  504.     addi.w    #(256-160)/2,d0
  505.     addi.w    #(200-100)/2,d1
  506.     ext.l    d0
  507.     mulu.w    #256,d1
  508.     add.l    d0,d1
  509.     lea    (a0,d1.l*2),a0
  510.     rts
  511.  
  512. ; OUTPUT:
  513. ; d0.w=x center (16b signed frac)
  514. ; d1.w=y center (16b signed frac)
  515. Radial.calcPicCenter:
  516.     move.w    $04BC.w,d0
  517.     move.w    d0,d2
  518.     move.w    d0,d1
  519. ;    mulu.w    #3,d0
  520.     mulu.w    #5,d1
  521.     lsr.l    #2,d1
  522.     Do_SinModulo    d0
  523.     Do_SinModulo    d1
  524.     Get_Sin    sine_tbl,d0,d0
  525.     Get_Sin    sine_tbl,d1,d1
  526.  
  527.     sub.w    Radial.startTime,d2
  528.     lsr.w    #2,d2
  529.     cmpi.w    #256,d2
  530.     blt.s    .ok
  531.     move.w    #256,d2
  532. .ok:
  533.  
  534.     muls.w    d2,d0
  535.     muls.w    d2,d1
  536.     asr.l    #8,d0
  537.     asr.l    #8,d1
  538.     rts
  539.  
  540. ; INPUT:
  541. ; d0.w=x center, d1.w=y center (signed frac)
  542. Radial.blurPics:
  543.     movea.l    Radial.baseAdr,a0
  544.     adda.l    #Radial.pic+(256*50+128-80)*2,a0
  545.     clr.l    d3
  546.     move.w    d0,d2
  547.     move.w    d1,d3
  548.     muls.w    #256-160,d2
  549.     muls.w    #200-100,d3
  550.     swap    d2
  551.     swap    d3
  552.     ext.l    d2
  553.     ext.l    d3
  554.     lsl.l    #8,d3
  555.     add.l    d2,d3
  556.     lea    (a0,d3.l*2),a0
  557.  
  558.     movea.l    Radial.baseAdr,a1
  559.     adda.l    #Radial.scaledPic1+Radial.M1*2,a1
  560.     clr.l    d3
  561.     move.w    d0,d2
  562.     move.w    d1,d3
  563.     muls.w    #(256-160)*256/Radial.SCALE1,d2
  564.     muls.w    #(200-100)*256/Radial.SCALE1,d3
  565.     swap    d2
  566.     swap    d3
  567.     ext.l    d2
  568.     muls.w    #Radial.W1,d3
  569.     add.l    d2,d3
  570.     lea    (a1,d3.l*2),a1
  571.  
  572.     movea.l    Radial.baseAdr,a2
  573.     adda.l    #Radial.scaledPic2+Radial.M2*2,a2
  574.     clr.l    d3
  575.     move.w    d0,d2
  576.     move.w    d1,d3
  577.     muls.w    #(256-160)*256/Radial.SCALE2,d2
  578.     muls.w    #(200-100)*256/Radial.SCALE2,d3
  579.     swap    d2
  580.     swap    d3
  581.     ext.l    d2
  582.     muls.w    #Radial.W2,d3
  583.     add.l    d2,d3
  584.     lea    (a2,d3.l*2),a2
  585.  
  586.     movea.l    Radial.baseAdr,a3
  587.     adda.l    #Radial.scaledPic3+Radial.M3*2,a3
  588.     clr.l    d3
  589.     move.w    d0,d2
  590.     move.w    d1,d3
  591.     muls.w    #(256-160)*256/Radial.SCALE3,d2
  592.     muls.w    #(200-100)*256/Radial.SCALE3,d3
  593.     swap    d2
  594.     swap    d3
  595.     ext.l    d2
  596.     muls.w    #Radial.W3,d3
  597.     add.l    d2,d3
  598.     lea    (a3,d3.l*2),a3
  599.  
  600.     movea.l    Radial.baseAdr,a4
  601.     adda.l    #Radial.scaledPic4+Radial.M4*2,a4
  602.     clr.l    d3
  603.     move.w    d0,d2
  604.     move.w    d1,d3
  605.     muls.w    #(256-160)*256/Radial.SCALE4,d2
  606.     muls.w    #(200-100)*256/Radial.SCALE4,d3
  607.     swap    d2
  608.     swap    d3
  609.     ext.l    d2
  610.     muls.w    #Radial.W4,d3
  611.     add.l    d2,d3
  612.     lea    (a4,d3.l*2),a4
  613.  
  614.     movea.l    Radial.baseAdr,a5
  615.     adda.l    #Radial.scaledPic5+Radial.M5*2,a5
  616.     clr.l    d3
  617.     move.w    d0,d2
  618.     move.w    d1,d3
  619.     muls.w    #(256-160)*256/Radial.SCALE5,d2
  620.     muls.w    #(200-100)*256/Radial.SCALE5,d3
  621.     swap    d2
  622.     swap    d3
  623.     ext.l    d2
  624.     muls.w    #Radial.W5,d3
  625.     add.l    d2,d3
  626.     lea    (a5,d3.l*2),a5
  627.  
  628.     movea.l    scr,a6
  629.     moveq    #100-1,d7
  630.  
  631.     move.w    monitormode,d0
  632.     cmpi.w    #vga60,d0
  633.     beq.s    RadialBlur.paintVga60
  634.     cmpi.w    #vga100,d0
  635.     beq.s    RadialBlur.paintVga100
  636.     cmpi.w    #rgb50,d0
  637.     beq.s    RadialBlur.paintRgb50
  638. ; Unknown monitormode..
  639. ;    rts
  640.  
  641. RadialBlur.paintVga100:
  642. .yloop:    moveq    #80-1,d6
  643.  
  644. .xloop:    move.l    (a0)+,d0
  645.     add.l    (a1)+,d0
  646.     add.l    (a2)+,d0
  647.     add.l    (a3)+,d0
  648.     add.l    (a4)+,d0
  649.     add.l    (a5)+,d0
  650.     move.l    d0,(a6)+
  651.     dbf    d6,.xloop
  652.  
  653.     movem.w    Radial.widthTable,d1-d5
  654.     adda.w    #(256-160)*2,a0
  655.     adda.l    d1,a1
  656.     adda.l    d2,a2
  657.     adda.l    d3,a3
  658.     adda.l    d4,a4
  659.     adda.l    d5,a5
  660.     dbf    d7,.yloop
  661.     rts
  662.  
  663. RadialBlur.paintVga60:
  664. .yloop:    moveq    #80-1,d6
  665.  
  666. .xloop:    move.l    (a0)+,d0
  667.     add.l    (a1)+,d0
  668.     add.l    (a2)+,d0
  669.     add.l    (a3)+,d0
  670.     add.l    (a4)+,d0
  671.     add.l    (a5)+,d0
  672.     move.l    d0,160*2(a6)
  673.     move.l    d0,(a6)+
  674.     dbf    d6,.xloop
  675.  
  676.     movem.w    Radial.widthTable,d1-d5
  677.     adda.w    #(256-160)*2,a0
  678.     adda.l    d1,a1
  679.     adda.l    d2,a2
  680.     adda.l    d3,a3
  681.     adda.l    d4,a4
  682.     adda.l    d5,a5
  683.     adda.w    #160*2,a6
  684.     dbf    d7,.yloop
  685.     rts
  686.  
  687. RadialBlur.paintRgb50:
  688. .yloop:    moveq    #80-1,d6
  689.  
  690. .xloop:    move.l    (a0)+,d0
  691.     add.l    (a1)+,d0
  692.     add.l    (a2)+,d0
  693.     add.l    (a3)+,d0
  694.     add.l    (a4)+,d0
  695.     add.l    (a5)+,d0
  696.     move.l    d0,d1
  697.     swap    d1
  698.     move.w    d0,d1
  699.     move.l    d1,(a6)+
  700.     move.w    d0,(a6)+
  701.     move.w    d0,(a6)+
  702.     dbf    d6,.xloop
  703.  
  704.     movem.w    Radial.widthTable,d1-d5
  705.     adda.w    #(256-160)*2,a0
  706.     adda.l    d1,a1
  707.     adda.l    d2,a2
  708.     adda.l    d3,a3
  709.     adda.l    d4,a4
  710.     adda.l    d5,a5
  711.     dbf    d7,.yloop
  712.     rts
  713.  
  714. ;======= OBJECT DATA ========
  715.  
  716.     DATA
  717.  
  718. Radial.textureTable:
  719.     DC.L    0
  720.  
  721. Radial.gouPoly:
  722.     DC.W    0
  723.     DC.W    4
  724.     DC.W    -025+128,+030+100,000
  725.     DC.W    -005+128,-010+100,000
  726.     DC.W    +000+128,-060+100,255
  727.     DC.W    -060+128,+060+100,255
  728. Radial.gouPoly2:
  729.     DC.W    0
  730.     DC.W    4
  731.     DC.W    +000+128,-060+100,255
  732.     DC.W    -005+128,-010+100,000
  733.     DC.W    +015+128,+030+100,000
  734.     DC.W    +060+128,+060+100,255
  735. Radial.gouPoly3:
  736.     DC.W    0
  737.     DC.W    4
  738.     DC.W    -060+128,+060+100,255
  739.     DC.W    +060+128,+060+100,255
  740.     DC.W    +015+128,+030+100,000
  741.     DC.W    -025+128,+030+100,000
  742.  
  743. Radial.scaleTable:
  744.     DC.W    Radial.SCALE1/2
  745.     DC.W    Radial.SCALE2/2
  746.     DC.W    Radial.SCALE3/2
  747.     DC.W    Radial.SCALE4/2
  748.     DC.W    Radial.SCALE5/2
  749.  
  750. Radial.colInstTable:
  751.     DC.W    (.end-.start)/4-1
  752.     DC.W    4
  753. .start:    DC.L    $00000000
  754.     DC.L    $7f7f007f
  755.     DC.L    $ffff00ff
  756.     DC.L    $ffff00ff
  757.     DC.L    $FFFF00FF
  758.     DC.L    $ffff00ff
  759.     DC.L    $ffff00ff
  760.     DC.L    $7f7f007F
  761.     DC.L    $00000000
  762. .end:
  763.  
  764. ;======= OBJECT RESERVES ========
  765.  
  766.     BSS
  767.  
  768. Radial.pal:
  769.     DS.W    128
  770. Radial.widthTable:
  771.     DS.W    Radial.SCALES
  772. Radial.picAddys:
  773.     DS.L    Radial.SCALES
  774. Radial.baseAdr:
  775.     DS.L    1
  776. Radial.startTime:
  777.     DS.W    1
  778. Radial.rectTable:
  779.     DS.W    100
  780.  
  781. ;======= END OF DEMO-EFFECT OBJECT ========