home *** CD-ROM | disk | FTP | other *** search
/ Fujiology Archive / fujiology_archive_v1_0.iso / !FALCON / LINEOUT / DELTA.ZIP / DELTASRC.ZIP / DELTA.SRC / MINIBLBS.SO < prev    next >
Text File  |  2003-01-01  |  20KB  |  1,156 lines

  1. ; Miniblobs in a 'starfield'.
  2. ; A screen for delta.
  3.  
  4. ******** OBJECT EQUATES ********
  5.  
  6. PARTICLECOUNT:    =    64
  7.  
  8.             RSRESET
  9. MiniBlobs.blob:        RS.W    32*32
  10. MiniBlobs.palette:    RS.W    65536
  11. MiniBlobs.buffer:    RS.W    320*200
  12. MiniBlobs.BLOCK_SIZE:    RS.B    0
  13.  
  14. ******** OBJECT TABLE ********
  15.  
  16. * Must be first in object!!
  17. MiniBlobs.table:
  18.     DC.L    MiniBlobs.mainLoop
  19.     DC.L    MiniBlobs.init
  20.     DC.L    rts
  21.     DC.L    MiniBlobs.triggerBlobs
  22.     DC.L    MiniBlobs.setFadeIn1
  23.     DC.L    MiniBlobs.setFadeIn2
  24.     DC.L    MiniBlobs.setFadeIn3
  25.     DC.L    MiniBlobs.setAccelRot
  26.     DC.L    MiniBlobs.setFade1
  27.     DC.L    MiniBlobs.setFade2
  28.     DC.L    MiniBlobs.setFade3
  29.     DC.L    MiniBlobs.setFade4
  30. * Add more addresses here..
  31.     DC.L    0
  32.  
  33. ******** INIT SUBROUTINE ********
  34.  
  35. * OUTPUT: d0.l: 0   = All clear.
  36. *               neg = Error! Not initialized!
  37. MiniBlobs.init:
  38.     move.l    #MiniBlobs.BLOCK_SIZE,d0
  39.     bsr.l    Mem.register
  40.  
  41.     bsr.w    MiniBlobs.initParticles
  42.  
  43. .success:
  44.     moveq    #0,d0
  45.     rts
  46. .error:    moveq    #-1,d0
  47.     rts
  48.  
  49. ******** REALTIME INIT SUBROUTINE ********
  50.  
  51. MiniBlobs.realtimeInit:
  52.     bsr.l    Mem.getBlock
  53.     move.l    d0,MiniBlobs.baseAdr
  54.  
  55.     lea    MiniBlobs.flowTable,a1
  56.     movea.l    MiniBlobs.baseAdr,a0
  57.     adda.l    #MiniBlobs.palette,a0
  58.     bsr.l    Pal.makeGradientHc
  59.  
  60.     bsr.w    MiniBlobs.setIntensity3
  61.     clr.w    MiniBlobs.rotScalar
  62.     bsr.w    MiniBlobs.setFade1
  63.     move.l    #rts,MiniBlobs.fadeRout
  64.  
  65.     move.w    monitormode,d0
  66.     tst.w    detail
  67.     beq.s    .low
  68.  
  69.     cmpi.w    #vga60,d0
  70.     beq.s    .setvga60hi
  71.     cmpi.w    #vga100,d0
  72.     beq.s    .setvga100hi
  73.     cmpi.w    #rgb50,d0
  74.     beq.s    .setrgb50hi
  75. ; Unknown monitormode..
  76.     rts
  77.  
  78. .low:    cmpi.w    #vga60,d0
  79.     beq.s    .setvga60lo
  80.     cmpi.w    #vga100,d0
  81.     beq.s    .setvga100lo
  82.     cmpi.w    #rgb50,d0
  83.     beq.s    .setrgb50lo
  84.     rts
  85.  
  86. .setvga60hi:
  87.     move.l    #vga60_16bit_320_200,MiniBlobs.resRout
  88.     rts
  89.  
  90. .setvga100hi:
  91.     move.l    #vga100_16bit_320_200,MiniBlobs.resRout
  92.     rts
  93.  
  94. .setrgb50hi:
  95.     move.l    #rgb50_16bit_320_200,MiniBlobs.resRout
  96.     rts
  97.  
  98. .setvga60lo:
  99.     move.l    #vga60_16bit_160_200,MiniBlobs.resRout
  100.     rts
  101.  
  102. .setvga100lo:
  103.     move.l    #vga100_16bit_160_100,MiniBlobs.resRout
  104.     rts
  105.  
  106. .setrgb50lo:
  107.     move.l    #rgb50_16bit_320_100,MiniBlobs.resRout
  108.     rts
  109.  
  110. ******** SCREENINIT SUBROUTINE ********
  111.  
  112. MiniBlobs.initScreen:
  113.     bsr.w    MiniBlobs.clearBuffer
  114.     rts
  115.  
  116. ******** MAINLOOP SUBROUTINE ********
  117.  
  118. MiniBlobs.mainLoop:
  119.     move.l    frmcnt,d0
  120.     sub.l    lastframecount,d0
  121.     bne.s    .end_realtime_init
  122.     move.l    d0,-(sp)
  123.     bsr.w    MiniBlobs.realtimeInit
  124.     move.l    (sp)+,d0
  125. .end_realtime_init:
  126.     cmpi.l    #3,d0
  127.     bhs.s    .end_screeninit
  128.     bsr.w    MiniBlobs.initScreen
  129. .end_screeninit:
  130.  
  131.     movea.l    MiniBlobs.fadeRout,a0
  132.     jsr    (a0)
  133.  
  134.     bsr.w    MiniBlobs.fadeBuffer
  135.  
  136.     tst.w    MiniBlobs.active
  137.     beq.s    .end_add_blobs
  138.     bsr.w    MiniBlobs.addBlobCircle
  139. .end_add_blobs:
  140.  
  141.     bsr.w    MiniBlobs.paint
  142.  
  143.     lea    scr,a0
  144.     move.l    (a0)+,d0
  145.     move.l    (a0)+,d1
  146.     move.l    (a0),-4(a0)
  147.     move.l    d0,(a0)
  148.     move.l    d1,-8(a0)
  149.  
  150.     movea.l    MiniBlobs.resRout,a0
  151.     suba.l    a1,a1
  152.     movea.l    d0,a2
  153. .again:    bsr.l    Screen.requestUpdate
  154.     tst.l    d0
  155.     bmi.s    .again
  156.     clr.l    MiniBlobs.resRout
  157.  
  158.     rts
  159.  
  160. ******** OBJECT SUBROUTINES ********
  161.  
  162. MiniBlobs.triggerBlobs:
  163.     not.w    MiniBlobs.active
  164.     rts
  165.  
  166. MiniBlobs.setFadeIn1:
  167.     move.w    $04BC.w,MiniBlobs.fadeStart
  168.     move.w    MiniBlobs.intensity,MiniBlobs.oldIntensity
  169.     move.w    #$100,MiniBlobs.fadeTime
  170.     move.w    #8,MiniBlobs.endIntensity
  171.     move.l    #MiniBlobs.fadeToIn,MiniBlobs.fadeRout
  172.     rts
  173.  
  174. MiniBlobs.setFadeIn2:
  175.     move.w    $04BC.w,MiniBlobs.fadeStart
  176.     move.w    MiniBlobs.intensity,MiniBlobs.oldIntensity
  177.     move.w    #$100,MiniBlobs.fadeTime
  178.     move.w    #64,MiniBlobs.endIntensity
  179.     move.l    #MiniBlobs.fadeToIn,MiniBlobs.fadeRout
  180.     rts
  181.  
  182. MiniBlobs.setFadeIn3:
  183.     move.w    $04BC.w,MiniBlobs.fadeStart
  184.     move.w    MiniBlobs.intensity,MiniBlobs.oldIntensity
  185.     move.w    #$800,MiniBlobs.fadeTime
  186.     move.w    #4096,MiniBlobs.endIntensity
  187.     move.l    #MiniBlobs.fadeToIn,MiniBlobs.fadeRout
  188.     rts
  189.  
  190. MiniBlobs.setIntensity1:
  191.     move.w    #8,MiniBlobs.intensity
  192.     bsr.w    MiniBlobs.calcBlob
  193.     rts
  194.  
  195. MiniBlobs.setIntensity2:
  196.     move.w    #64,MiniBlobs.intensity
  197.     bsr.w    MiniBlobs.calcBlob
  198.     rts
  199.  
  200. MiniBlobs.setIntensity3:
  201.     move.w    #512,MiniBlobs.intensity
  202.     bsr.w    MiniBlobs.calcBlob
  203.     rts
  204.  
  205. MiniBlobs.setAccelRot:
  206.     move.w    $04BC.w,MiniBlobs.rotStart
  207.     move.w    #1,MiniBlobs.rotScalar
  208.     rts
  209.  
  210. MiniBlobs.setFade1:
  211.     move.w    #4,MiniBlobs.fadingSpeed
  212.     rts
  213.  
  214. MiniBlobs.setFade2:
  215.     move.w    #3,MiniBlobs.fadingSpeed
  216.     rts
  217.  
  218. MiniBlobs.setFade3:
  219.     move.w    #2,MiniBlobs.fadingSpeed
  220.     rts
  221.  
  222. MiniBlobs.setFade4:
  223.     move.w    #1,MiniBlobs.fadingSpeed
  224.     rts
  225.  
  226. MiniBlobs.fadeToIn:
  227.     move.w    $04BC.w,d0
  228.     sub.w    MiniBlobs.fadeStart,d0
  229.     move.w    MiniBlobs.endIntensity,d1
  230.     sub.w    MiniBlobs.oldIntensity,d1
  231.     cmp.w    MiniBlobs.fadeTime,d0
  232.     blt.s    .continue
  233.     move.w    MiniBlobs.fadeTime,d0
  234.     move.l    #rts,MiniBlobs.fadeRout
  235. .continue:
  236.     muls.w    d0,d1
  237.     divs.w    MiniBlobs.fadeTime,d1
  238.     move.w    MiniBlobs.oldIntensity,d2
  239.     add.w    d1,d2
  240.     move.w    d2,MiniBlobs.intensity
  241.     bsr.w    MiniBlobs.calcBlob
  242.     rts
  243.  
  244. MiniBlobs.initParticles:
  245.     lea    MiniBlobs.particleTable,a0
  246.     move.l    #$278e26fb,random
  247.     move.w    #PARTICLECOUNT-1,d7
  248.     bmi.s    .particles_done
  249.  
  250. .loop:    move.l    random,d0
  251.     move.w    d0,(a0)+
  252.     swap    d0
  253.     lsr.w    #2,d0
  254.     addi.w    #$4000,d0
  255.     move.w    d0,(a0)+
  256.     Calc_NextRandom
  257.     dbf    d7,.loop
  258. .particles_done:
  259.  
  260.     move.w    #PARTICLECOUNT,MiniBlobs.particleCount
  261.     rts
  262.  
  263. MiniBlobs.calcBlob:
  264.     movea.l    MiniBlobs.baseAdr,a0
  265.     adda.l    #MiniBlobs.blob,a0
  266.     move.w    MiniBlobs.intensity,d5
  267.     tst.w    detail
  268.     bne.s    MiniBlob.calcBlob32
  269.  
  270. MiniBlob.calcBlob16:
  271.     lea    16*16*2(a0),a2
  272.     move.l    #2*8*8,d2
  273.     moveq    #-8,d7
  274.  
  275. .yloop:    moveq    #-8,d6
  276.  
  277. .xloop:    move.w    d6,d0
  278.     muls.w    d0,d0
  279.     move.w    d7,d1
  280.     muls.w    d1,d1
  281.     add.l    d0,d1
  282.     move.l    d2,d0
  283.     sub.l    d1,d0
  284.     mulu.w    d0,d0
  285.     lsr.l    #8,d0
  286.     mulu.w    d0,d0
  287.     divu.w    d5,d0
  288.     move.w    d0,(a0)+
  289.     addq.w    #1,d6
  290.     blt.s    .xloop
  291.  
  292.     movea.l    a0,a1
  293.     moveq    #8-1,d6
  294. .copyloop:
  295.     move.w    -(a1),(a0)+
  296.     dbra    d6,.copyloop
  297.  
  298.     moveq    #16-1,d6
  299. .y_copyloop:
  300.     move.w    (a1)+,-(a2)
  301.     dbra    d6,.y_copyloop
  302.  
  303.     addq.w    #1,d7
  304.     blt.s    .yloop
  305.     rts
  306.  
  307. MiniBlob.calcBlob32:
  308.     lea    32*32*2(a0),a2
  309.     move.l    #2*16*16,d2
  310.     moveq    #-16,d7
  311.  
  312. .yloop:    moveq    #-16,d6
  313.  
  314. .xloop:    move.w    d6,d0
  315.     muls.w    d0,d0
  316.     move.w    d7,d1
  317.     muls.w    d1,d1
  318.     add.l    d0,d1
  319.     move.l    d2,d0
  320.     sub.l    d1,d0
  321.     mulu.w    d0,d0
  322.     lsr.l    #8,d0
  323.     lsr.l    #4,d0
  324.     mulu.w    d0,d0
  325.     divu.w    d5,d0
  326.     move.w    d0,(a0)+
  327.     addq.w    #1,d6
  328.     blt.s    .xloop
  329.  
  330.     movea.l    a0,a1
  331.     moveq    #16-1,d6
  332. .copyloop:
  333.     move.w    -(a1),(a0)+
  334.     dbra    d6,.copyloop
  335.  
  336.     moveq    #32-1,d6
  337. .y_copyloop:
  338.     move.w    (a1)+,-(a2)
  339.     dbra    d6,.y_copyloop
  340.  
  341.     addq.w    #1,d7
  342.     blt.s    .yloop
  343.     rts
  344.  
  345. MiniBlobs.clearBuffer:
  346.     movea.l    MiniBlobs.baseAdr,a0
  347.     adda.l    #MiniBlobs.buffer,a0
  348.     move.w    #320*200/32-1,d7
  349.     moveq    #0,d0
  350. .loop:
  351.     REPT    16
  352.     move.l    d0,(a0)+
  353.     ENDR
  354.     dbra    d7,.loop
  355.     rts
  356.  
  357. MiniBlobs.fadeBuffer:
  358.     movea.l    MiniBlobs.baseAdr,a0
  359.     adda.l    #MiniBlobs.buffer,a0
  360.     moveq    #0,d0
  361.     move.w    MiniBlobs.fadingSpeed,d2
  362.     move.w    #$ffff,d3
  363.     lsr.w    d2,d3
  364.     move.w    d3,d4
  365.     swap    d3
  366.     move.w    d4,d3
  367.  
  368.     tst.w    detail
  369.     beq.s    MiniBlobs.fadeLo
  370.  
  371.     move.w    #320*200/16-1,d7
  372.  
  373. .loop:
  374.     REPT    8
  375.     move.l    (a0),d0
  376.     move.l    d0,d1
  377.     lsr.l    d2,d0
  378.     and.l    d3,d0
  379.     sub.l    d0,d1
  380.     move.l    d1,(a0)+
  381.     ENDR
  382.  
  383.     dbf    d7,.loop
  384.     rts
  385.  
  386. MiniBlobs.fadeLo:
  387.     move.w    #160*100/16-1,d7
  388.  
  389. .loop:
  390.     REPT    8
  391.     move.l    (a0),d0
  392.     move.l    d0,d1
  393.     lsr.l    d2,d0
  394.     and.l    d3,d0
  395.     sub.l    d0,d1
  396.     move.l    d1,(a0)+
  397.     ENDR
  398.  
  399.     dbf    d7,.loop
  400.     rts
  401.  
  402. MiniBlobs.addBlobCircle:
  403.     move.w    MiniBlobs.particleCount,d7
  404.     ble    .end
  405.     subq.w    #1,d7
  406.     lea    sine_tbl,a6
  407.     lea    MiniBlobs.particleTable,a5
  408.     move.w    $4bc.w,d5
  409.  
  410. ; Calculate middle.
  411.     move.w    d5,d0
  412.     move.w    d0,d1
  413.     mulu.w    #3,d1
  414.     lsr.l    #2,d1
  415.     Do_SinModulo    d0
  416.     Do_SinModulo    d1
  417.     Get_Sin    a6,d0,d0
  418.     Get_Sin    a6,d1,d1
  419.     asr.w    #8,d0
  420.     asr.w    #1,d0
  421.     asr.w    #8,d1
  422.     asr.w    #2,d1
  423.  
  424.     tst.w    detail
  425.     bne    MiniBlobs.addHi
  426.  
  427. ; Low detail..
  428.     addi.w    #80-8,d0
  429.     addi.w    #50-8,d1
  430.     movem.w    d0/d1,.xmid
  431.  
  432. .loop:    move.w    (a5)+,d0
  433.     move.w    d5,d1
  434.     sub.w    MiniBlobs.rotStart,d1
  435.     mulu.w    MiniBlobs.rotScalar,d1
  436.     mulu.w    d1,d1
  437.     lsr.l    #8,d1
  438.     add.w    d1,d0
  439.     move.w    (a5)+,d2
  440.     Do_SinModulo    d0
  441.     Get_SinCos    a6,d0,d0,d1
  442.     mulu.w    d5,d2
  443.     lsr.l    #8,d2
  444.     andi.w    #$7fff,d2
  445.     muls.w    d2,d0
  446.     muls.w    d2,d1
  447.     swap    d0
  448.     swap    d1
  449.     moveq    #50,d4
  450.     muls.w    d4,d0
  451.     muls.w    d4,d1
  452.     moveq    #13,d4
  453.     asr.l    d4,d0
  454.     asr.l    d4,d1
  455.     add.w    .xmid(pc),d0
  456.     add.w    .ymid(pc),d1
  457.  
  458.     move.w    d7,-(sp)
  459.     bsr.w    MiniBlobs.addBlob16
  460.     move.w    (sp)+,d7
  461.  
  462.     dbra    d7,.loop
  463.  
  464. .end:    rts
  465.  
  466. .xmid:    DC.W    0
  467. .ymid:    DC.W    0
  468.  
  469. ; High detail..
  470. MiniBlobs.addHi:
  471.     addi.w    #160-16,d0
  472.     addi.w    #100-16,d1
  473.     movem.w    d0/d1,.xmid
  474.  
  475. .loop:    move.w    (a5)+,d0
  476.     move.w    d5,d1
  477.     sub.w    MiniBlobs.rotStart,d1
  478.     mulu.w    MiniBlobs.rotScalar,d1
  479.     mulu.w    d1,d1
  480.     lsr.l    #8,d1
  481.     add.w    d1,d0
  482.     move.w    (a5)+,d2
  483.     Do_SinModulo    d0
  484.     Get_SinCos    a6,d0,d0,d1
  485.     mulu.w    d5,d2
  486.     lsr.l    #8,d2
  487.     andi.w    #$7fff,d2
  488.     muls.w    d2,d0
  489.     muls.w    d2,d1
  490.     swap    d0
  491.     swap    d1
  492.     moveq    #50,d4
  493.     muls.w    d4,d0
  494.     muls.w    d4,d1
  495.     moveq    #12,d4
  496.     asr.l    d4,d0
  497.     asr.l    d4,d1
  498.     add.w    .xmid(pc),d0
  499.     add.w    .ymid(pc),d1
  500.  
  501.     move.w    d7,-(sp)
  502.     bsr.s    MiniBlobs.addBlob32
  503.     move.w    (sp)+,d7
  504.  
  505.     dbf    d7,.loop
  506.  
  507. .end:    rts
  508.  
  509. .xmid:    DC.W    0
  510. .ymid:    DC.W    0
  511.  
  512. ; INPUT:
  513. ; d0.w: x
  514. ; d1.w: y
  515. MiniBlobs.addBlob32:
  516.     movea.l    MiniBlobs.baseAdr,a1
  517.     adda.l    #MiniBlobs.blob,a1
  518.     cmpi.w    #320-32+1,d0
  519.     bhs.s    MiniBlobs.addClippedBlob
  520.     cmpi.w    #200-32+1,d1
  521.     bhs.s    MiniBlobs.addClippedBlob
  522.  
  523.     mulu.w    #320,d1
  524.     add.w    d0,d1
  525.     movea.l    MiniBlobs.baseAdr,a0
  526.     adda.l    #MiniBlobs.buffer,a0
  527.     lea    (a0,d1.l*2),a0
  528.     lea    31*320*2(a0),a2
  529.     lea    32*2(a0),a3
  530.     lea    32*2(a2),a4
  531.     moveq    #16-1,d7
  532.  
  533. .yloop:    moveq    #16/2-1,d6
  534.  
  535. .xloop:    move.l    (a1)+,d0
  536.     add.l    d0,(a0)+
  537.     add.l    d0,(a2)+
  538.     swap    d0
  539.     add.l    d0,-(a3)
  540.     add.l    d0,-(a4)
  541.     dbra    d6,.xloop
  542.  
  543.     lea    16*2(a1),a1
  544.     lea    (320-16)*2(a0),a0
  545.     lea    (320+16)*2(a3),a3
  546.     lea    -(320+16)*2(a2),a2
  547.     lea    (16-320)*2(a4),a4
  548.     dbra    d7,.yloop
  549.     rts
  550.  
  551. MiniBlobs.addClippedBlob:
  552. ; Check and possibly clip the x stuff.
  553.     moveq    #32-1,d4
  554.     suba.l    a4,a4
  555.     cmpi.w    #-32,d0
  556.     ble    .end
  557.     tst.w    d0
  558.     bpl.s    .test_x_right
  559.     move.w    d0,d2
  560.     add.w    d2,d4
  561.     neg.w    d2
  562.     adda.w    d2,a1
  563.     adda.w    d2,a1
  564.     movea.w    d2,a4
  565.     moveq    #0,d0
  566.     bra.s    .end_test_x
  567. .test_x_right:
  568.     cmpi.w    #320-32,d0
  569.     ble.s    .end_test_x
  570.     cmpi.w    #320,d0
  571.     bge.s    .end
  572.     move.w    d0,d2
  573.     subi.w    #320-32,d2
  574.     sub.w    d2,d4
  575.     movea.w    d2,a4
  576. .end_test_x:
  577.  
  578. ; Check and possibly clip the y stuff.
  579.     moveq    #32-1,d7
  580.     cmpi.w    #-32,d1
  581.     ble.s    .end
  582.     tst.w    d1
  583.     bpl.s    .test_y_bottom
  584.     move.w    d1,d2
  585.     lsl.w    #6,d2
  586.     suba.w    d2,a1
  587.     add.w    d1,d7
  588.     moveq    #0,d1
  589.     bra.s    .end_test_y
  590. .test_y_bottom:
  591.     cmpi.w    #200,d1
  592.     bge.s    .end
  593.     cmpi.w    #200-32,d1
  594.     ble.s    .end_test_y
  595.     move.w    d1,d2
  596.     subi.w    #200-32,d2
  597.     sub.w    d2,d7
  598. .end_test_y:
  599.  
  600.     IFNE    0
  601.     cmpi.w    #320,d0
  602.     bhs.s    .end
  603.     cmpi.w    #200,d1
  604.     bhs.s    .end
  605.     cmpi.w    #32,d7
  606.     bhs.s    .end
  607.     cmpi.w    #32,d4
  608.     bhs.s    .end
  609.     cmpa.w    #31,a4
  610.     bhs.s    .end
  611.     ENDC
  612.  
  613. ; d0.w = x [0..319]
  614. ; d1.w = y [0..199]
  615. ; d4.w = width-1 [0..31]
  616. ; d7.w = height-1 [0..31]
  617. ; a1 = blob data
  618. ; a4 = blob x offset [0..31]
  619.  
  620.     adda.l    a4,a4
  621.     movea.w    #(320-32)*2,a3
  622.     adda.l    a4,a3
  623.     mulu.w    #320,d1
  624.     add.w    d0,d1
  625.     movea.l    MiniBlobs.baseAdr,a0
  626.     adda.l    #MiniBlobs.buffer,a0
  627.     lea    (a0,d1.l*2),a0
  628.  
  629. ; d4.w = width-1
  630. ; d7.w = heigth-1
  631. ; a0 = buffer + position
  632. ; a1 = blob data
  633. ; a3 = line increment [320-32..319]*2
  634. ; a4 = blob x offset [0..31]*2
  635.  
  636. .yloop:    move.w    d4,d6
  637.  
  638. .xloop:    move.w    (a1)+,d0
  639.     add.w    d0,(a0)+
  640.     dbra    d6,.xloop
  641.  
  642.     adda.l    a3,a0
  643.     adda.l    a4,a1
  644.     dbra    d7,.yloop
  645.  
  646. .end:    rts
  647.  
  648. ; INPUT:
  649. ; d0.w: x
  650. ; d1.w: y
  651. MiniBlobs.addBlob16:
  652.     movea.l    MiniBlobs.baseAdr,a1
  653.     adda.l    #MiniBlobs.blob,a1
  654.     cmpi.w    #160-16+1,d0
  655.     bhs.s    MiniBlobs.addClippedBlob16
  656.     cmpi.w    #100-16+1,d1
  657.     bhs.s    MiniBlobs.addClippedBlob16
  658.  
  659.     mulu.w    #160,d1
  660.     add.w    d0,d1
  661.     movea.l    MiniBlobs.baseAdr,a0
  662.     adda.l    #MiniBlobs.buffer,a0
  663.     lea    (a0,d1.l*2),a0
  664.  
  665.     lea    15*160*2(a0),a2
  666.     lea    16*2(a0),a3
  667.     lea    16*2(a2),a4
  668.     moveq    #8-1,d7
  669.  
  670. .yloop:    moveq    #8/2-1,d6
  671.  
  672. .xloop:    move.l    (a1)+,d0
  673.     add.l    d0,(a0)+
  674.     add.l    d0,(a2)+
  675.     swap    d0
  676.     add.l    d0,-(a3)
  677.     add.l    d0,-(a4)
  678.     dbf    d6,.xloop
  679.  
  680.     lea    8*2(a1),a1
  681.     lea    (160-8)*2(a0),a0
  682.     lea    (160+8)*2(a3),a3
  683.     lea    -(160+8)*2(a2),a2
  684.     lea    (8-160)*2(a4),a4
  685.     dbf    d7,.yloop
  686.     rts
  687.  
  688. MiniBlobs.addClippedBlob16:
  689. ; Check and possibly clip the x stuff.
  690.     moveq    #16-1,d4
  691.     suba.l    a4,a4
  692.     cmpi.w    #-16,d0
  693.     ble    .end
  694.     tst.w    d0
  695.     bpl.s    .test_x_right
  696.     move.w    d0,d2
  697.     add.w    d2,d4
  698.     neg.w    d2
  699.     adda.w    d2,a1
  700.     adda.w    d2,a1
  701.     movea.w    d2,a4
  702.     moveq    #0,d0
  703.     bra.s    .end_test_x
  704. .test_x_right:
  705.     cmpi.w    #160-16,d0
  706.     ble.s    .end_test_x
  707.     cmpi.w    #160,d0
  708.     bge.s    .end
  709.     move.w    d0,d2
  710.     subi.w    #160-16,d2
  711.     sub.w    d2,d4
  712.     movea.w    d2,a4
  713. .end_test_x:
  714.  
  715. ; Check and possibly clip the y stuff.
  716.     moveq    #16-1,d7
  717.     cmpi.w    #-16,d1
  718.     ble.s    .end
  719.     tst.w    d1
  720.     bpl.s    .test_y_bottom
  721.     move.w    d1,d2
  722.     lsl.w    #5,d2                ; *16*2
  723.     suba.w    d2,a1
  724.     add.w    d1,d7
  725.     moveq    #0,d1
  726.     bra.s    .end_test_y
  727. .test_y_bottom:
  728.     cmpi.w    #100,d1
  729.     bge.s    .end
  730.     cmpi.w    #100-16,d1
  731.     ble.s    .end_test_y
  732.     move.w    d1,d2
  733.     subi.w    #100-16,d2
  734.     sub.w    d2,d7
  735. .end_test_y:
  736.  
  737.     IFNE    0
  738.     cmpi.w    #160,d0
  739.     bhs.s    .end
  740.     cmpi.w    #100,d1
  741.     bhs.s    .end
  742.     cmpi.w    #16,d7
  743.     bhs.s    .end
  744.     cmpi.w    #16,d4
  745.     bhs.s    .end
  746.     cmpa.w    #15,a4
  747.     bhs.s    .end
  748.     ENDC
  749.  
  750. ; d0.w = x [0..159]
  751. ; d1.w = y [0..99]
  752. ; d4.w = width-1 [0..15]
  753. ; d7.w = height-1 [0..15]
  754. ; a1 = blob data
  755. ; a4 = blob x offset [0..15]
  756.  
  757.     adda.l    a4,a4
  758.     movea.w    #(160-16)*2,a3
  759.     adda.l    a4,a3
  760.     mulu.w    #160,d1
  761.     add.w    d0,d1
  762.     movea.l    MiniBlobs.baseAdr,a0
  763.     adda.l    #MiniBlobs.buffer,a0
  764.     lea    (a0,d1.l*2),a0
  765.  
  766. ; d4.w = width-1
  767. ; d7.w = heigth-1
  768. ; a0 = buffer + position
  769. ; a1 = blob data
  770. ; a3 = line increment [160-16..159]*2
  771. ; a4 = blob x offset [0..15]*2
  772.  
  773. .yloop:    move.w    d4,d6
  774.  
  775. .xloop:    move.w    (a1)+,d0
  776.     add.w    d0,(a0)+
  777.     dbf    d6,.xloop
  778.  
  779.     adda.l    a3,a0
  780.     adda.l    a4,a1
  781.     dbf    d7,.yloop
  782.  
  783. .end:    rts
  784.  
  785. MiniBlobs.paint:
  786.     movea.l    scr,a0
  787.     movea.l    MiniBlobs.baseAdr,a1
  788.     adda.l    #MiniBlobs.buffer,a1
  789.     movea.l    MiniBlobs.baseAdr,a2
  790.     adda.l    #MiniBlobs.palette,a2
  791.     clr.l    d0
  792.  
  793.     tst.w    detail
  794.     bne.w    MiniBlobs.paintHiRes
  795.  
  796.     move.w    monitormode,d1
  797.     cmpi.w    #vga60,d1
  798.     beq.s    MiniBlobs.paintVga60
  799.     cmpi.w    #vga100,d1
  800.     beq.s    MiniBlobs.paintVga100
  801.     cmpi.w    #rgb50,d1
  802.     beq.w    MiniBlobs.paintRgb50
  803.     rts
  804.  
  805. MiniBlobs.paintVga100:
  806.     move.w    #160*100/16-1,d7
  807. .loop:
  808.     REPT    16
  809.     move.w    (a1)+,d0
  810.     move.w    (a2,d0.l*2),(a0)+
  811.     ENDR
  812.     dbf    d7,.loop
  813.     rts
  814.  
  815. MiniBlobs.paintVga60:
  816.     movea.w    #160*2,a6
  817.     lea    (a0,a6.l),a3
  818.     moveq    #100-1,d7
  819.  
  820. .yloop:    moveq    #160/16-1,d6
  821.  
  822. .xloop:
  823.     REPT    16
  824.     move.w    (a1)+,d0
  825.     move.w    (a2,d0.l*2),(a0)+
  826.     move.w    (a2,d0.l*2),(a3)+
  827.     ENDR
  828.     dbf    d6,.xloop
  829.  
  830.     adda.l    a6,a0
  831.     adda.l    a6,a3
  832.     dbf    d7,.yloop
  833.     rts
  834.  
  835. MiniBlobs.paintRgb50:
  836.     move.w    #160*100/16-1,d7
  837. .loop:
  838.     REPT    16
  839.     move.w    (a1)+,d0
  840.     move.w    (a2,d0.l*2),(a0)
  841.     move.w    (a0)+,(a0)+
  842.     ENDR
  843.     dbf    d7,.loop
  844.     rts
  845.  
  846. MiniBlobs.paintHiRes:
  847.     move.w    #320*200/16-1,d7
  848. .loop:
  849.     REPT    16
  850.     move.w    (a1)+,d0
  851.     move.w    (a2,d0.l*2),(a0)+
  852.     ENDR
  853.     dbf    d7,.loop
  854.     rts
  855.  
  856. ******** OBJECT DATA ********
  857.  
  858.     DATA
  859.  
  860. MiniBlobs.flowTable:
  861.     DC.W    256    (.end-.start)/4
  862.     DC.W    7
  863.  
  864. .start:    DC.L    $00000000
  865.     DC.L    $3f000000
  866.     DC.L    $7f000000
  867.     DC.L    $bf000000
  868.     DC.L    $ff000000
  869.     DC.L    $ff000000
  870.     DC.L    $ff000000
  871.     DC.L    $ff000000
  872.     DC.L    $ff3f0000
  873.     DC.L    $ff7f0000
  874.     DC.L    $ffbf0000
  875.     DC.L    $ffff003f
  876.     DC.L    $ffff007f
  877.     DC.L    $ffff00bf
  878.     DC.L    $ffff00ff
  879.     DC.L    $ffff00ff
  880.     DC.L    $ffff00ff
  881.     DC.L    $ffff00ff
  882.     DC.L    $ffff00ff
  883.     DC.L    $ffff00ff
  884.     DC.L    $ffff00ff
  885.     DC.L    $ffff00ff
  886.     DC.L    $ffff00ff
  887.     DC.L    $ffff00ff
  888.     DC.L    $ffff00ff
  889.     DC.L    $ffff00ff
  890.     DC.L    $ffff00ff
  891.     DC.L    $ffff00ff
  892.     DC.L    $ffff00ff
  893.     DC.L    $ffff00ff
  894.     DC.L    $ffff00ff
  895.     DC.L    $ffff00ff
  896.     DC.L    $ffff00ff
  897.     DC.L    $ffff00ff
  898.     DC.L    $ffff00ff
  899.     DC.L    $ffff00ff
  900.     DC.L    $ffff00ff
  901.     DC.L    $ffff00ff
  902.     DC.L    $ffff00ff
  903.     DC.L    $ffff00ff
  904.     DC.L    $ffff00ff
  905.     DC.L    $ffff00ff
  906.     DC.L    $ffff00ff
  907.     DC.L    $ffff00ff
  908.     DC.L    $ffff00ff
  909.     DC.L    $ffff00ff
  910.     DC.L    $ffff00ff
  911.     DC.L    $ffff00ff
  912.     DC.L    $ffff00ff
  913.     DC.L    $ffff00ff
  914.     DC.L    $ffff00ff
  915.     DC.L    $ffff00ff
  916.     DC.L    $ffff00ff
  917.     DC.L    $ffff00ff
  918.     DC.L    $ffff00ff
  919.     DC.L    $ffff00ff
  920.     DC.L    $ffff00ff
  921.     DC.L    $ffff00ff
  922.     DC.L    $ffff00ff
  923.     DC.L    $ffff00ff
  924.     DC.L    $ffff00ff
  925.     DC.L    $ffff00ff
  926.     DC.L    $ffff00ff
  927.     DC.L    $ffff00ff
  928.     DC.L    $ffff00ff
  929.     DC.L    $ffff00ff
  930.     DC.L    $ffff00ff
  931.     DC.L    $ffff00ff
  932.     DC.L    $ffff00ff
  933.     DC.L    $ffff00ff
  934.     DC.L    $ffff00ff
  935.     DC.L    $ffff00ff
  936.     DC.L    $ffff00ff
  937.     DC.L    $ffff00ff
  938.     DC.L    $ffff00ff
  939.     DC.L    $ffff00ff
  940.     DC.L    $ffff00ff
  941.     DC.L    $ffff00ff
  942.     DC.L    $ffff00ff
  943.     DC.L    $ffff00ff
  944.     DC.L    $ffff00ff
  945.     DC.L    $ffff00ff
  946.     DC.L    $ffff00ff
  947.     DC.L    $ffff00ff
  948.     DC.L    $ffff00ff
  949.     DC.L    $ffff00ff
  950.     DC.L    $ffff00ff
  951.     DC.L    $ffff00ff
  952.     DC.L    $ffff00ff
  953.     DC.L    $ffff00ff
  954.     DC.L    $ffff00ff
  955.     DC.L    $ffff00ff
  956.     DC.L    $ffff00ff
  957.     DC.L    $ffff00ff
  958.     DC.L    $ffff00ff
  959.     DC.L    $ffff00ff
  960.     DC.L    $ffff00ff
  961.     DC.L    $ffff00ff
  962.     DC.L    $ffff00ff
  963.     DC.L    $ffff00ff
  964.     DC.L    $ffff00ff
  965.     DC.L    $ffff00ff
  966.     DC.L    $ffff00ff
  967.     DC.L    $ffff00ff
  968.     DC.L    $ffff00ff
  969.     DC.L    $ffff00ff
  970.     DC.L    $ffff00ff
  971.     DC.L    $ffff00ff
  972.     DC.L    $ffff00ff
  973.     DC.L    $ffff00ff
  974.     DC.L    $ffff00ff
  975.     DC.L    $ffff00ff
  976.     DC.L    $ffff00ff
  977.     DC.L    $ffff00ff
  978.     DC.L    $ffff00ff
  979.     DC.L    $ffff00ff
  980.     DC.L    $ffff00ff
  981.     DC.L    $ffff00ff
  982.     DC.L    $ffff00ff
  983.     DC.L    $ffff00ff
  984.     DC.L    $ffff00ff
  985.     DC.L    $ffff00ff
  986.     DC.L    $ffff00ff
  987.     DC.L    $ffff00ff
  988.     DC.L    $ffff00ff
  989.     DC.L    $ffff00ff
  990.     DC.L    $ffff00ff
  991.     DC.L    $ffff00ff
  992.     DC.L    $ffff00ff
  993.     DC.L    $ffff00ff
  994.     DC.L    $ffff00ff
  995.     DC.L    $ffff00ff
  996.     DC.L    $ffff00ff
  997.     DC.L    $ffff00ff
  998.     DC.L    $ffff00ff
  999.     DC.L    $ffff00ff
  1000.     DC.L    $ffff00ff
  1001.     DC.L    $ffff00ff
  1002.     DC.L    $ffff00ff
  1003.     DC.L    $ffff00ff
  1004.     DC.L    $ffff00ff
  1005.     DC.L    $ffff00ff
  1006.     DC.L    $ffff00ff
  1007.     DC.L    $ffff00ff
  1008.     DC.L    $ffff00ff
  1009.     DC.L    $ffff00ff
  1010.     DC.L    $ffff00ff
  1011.     DC.L    $ffff00ff
  1012.     DC.L    $ffff00ff
  1013.     DC.L    $ffff00ff
  1014.     DC.L    $ffff00ff
  1015.     DC.L    $ffff00ff
  1016.     DC.L    $ffff00ff
  1017.     DC.L    $ffff00ff
  1018.     DC.L    $ffff00ff
  1019.     DC.L    $ffff00ff
  1020.     DC.L    $ffff00ff
  1021.     DC.L    $ffff00ff
  1022.     DC.L    $ffff00ff
  1023.     DC.L    $ffff00ff
  1024.     DC.L    $ffff00ff
  1025.     DC.L    $ffff00ff
  1026.     DC.L    $ffff00ff
  1027.     DC.L    $ffff00ff
  1028.     DC.L    $ffff00ff
  1029.     DC.L    $ffff00ff
  1030.     DC.L    $ffff00ff
  1031.     DC.L    $ffff00ff
  1032.     DC.L    $ffff00ff
  1033.     DC.L    $ffff00ff
  1034.     DC.L    $ffff00ff
  1035.     DC.L    $ffff00ff
  1036.     DC.L    $ffff00ff
  1037.     DC.L    $ffff00ff
  1038.     DC.L    $ffff00ff
  1039.     DC.L    $ffff00ff
  1040.     DC.L    $ffff00ff
  1041.     DC.L    $ffff00ff
  1042.     DC.L    $ffff00ff
  1043.     DC.L    $ffff00ff
  1044.     DC.L    $ffff00ff
  1045.     DC.L    $ffff00ff
  1046.     DC.L    $ffff00ff
  1047.     DC.L    $ffff00ff
  1048.     DC.L    $ffff00ff
  1049.     DC.L    $ffff00ff
  1050.     DC.L    $ffff00ff
  1051.     DC.L    $ffff00ff
  1052.     DC.L    $ffff00ff
  1053.     DC.L    $ffff00ff
  1054.     DC.L    $ffff00ff
  1055.     DC.L    $ffff00ff
  1056.     DC.L    $ffff00ff
  1057.     DC.L    $ffff00ff
  1058.     DC.L    $ffff00ff
  1059.     DC.L    $ffff00ff
  1060.     DC.L    $ffff00ff
  1061.     DC.L    $ffff00ff
  1062.     DC.L    $ffff00ff
  1063.     DC.L    $ffff00ff
  1064.     DC.L    $ffff00ff
  1065.     DC.L    $ffff00ff
  1066.     DC.L    $ffff00ff
  1067.     DC.L    $ffff00ff
  1068.     DC.L    $ffff00ff
  1069.     DC.L    $ffff00ff
  1070.     DC.L    $ffff00ff
  1071.     DC.L    $ffff00ff
  1072.     DC.L    $ffff00ff
  1073.     DC.L    $ffff00ff
  1074.     DC.L    $ffff00ff
  1075.     DC.L    $ffff00ff
  1076.     DC.L    $ffff00ff
  1077.     DC.L    $ffff00ff
  1078.     DC.L    $ffff00ff
  1079.     DC.L    $ffff00ff
  1080.     DC.L    $ffff00ff
  1081.     DC.L    $ffff00ff
  1082.     DC.L    $ffff00ff
  1083.     DC.L    $ffff00ff
  1084.     DC.L    $ffff00ff
  1085.     DC.L    $ffff00ff
  1086.     DC.L    $ffff00ff
  1087.     DC.L    $ffff00ff
  1088.     DC.L    $ffff00ff
  1089.     DC.L    $ffff00ff
  1090.     DC.L    $ffff00ff
  1091.     DC.L    $ffff00ff
  1092.     DC.L    $ffff00ff
  1093.     DC.L    $ffff00ff
  1094.     DC.L    $ffff00ff
  1095.     DC.L    $ffff00ff
  1096.     DC.L    $ffff00ff
  1097.     DC.L    $ffff00ff
  1098.     DC.L    $ffff00ff
  1099.     DC.L    $ffff00ff
  1100.     DC.L    $ffff00ff
  1101.     DC.L    $efef00ef
  1102.     DC.L    $dfdf00df
  1103.     DC.L    $cfcf00cf
  1104.     DC.L    $bfbf00bf
  1105.     DC.L    $afaf00af
  1106.     DC.L    $9f9f009f
  1107.     DC.L    $8f8f008f
  1108.     DC.L    $7f7f007f
  1109.     DC.L    $6f6f006f
  1110.     DC.L    $5f5f005f
  1111.     DC.L    $4f4f004f
  1112.     DC.L    $3f3f003f
  1113.     DC.L    $2f2f002f
  1114.     DC.L    $1f1f001f
  1115.     DC.L    $0f0f000f
  1116.     DC.L    $00000000
  1117.     DC.L    $00000000
  1118.     DC.L    $00000000
  1119.     DC.L    $00000000
  1120. .end:
  1121.  
  1122. MiniBlobs.active:
  1123.     DC.W    $ffff
  1124.  
  1125. ******** OBJECT RESERVES ********
  1126.  
  1127.     BSS
  1128.  
  1129. MiniBlobs.baseAdr:
  1130.     DS.L    1
  1131. MiniBlobs.resRout:
  1132.     DS.L    1
  1133. MiniBlobs.particleCount:
  1134.     DS.L    1
  1135. MiniBlobs.particleTable:
  1136.     DS.W    2*PARTICLECOUNT
  1137. MiniBlobs.oldIntensity:
  1138.     DS.W    1
  1139. MiniBlobs.fadeStart:
  1140.     DS.W    1
  1141. MiniBlobs.endIntensity:
  1142.     DS.W    1
  1143. MiniBlobs.rotStart:
  1144.     DS.W    1
  1145. MiniBlobs.fadeTime:
  1146.     DS.W    1
  1147. MiniBlobs.fadingSpeed:
  1148.     DS.W    1
  1149. MiniBlobs.intensity:
  1150.     DS.W    1
  1151. MiniBlobs.rotScalar:
  1152.     DS.W    1
  1153. MiniBlobs.fadeRout:
  1154.     DS.L    1
  1155.  
  1156. ******** END OF DEMO-EFFECT OBJECT ********