home *** CD-ROM | disk | FTP | other *** search
/ Fujiology Archive / fujiology_archive_v1_0.iso / !FALCON / LINEOUT / DELTA.ZIP / DELTASRC.ZIP / DELTA.SRC / INTERFER.SO < prev    next >
Text File  |  2003-01-02  |  9KB  |  521 lines

  1. ; Interfering waves. Modern equivalent of ancient 'mad circles'.
  2. ; A screen for delta.
  3.  
  4. ;======= OBJECT EQUATES ========
  5.  
  6.                 RSRESET
  7. Interferance.pallette:        RS.W    4096*2
  8. Interferance.circleTable:    RS.B    256*256
  9. Interferance.circleTable2:    RS.B    256*256
  10. Interferance.squareTable:    RS.L    128
  11. Interferance.BLOCK_SIZE:    RS.B    0
  12.  
  13. ;======= OBJECT TABLE ========
  14.  
  15. * Must be first in object!!
  16. Interfer.table:
  17.     DC.L    Interfer.mainLoop
  18.     DC.L    INIT_Interferance
  19.     DC.L    Interfer.setRes
  20.     DC.L    Interferance.togglePalletteCycle
  21. * Add more addresses here..
  22.     DC.L    0
  23.  
  24. ;======= RESOLUTION SETTING ROUTINE ========
  25.  
  26. Interfer.setRes:
  27.     move.l    frmcnt,d0
  28.     sub.l    lastframecount,d0
  29.     beq.s    .end
  30.  
  31.     move.l    #rts,vbl_gfx
  32.  
  33.     move.w    monitormode,d0
  34.     cmpi.w    #vga60,d0
  35.     beq.s    .vga60
  36.     cmpi.w    #vga100,d0
  37.     beq.s    .vga100
  38.     cmpi.w    #rgb50,d0
  39.     beq.s    .rgb50
  40. * Unknown monitormode..
  41.     rts
  42. .vga60:    bra.l    vga60_16bit_160_200
  43. .vga100:bra.l    vga100_16bit_160_100
  44. .rgb50:    bra.l    rgb50_16bit_320_100
  45. .end:    rts
  46.  
  47. ;======= INIT SUBROUTINE ========
  48.  
  49. * OUTPUT: d0.l: 0   = All clear.
  50. *               neg = Error! Not initialized!
  51. INIT_Interferance:
  52.     move.l    #Interferance.BLOCK_SIZE,d0
  53.     bsr.l    Mem.register
  54.  
  55. .success:
  56.     moveq    #0,d0
  57.     rts
  58. .error:    moveq    #-1,d0
  59.     rts
  60.  
  61. Interfer.realtimeInit:
  62.     move.l    #Interfer.setRes,vbl_gfx
  63.  
  64.     bsr.l    Mem.getBlock
  65.     move.l    d0,Interferance.baseAdr
  66.  
  67.     lea    Interferance.flowTable,a1
  68.     movea.l    Interferance.baseAdr,a0
  69.     adda.l    #Interferance.pallette,a0
  70.     bsr    Interferance.makeColorFlow
  71.  
  72.     bsr    Interferance.initCircular
  73.  
  74.     clr.w    Interferance.cycling
  75.     clr.w    Interferance.cyclePhase
  76.     rts
  77.  
  78. ;======= MAINLOOP SUBROUTINE ========
  79.  
  80. Interfer.mainLoop:
  81.     move.w    $0468.w,.old468
  82.  
  83.     move.l    frmcnt,d0
  84.     sub.l    lastframecount,d0
  85.     bne.s    .end_realtime_init
  86.     bsr    Interfer.realtimeInit
  87. .end_realtime_init:
  88.  
  89.     bsr    Interferance.paintCircular
  90.  
  91.     IFEQ    testmode
  92.     move.w    .old468(pc),d0
  93.     moveq    #1,d3
  94.     cmpi.w    #vga100,monitormode
  95.     bne.s    .wait
  96.     moveq    #2,d3
  97. .wait:    move.w    $0468.w,d2
  98.     sub.w    d0,d2
  99.     cmp.w    d3,d2
  100.     blt.s    .wait
  101.  
  102.     lea    scr,a0
  103.     move.l    (a0)+,d0
  104.     move.l    (a0)+,d1
  105.     move.l    (a0),-4(a0)
  106.     move.l    d0,(a0)
  107.     move.l    d1,-8(a0)
  108.     move.l    d0,d1
  109.     lsr.w    #8,d0
  110.     move.l    d0,$ffff8200.w
  111.     move.b    d1,$ffff820d.w
  112.     ENDC
  113.  
  114.     rts
  115.  
  116. .old468:DC.W    0
  117.  
  118. ;======= OBJECT SUBROUTINES ========
  119.  
  120. Interferance.togglePalletteCycle:
  121.     not.w    Interferance.cycling
  122.     beq.s    .end
  123.     move.w    Interferance.cyclePhase,Interferance.oldCyclePhase
  124.     move.w    $4bc.w,Interferance.startTime
  125. .end:    rts
  126.  
  127. * Calculates circular wavetable for circular plasma.
  128. Interferance.initCircular:    
  129.     movea.l    Interferance.baseAdr,a0
  130.     adda.l    #Interferance.squareTable,a0
  131.     move.w    #-255,d0
  132.  
  133. .calc_sqr_loop:
  134.     move.w    d0,d1
  135.     muls.w    d1,d1
  136.     move.l    d1,(a0)+
  137.     addq.w    #2,d0
  138.     bmi.s    .calc_sqr_loop
  139.  
  140.     movea.l    Interferance.baseAdr,a0
  141.     movea.l    a0,a2
  142.     movea.l    a0,a3
  143.     adda.l    #Interferance.circleTable,a0
  144.     adda.l    #Interferance.circleTable2,a2
  145.     adda.l    #Interferance.squareTable,a3
  146.     lea    sine_tbl,a1
  147.     moveq    #128-1,d7
  148.     clr.l    d4
  149.  
  150. .yloop:    moveq    #128-1,d6
  151.     movea.l    Interferance.baseAdr,a4
  152.     adda.l    #Interferance.squareTable,a4
  153.     move.l    (a3)+,d5
  154.     clr.b    d4
  155.  
  156. .xloop:    move.l    d5,d1
  157.     add.l    (a4)+,d1
  158.     bsr.l    Math.sqrt
  159.     lsr.l    #8,d0
  160.     lsr.l    #3,d0
  161.     move.l    d0,d1
  162.     lsr.l    #1,d0
  163.     Do_SinModulo    d0
  164.     Do_SinModulo    d1
  165.     Get_Cos    a1,d0,d0
  166.     Get_Cos    a1,d1,d1
  167.     addi.w    #$8000,d0
  168.     lsr.w    #8,d0
  169.     lsr.w    #1,d0
  170.     addi.w    #$8000,d1
  171.     lsr.w    #8,d1
  172.     lsr.w    #1,d1
  173.  
  174. ; Output cells..
  175.     move.w    d4,d2
  176.     move.b    d0,(a0,d2.l)
  177.     move.b    d1,(a2,d2.l)
  178.     not.b    d2
  179.     move.b    d0,(a0,d2.l)
  180.     move.b    d1,(a2,d2.l)
  181.     not.w    d2
  182.     move.b    d0,(a0,d2.l)
  183.     move.b    d1,(a2,d2.l)
  184.     not.b    d2
  185.     move.b    d0,(a0,d2.l)
  186.     move.b    d1,(a2,d2.l)
  187.  
  188.     addq.b    #1,d4
  189.     dbf    d6,.xloop
  190.  
  191.     addi.w    #$0100,d4
  192.     dbf    d7,.yloop
  193.  
  194.     rts
  195.  
  196. * Generates a highcolor pallette from a (truecolor) flowtable.
  197. * INPUT:
  198. * a0: highcolor buffer to write to
  199. * a1: instruction table 
  200. Interferance.makeColorFlow:
  201.     move.l    a0,-(sp)
  202.  
  203.     move.w    (a1)+,d7
  204.     moveq    #0,d0
  205.     move.w    (a1)+,d0
  206.     moveq    #1,d6
  207.     lsl.w    d0,d6
  208.     move.w    d7,d5
  209.     mulu.w    d6,d5
  210.     subq.w    #1,d6
  211.     movea.w    d6,a5
  212.     subq.w    #1,d7
  213.  
  214. .loop:    move.l    (a1)+,d1
  215.     move.l    (a1),d2
  216.     move.l    d1,d3
  217.     move.l    d2,d4
  218.     lsr.l    #8,d3
  219.     lsr.l    #8,d4
  220.     clr.w    d3
  221.     clr.w    d4
  222.     sub.l    d3,d4
  223.     asr.l    d0,d4
  224.     move.l    a0,a6
  225.  
  226. .red_loop:
  227.     swap    d3
  228.     move.w    d3,d5
  229.     lsl.w    #8,d5
  230.     andi.w    #$f800,d5
  231.     move.w    d5,(a0)+
  232.     swap    d3
  233.     add.l    d4,d3
  234.     dbra    d6,.red_loop
  235.  
  236.     move.w    a5,d6
  237.     move.l    a6,a0
  238.     move.l    d1,d3
  239.     move.l    d2,d4
  240.     andi.l    #$00ff0000,d3
  241.     andi.l    #$00ff0000,d4
  242.     sub.l    d3,d4
  243.     asr.l    d0,d4
  244.  
  245. .green_loop:
  246.     swap    d3
  247.     move.w    d3,d5
  248.     lsl.w    #3,d5
  249.     andi.w    #$07e0,d5
  250.     or.w    d5,(a0)+
  251.     swap    d3
  252.     add.l    d4,d3
  253.     dbra    d6,.green_loop
  254.  
  255.     move.l    a6,a0
  256.     move.w    a5,d6
  257.     moveq    #0,d3
  258.     moveq    #0,d4
  259.     move.b    d1,d3
  260.     move.b    d2,d4
  261.     swap    d3
  262.     swap    d4
  263.     sub.l    d3,d4
  264.     asr.l    d0,d4
  265.  
  266. .blue_loop:
  267.     swap    d3
  268.     move.w    d3,d5
  269.     lsr.w    #3,d5
  270.     andi.w    #$001f,d5
  271.     or.w    d5,(a0)+
  272.     swap    d3
  273.     add.l    d4,d3
  274.     dbra    d6,.blue_loop
  275.  
  276.     move.w    a5,d6
  277.     dbra    d7,.loop
  278.  
  279.     movea.l    (sp)+,a1
  280.  
  281. * Now copy this babe for wrapping..
  282.     move.w    (a1)+,d7
  283.     subq.w    #1,d7
  284. .copyloop:
  285.     move.w    (a1)+,(a0)+
  286.     dbra    d7,.copyloop
  287.     rts
  288.  
  289. * Paints a pallette based sinoid plasma on screen.
  290. Interferance.paintCircular:
  291.     movea.l    scr,a0
  292. .handle_cycling:
  293.     move.w    Interferance.cyclePhase,d0
  294.     tst.w    Interferance.cycling
  295.     beq.s    .end_handle_cycling
  296.     move.w    $4bc.w,d0
  297.     sub.w    Interferance.startTime,d0
  298.     lsr.w    #2,d0
  299.     add.w    Interferance.oldCyclePhase,d0
  300.     andi.w    #2048-1,d0
  301.     move.w    d0,Interferance.cyclePhase
  302. .end_handle_cycling:
  303.     movea.l    Interferance.baseAdr,a1
  304.     adda.l    #Interferance.pallette,a1
  305.     lea    (a1,d0.w*2),a1
  306.     moveq    #100-1,d7
  307.  
  308.     move.w    $4bc.w,d0
  309.     move.w    d0,d2
  310.     move.w    d0,d1
  311.     mulu.w    #5,d1
  312.     lsr.l    #2,d1
  313.     Do_SinModulo    d0
  314.     Do_SinModulo    d1
  315.     lea    sine_tbl,a3
  316.     Get_Sin    a3,d0,d0
  317.     Get_Cos    a3,d1,d1
  318.     addi.w    #$8000,d0
  319.     addi.w    #$8000,d1
  320.     andi.l    #$ffff,d0
  321.     andi.l    #$ffff,d1
  322.     lsr.l    #1,d0
  323.     andi.w    #$ff00,d0
  324.     lsr.l    #8,d1
  325.     lsr.l    #2,d1
  326.     add.l    d0,d1
  327.     andi.l    #$ffff,d1
  328.     movea.l    Interferance.baseAdr,a4
  329.     adda.l    #Interferance.circleTable,a4
  330.     lea    (a4,d1.l),a4
  331. * a4: displaced address of second circle table
  332.  
  333.     move.w    d2,d0
  334.     mulu.w    #3,d0
  335.     lsr.w    #1,d0
  336.     move.w    d2,d1
  337.     mulu.w    #7,d1
  338.     lsr.w    #2,d1
  339.     Do_SinModulo    d0
  340.     Do_SinModulo    d1
  341.     lea    sine_tbl,a3
  342.     Get_Sin    a3,d0,d0
  343.     Get_Cos    a3,d1,d1
  344.     addi.w    #$8000,d0
  345.     addi.w    #$8000,d1
  346.     andi.l    #$ffff,d0
  347.     andi.l    #$ffff,d1
  348.     lsr.l    #1,d0
  349.     andi.w    #$ff00,d0
  350.     lsr.l    #8,d1
  351.     lsr.l    #2,d1
  352.     add.l    d0,d1
  353.     andi.l    #$ffff,d1
  354.     movea.l    Interferance.baseAdr,a3
  355.     adda.l    #Interferance.circleTable2,a3
  356.     lea    (a3,d1.l),a3
  357. * a3: displaced address of first circle table
  358.  
  359.     moveq    #0,d2
  360.  
  361.     move.w    monitormode,d0
  362.     cmpi.w    #vga60,d0
  363.     beq    Interferance.paintCircularVga60
  364.     cmpi.w    #vga100,d0
  365.     beq    Interferance.paintCircularVga100
  366.     cmpi.w    #rgb50,d0
  367.     beq    Interferance.paintCircularRgb50
  368. * Unknown monitormode..
  369.     rts
  370.  
  371. Interferance.paintCircularVga60:
  372.     lea    160*2(a0),a5
  373.     clr.l    d3
  374.  
  375. .yloop:    swap    d7
  376.     move.w    #160/8-1,d7
  377.  
  378. .xloop:    REPT    8
  379.     move.b    (a4)+,d2
  380.     add.b    (a3)+,d2
  381.     move.w    (a1,d2.l*2),d3
  382.     move.w    d3,(a0)+
  383.     move.w    d3,(a5)+
  384.     ENDR
  385.     dbra    d7,.xloop
  386.  
  387.     lea    256-160(a4),a4
  388.     lea    256-160(a3),a3
  389.     lea    160*2(a0),a0
  390.     lea    160*2(a5),a5
  391.     swap    d7
  392.     dbra    d7,.yloop
  393.  
  394. .end:    rts
  395.  
  396. Interferance.paintCircularVga100:
  397. .yloop:    swap    d7
  398.     move.w    #160/8-1,d7
  399.  
  400. .xloop:    REPT    8
  401.     move.b    (a4)+,d2
  402.     add.b    (a3)+,d2
  403.     move.w    (a1,d2.l*2),(a0)+
  404.     ENDR
  405.     dbra    d7,.xloop
  406.  
  407.     lea    256-160(a4),a4
  408.     lea    256-160(a3),a3
  409.     swap    d7
  410.     dbra    d7,.yloop
  411.  
  412. .end:    rts
  413.  
  414. Interferance.paintCircularRgb50:
  415. .yloop:    swap    d7
  416.     move.w    #160/8-1,d7
  417.  
  418. .xloop:    REPT    8
  419.     move.b    (a4)+,d2
  420.     add.b    (a3)+,d2
  421.     move.l    (a1,d2.l*2),(a0)+
  422.     ENDR
  423.     dbra    d7,.xloop
  424.  
  425.     lea    256-160(a4),a4
  426.     lea    256-160(a3),a3
  427.     swap    d7
  428.     dbra    d7,.yloop
  429.  
  430. .end:    rts
  431.  
  432. ;======= OBJECT DATA ========
  433.  
  434.     DATA
  435.  
  436. Interferance.flowTable:
  437.     DC.W    64    (.end-.start)/4
  438.     DC.W    5
  439. .start:    DC.L    $ff000000
  440.     DC.L    $df000000
  441.     DC.L    $bf000000
  442.     DC.L    $9f000000
  443.     DC.L    $7f000000
  444.     DC.L    $5f000000
  445.     DC.L    $3f000000
  446.     DC.L    $1f000000
  447.     DC.L    $00000000
  448.     DC.L    $0000001f
  449.     DC.L    $0000003f
  450.     DC.L    $0000005f
  451.     DC.L    $0000007f
  452.     DC.L    $0000009f
  453.     DC.L    $000000bf
  454.     DC.L    $000000df
  455.     DC.L    $000000ff
  456.     DC.L    $000000df
  457.     DC.L    $000000bf
  458.     DC.L    $0000009f
  459.     DC.L    $0000007f
  460.     DC.L    $0000005f
  461.     DC.L    $0000003f
  462.     DC.L    $0000001f
  463.     DC.L    $001f0000
  464.     DC.L    $003f0000
  465.     DC.L    $005f0000
  466.     DC.L    $007f0000
  467.     DC.L    $009f0000
  468.     DC.L    $00bf0000
  469.     DC.L    $00df0000
  470.     DC.L    $00ff0000
  471.     DC.L    $1fff0000
  472.     DC.L    $3fff0000
  473.     DC.L    $5fff0000
  474.     DC.L    $7fff0000
  475.     DC.L    $9fff0000
  476.     DC.L    $bfff0000
  477.     DC.L    $dfff0000
  478.     DC.L    $ffdf0000
  479.     DC.L    $dfbf0000
  480.     DC.L    $bf9f0000
  481.     DC.L    $9f7f0000
  482.     DC.L    $7f5f0000
  483.     DC.L    $5f3f0000
  484.     DC.L    $3f1f0000
  485.     DC.L    $1f000000
  486.     DC.L    $00000000
  487.     DC.L    $00000000
  488.     DC.L    $1f000000
  489.     DC.L    $3f000000
  490.     DC.L    $5f000000
  491.     DC.L    $7f000000
  492.     DC.L    $9f000000
  493.     DC.L    $bf000000
  494.     DC.L    $df000000
  495.     DC.L    $ff000000
  496.     DC.L    $ff000000
  497.     DC.L    $ff000000
  498.     DC.L    $ff000000
  499.     DC.L    $ff000000
  500.     DC.L    $ff000000
  501.     DC.L    $ff000000
  502.     DC.L    $ff000000
  503.     DC.L    $ff000000
  504. .end:
  505.  
  506. ;======= OBJECT RESERVES ========
  507.  
  508.     BSS
  509.  
  510. Interferance.cyclePhase:
  511.     DS.W    1
  512. Interferance.oldCyclePhase:
  513.     DS.W    1
  514. Interferance.startTime:
  515.     DS.W    1
  516. Interferance.cycling:
  517.     DS.W    1
  518. Interferance.baseAdr:
  519.     DS.L    1
  520.  
  521. ;======= END OF DEMO-EFFECT OBJECT ========