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

  1. ; Textured waves: amplitude and rotation. A dsp assisted screen for delta.
  2.  
  3. ; todo: twice as fast circular init.
  4.  
  5. ;======= OBJECT EQUATES ========
  6.  
  7. ;======= OBJECT TABLE ========
  8.  
  9. ; Must be first in object!!
  10. DspWaves.table:
  11.     DC.L    DspWaves.mainLoop
  12.     DC.L    DspWaves.init
  13.     DC.L    rts
  14.     DC.L    DspWaves.IncreaseWaveVelocity
  15.     DC.L    DspWaves.DecreaseWaveVelocity
  16.     DC.L    DspWaves.IncreaseTwistVelocity
  17.     DC.L    DspWaves.DecreaseTwistVelocity
  18.     DC.L    DspWaves.IncreaseRotation
  19.     DC.L    DspWaves.DecreaseRotation
  20.     DC.L    DspWaves.IncreaseScale
  21.     DC.L    DspWaves.DecreaseScale
  22.     DC.L    DspWaves.IncreaseWavestep
  23.     DC.L    DspWaves.DecreaseWavestep
  24.     DC.L    DspWaves.setNullText
  25.     DC.L    DspWaves.setLineText
  26.     DC.L    DspWaves.setPresentText
  27.     DC.L    DspWaves.setFunnyText
  28.     DC.L    DspWaves.setCodeText
  29.     DC.L    DspWaves.setMusicText
  30.     DC.L    0
  31.  
  32. ;======= INIT SUBROUTINE ========
  33.  
  34. ; OUTPUT: d0.l: 0   = All clear.
  35. ;               neg = Error! Not initialized!
  36. DspWaves.init:
  37. .success:
  38.     moveq    #0,d0
  39.     rts
  40. .error:    moveq    #-1,d0
  41.     rts
  42.  
  43. ;======= REALTIME INIT SUBROUTINE ========
  44.  
  45. DspWaves.realtimeInit:
  46. ; Requires Dsp.loadProgram function!
  47.     move.l    #(DspWaves.p56End-DspWaves.p56)/3,d0
  48.     lea    DspWaves.p56,a0
  49.     bsr    Dsp.loadProgram
  50.  
  51.     bsr    DspWaves.initCircular
  52.  
  53.     move.w    #$7FFF,DspWaves.scalar
  54.     move.w    #8,DspWaves.waveStep
  55.     clr.w    DspWaves.rotationAmp
  56.     clr.w    DspWaves.waveVelocity
  57.     clr.w    DspWaves.twistVelocity
  58.     move.l    #DspWaves.nullText,DspWaves.textAdr
  59.  
  60.     move.w    monitormode,d0
  61.     cmpi.w    #vga60,d0
  62.     beq.s    .vga60
  63.     cmpi.w    #vga100,d0
  64.     beq.s    .vga100
  65.     cmpi.w    #rgb50,d0
  66.     beq.s    .rgb50
  67. * Unknown monitormode..
  68.     rts
  69. .vga60:    move.l    #vga60_16bit_160_200,DspWaves.resRout
  70.     rts
  71. .vga100:move.l    #vga100_16bit_160_100,DspWaves.resRout
  72.     rts
  73. .rgb50:    move.l    #rgb50_16bit_320_100,DspWaves.resRout
  74.     rts
  75.  
  76. ;======= SCREENINIT SUBROUTINE ========
  77.  
  78. DspWaves.initScreen:
  79.     rts
  80.  
  81. ;======= MAINLOOP SUBROUTINE ========
  82.  
  83. DspWaves.mainLoop:
  84.     move.l    frmcnt,d0
  85.     sub.l    lastframecount,d0
  86.     bne.s    .end_realtime_init
  87.     move.l    d0,-(sp)
  88.     bsr    DspWaves.realtimeInit
  89.     move.l    (sp)+,d0
  90. .end_realtime_init:
  91.     cmpi.l    #3,d0
  92.     bhs.s    .end_screeninit
  93.     bsr    DspWaves.initScreen
  94. .end_screeninit:
  95.  
  96.     IFNE    0
  97.     movec    cacr,d0
  98.     move.l    d0,-(sp)
  99.     ori.w    #$1111,d0
  100.     andi.w    #$DFFF,d0
  101.     movec    d0,cacr
  102.     ENDC
  103.  
  104.     bsr    DspWaves.calcTable
  105.     bsr    DspWaves.paintSined
  106.  
  107.     IFNE    0
  108.     move.l    (sp)+,d0
  109.     movec    d0,cacr
  110.     ENDC
  111.  
  112.     move.w    #160,d0
  113.     moveq    #0,d1
  114.     moveq    #42,d2
  115.     movea.l    scr,a0
  116.     movea.l    DspWaves.textAdr,a4
  117.  
  118.     move.w    monitormode,d3
  119.     cmpi.w    #vga60,d3
  120.     beq.s    .vga60
  121.     cmpi.w    #rgb50,d3
  122.     beq.s    .rgb50
  123. ;    cmpi.w    #vga100,d3
  124. ;    beq.s    .vga100
  125. .vga100:bsr.l    DspWaves.paintText
  126.     bra.s    .end_font    
  127. .vga60:    bsr.l    DspWaves.paintTextV
  128.     bra.s    .end_font
  129. .rgb50:    bsr.l    DspWaves.paintTextH
  130. ;    bra.s    .end_font
  131. .end_font:
  132.  
  133.     lea    scr,a0
  134.     move.l    (a0)+,d0
  135.     move.l    (a0)+,d1
  136.     move.l    (a0),-4(a0)
  137.     move.l    d0,(a0)
  138.     move.l    d1,-8(a0)
  139.  
  140.     movea.l    DspWaves.resRout,a0
  141.     suba.l    a1,a1
  142.     movea.l    d0,a2
  143. .again:    bsr.l    Screen.requestUpdate
  144.     tst.l    d0
  145.     bmi.s    .again
  146.     clr.l    DspWaves.resRout
  147.  
  148.     rts
  149.  
  150. ;======= OBJECT SUBROUTINES ========
  151.  
  152. DspWaves.IncreaseWaveVelocity:
  153.     move.w    DspWaves.wavePosition,DspWaves.waveStartPos
  154.     move.w    $4bc.w,DspWaves.waveStart
  155.     addq.w    #1,DspWaves.waveVelocity
  156.     rts
  157.  
  158. DspWaves.DecreaseWaveVelocity:
  159.     move.w    DspWaves.wavePosition,DspWaves.waveStartPos
  160.     move.w    $4bc.w,DspWaves.waveStart
  161.     subq.w    #1,DspWaves.waveVelocity
  162.     rts
  163.  
  164. DspWaves.IncreaseTwistVelocity:
  165.     move.w    DspWaves.twistPosition,DspWaves.twistStartPos
  166.     move.w    $4bc.w,DspWaves.twistStart
  167.     addq.w    #2,DspWaves.twistVelocity
  168.     rts
  169.  
  170. DspWaves.DecreaseTwistVelocity:
  171.     move.w    DspWaves.twistPosition,DspWaves.twistStartPos
  172.     move.w    $4bc.w,DspWaves.twistStart
  173.     subq.w    #2,DspWaves.twistVelocity
  174.     rts
  175.  
  176. DspWaves.IncreaseRotation:
  177.     add.w    #$40,DspWaves.rotationAmp
  178.     rts
  179.  
  180. DspWaves.DecreaseRotation:
  181.     sub.w    #$20,DspWaves.rotationAmp
  182.     rts
  183.  
  184. DspWaves.IncreaseScale:
  185.     add.w    #$40,DspWaves.scalar
  186.     rts
  187.  
  188. DspWaves.DecreaseScale:
  189.     sub.w    #$40,DspWaves.scalar
  190.     rts
  191.  
  192. DspWaves.IncreaseWavestep:
  193.     addq.w    #1,DspWaves.waveStep
  194.     rts
  195.  
  196. DspWaves.DecreaseWavestep:
  197.     subq.w    #1,DspWaves.waveStep
  198.     rts
  199.  
  200. DspWaves.setNullText:
  201.     move.l    #DspWaves.nullText,DspWaves.textAdr
  202.     rts
  203.  
  204. DspWaves.setLineText:
  205.     move.l    #DspWaves.lineText,DspWaves.textAdr
  206.     rts
  207.  
  208. DspWaves.setPresentText:
  209.     move.l    #DspWaves.presentText,DspWaves.textAdr
  210.     rts
  211.  
  212. DspWaves.setFunnyText:
  213.     move.l    #DspWaves.funnyText,DspWaves.textAdr
  214.     rts
  215.  
  216. DspWaves.setCodeText:
  217.     move.l    #DspWaves.codeText,DspWaves.textAdr
  218.     rts
  219.  
  220. DspWaves.setMusicText:
  221.     move.l    #DspWaves.musicText,DspWaves.textAdr
  222.     rts
  223.  
  224. ; Paints text in highcolor. Also handles 'returns'.
  225. ; INPUT:
  226. ; d0.w=screenwidth (pixels)
  227. ; d1.w=x offset
  228. ; d2.w=y offset
  229. ; a0: screen (highcolor)
  230. ; a4: text (nullterminated)
  231. DspWaves.paintText:
  232.     move.w    d0,.width
  233.     mulu.w    d0,d2
  234.     ext.l    d1
  235.     add.l    d1,d2
  236.     lea    (a0,d2.l*2),a0
  237.     move.l    a0,d4
  238.     lea    Font.pic,a1
  239.     lea    Font.charTable,a3
  240.  
  241. .charloop:
  242.     clr.l    d0
  243.     move.b    (a4)+,d0
  244.     beq    .end
  245.     cmpi.w    #$0A,d0
  246.     bne    .char
  247.     addi.l    #16*160*2,d4
  248.     movea.l    d4,a0
  249.     bra.s    .charloop
  250.  
  251. .char:    subi.b    #32,d0
  252.     mulu.w    #6,d0
  253.     movem.w    (a3,d0.l),d0-d2
  254.     mulu.w    #320,d0
  255.     add.l    d1,d0
  256.     move.w    d2,d5
  257.     subq.w    #1,d5
  258.     lea    (a1,d0.l*2),a2
  259.     movea.w    .width(pc),a6
  260.     movea.w    #320,a5
  261.     suba.l    d2,a6
  262.     suba.l    d2,a5
  263.     adda.l    a6,a6
  264.     adda.l    a5,a5
  265.     moveq    #16-1,d7
  266.  
  267. .yloop:    move.w    d5,d6
  268.  
  269. .xloop:    move.w    (a2)+,d0            ; d0.w=src hc pixel
  270.     bne.s    .paint
  271.     addq    #2,a0
  272.     dbf    d6,.xloop
  273.     bra.s    .end_xloop
  274.  
  275. .paint:
  276.     IFNE    1
  277.  
  278.     move.w    (a0),d4
  279.     andi.w    #$F800,d4
  280.     add.w    d0,d4
  281.     bcc.s    .red_sat_done
  282.     moveq    #$FFFFFFFF,d4
  283. .red_sat_done:
  284.     andi.w    #$F800,d4            ; d4.w=red
  285.  
  286.     move.w    (a0),d3
  287.     andi.w    #$07E0,d3
  288.     lsl.w    #5,d3
  289.     move.w    d0,d1
  290.     lsl.w    #5,d1
  291.     add.w    d1,d3
  292.     bcc.s    .green_sat_done
  293.     moveq    #$FFFFFFFF,d3
  294. .green_sat_done:
  295.     andi.w    #$FC00,d3            ; d3.w=green<<5
  296.     lsr.w    #5,d3                ; d3.w=green
  297.     or.w    d3,d4                ; d4.w=red|green
  298.  
  299.     move.w    (a0),d3
  300.     andi.w    #$001F,d3
  301.     lsl.w    #3,d3
  302.     move.w    d0,d1
  303.     lsl.w    #3,d1
  304.     add.b    d1,d3
  305.     bcc.s    .blue_sat_done
  306.     moveq    #$FFFFFFFF,d3
  307. .blue_sat_done:
  308.     andi.w    #$00F8,d3            ; d3.w=blue<<5
  309.     lsr.w    #3,d3                ; d3.w=blue
  310.     or.w    d3,d4                ; d4.w=red|green|blue
  311.  
  312.     move.w    d4,(a0)+            ; Store pixel.
  313.  
  314.     ELSE
  315.  
  316.     move.w    d0,(a0)+
  317.  
  318.     ENDC
  319.  
  320.     dbf    d6,.xloop
  321.  
  322. .end_xloop:
  323.  
  324.     adda.l    a6,a0
  325.     adda.l    a5,a2
  326.     dbf    d7,.yloop
  327.     
  328.     move.w    .width(pc),d0
  329.     mulu.w    #16*2,d0
  330.     suba.l    d0,a0
  331.     lea    2(a0,d2.l*2),a0
  332.  
  333.     bra    .charloop
  334.  
  335. .end:    rts
  336.  
  337. .width:    DC.W    0
  338.  
  339. ; Paints text in highcolor. Also handles 'returns'.
  340. ; INPUT:
  341. ; d0.w=screenwidth (pixels)
  342. ; d1.w=x offset
  343. ; d2.w=y offset
  344. ; a0: screen (highcolor)
  345. ; a4: text (nullterminated)
  346. DspWaves.paintTextH:
  347.     move.w    d0,.width
  348.     mulu.w    d0,d2
  349.     ext.l    d1
  350.     add.l    d1,d2
  351.     lea    (a0,d2.l*4),a0
  352.     move.l    a0,d4
  353.     lea    Font.pic,a1
  354.     lea    Font.charTable,a3
  355.  
  356. .charloop:
  357.     clr.l    d0
  358.     move.b    (a4)+,d0
  359.     beq    .end
  360.     cmpi.w    #$0A,d0
  361.     bne.s    .char
  362.     addi.l    #16*160*4,d4
  363.     movea.l    d4,a0
  364.     bra.s    .charloop
  365.  
  366. .char:    subi.b    #32,d0
  367.     mulu.w    #6,d0
  368.     movem.w    (a3,d0.l),d0-d2
  369.     mulu.w    #320,d0
  370.     add.l    d1,d0
  371.     move.w    d2,d5
  372.     subq.w    #1,d5
  373.     lea    (a1,d0.l*2),a2
  374.     movea.w    .width(pc),a6
  375.     movea.w    #320,a5
  376.     suba.l    d2,a6
  377.     suba.l    d2,a5
  378.     adda.l    a6,a6
  379.     adda.l    a6,a6
  380.     adda.l    a5,a5
  381.     moveq    #16-1,d7
  382.  
  383. .yloop:    move.w    d5,d6
  384.  
  385. .xloop:    move.w    (a2)+,d0
  386.     bne.s    .paint
  387.     addq    #4,a0
  388.     dbf    d6,.xloop
  389.     bra.s    .end_xloop
  390.  
  391. .paint:
  392.     IFNE    1
  393.  
  394.     move.w    (a0),d4
  395.     andi.w    #$F800,d4
  396.     add.w    d0,d4
  397.     bcc.s    .red_sat_done
  398.     moveq    #$FFFFFFFF,d4
  399. .red_sat_done:
  400.     andi.w    #$F800,d4            ; d4.w=red
  401.  
  402.     move.w    (a0),d3
  403.     andi.w    #$07E0,d3
  404.     lsl.w    #5,d3
  405.     move.w    d0,d1
  406.     lsl.w    #5,d1
  407.     add.w    d1,d3
  408.     bcc.s    .green_sat_done
  409.     moveq    #$FFFFFFFF,d3
  410. .green_sat_done:
  411.     andi.w    #$FC00,d3            ; d3.w=green<<5
  412.     lsr.w    #5,d3                ; d3.w=green
  413.     or.w    d3,d4                ; d4.w=red|green
  414.  
  415.     move.w    (a0),d3
  416.     andi.w    #$001F,d3
  417.     lsl.w    #3,d3
  418.     move.w    d0,d1
  419.     lsl.w    #3,d1
  420.     add.b    d1,d3
  421.     bcc.s    .blue_sat_done
  422.     moveq    #$FFFFFFFF,d3
  423. .blue_sat_done:
  424.     andi.w    #$00F8,d3            ; d3.w=blue<<5
  425.     lsr.w    #3,d3                ; d3.w=blue
  426.     or.w    d3,d4                ; d4.w=red|green|blue
  427.  
  428.     move.w    d4,(a0)+            ; Store pixel.
  429.     move.w    d4,(a0)+            ; Store pixel.
  430.  
  431.     ELSE
  432.  
  433.     move.w    d0,(a0)+
  434.     move.w    d0,(a0)+
  435.  
  436.     ENDC
  437.  
  438.     dbf    d6,.xloop
  439.  
  440. .end_xloop:
  441.  
  442.     adda.l    a6,a0
  443.     adda.l    a5,a2
  444.     dbf    d7,.yloop
  445.     
  446.     move.w    .width(pc),d0
  447.     mulu.w    #16*4,d0
  448.     suba.l    d0,a0
  449.     lea    4(a0,d2.l*4),a0
  450.  
  451.     bra    .charloop
  452.  
  453. .end:    rts
  454.  
  455. .width:    DC.W    0
  456.  
  457. ; Paints text in highcolor. Also handles 'returns'.
  458. ; INPUT:
  459. ; d0.w=screenwidth (pixels)
  460. ; d1.w=x offset
  461. ; d2.w=y offset
  462. ; a0: screen (highcolor)
  463. ; a4: text (nullterminated)
  464. DspWaves.paintTextV:
  465.     move.w    d0,.width
  466.     mulu.w    d0,d2
  467.     add.l    d2,d2
  468.     ext.l    d1
  469.     add.l    d1,d2
  470.     lea    (a0,d2.l*2),a0
  471.     move.l    a0,d4
  472.     lea    Font.pic,a1
  473.     lea    Font.charTable,a3
  474.  
  475. .charloop:
  476.     clr.l    d0
  477.     move.b    (a4)+,d0
  478.     beq    .end
  479.     cmpi.w    #$0A,d0
  480.     bne.s    .char
  481.     addi.l    #32*160*2,d4
  482.     movea.l    d4,a0
  483.     bra.s    .charloop
  484.  
  485. .char:    subi.b    #32,d0
  486.     mulu.w    #6,d0
  487.     movem.w    (a3,d0.l),d0-d2
  488.     mulu.w    #320,d0
  489.     add.l    d1,d0
  490.     move.w    d2,d5
  491.     subq.w    #1,d5
  492.     lea    (a1,d0.l*2),a2
  493.     movea.w    .width(pc),a6
  494.     move.l    a6,d3
  495.     adda.l    a6,a6
  496.     movea.w    #320,a5
  497.     suba.l    d2,a6
  498.     suba.l    d2,a5
  499.     adda.l    a6,a6
  500.     adda.l    a5,a5
  501.     moveq    #16-1,d7
  502.  
  503. .yloop:    move.w    d5,d6
  504.  
  505. .xloop:    move.w    (a2)+,d0
  506.     bne.s    .paint
  507.     addq    #2,a0
  508.     dbf    d6,.xloop
  509.     bra.s    .end_xloop
  510.  
  511. .paint:
  512.     IFNE    1
  513.  
  514.     move.w    (a0),d4
  515.     andi.w    #$F800,d4
  516.     add.w    d0,d4
  517.     bcc.s    .red_sat_done
  518.     moveq    #$FFFFFFFF,d4
  519. .red_sat_done:
  520.     andi.w    #$F800,d4            ; d4.w=red
  521.  
  522.     move.w    (a0),d3
  523.     andi.w    #$07E0,d3
  524.     lsl.w    #5,d3
  525.     move.w    d0,d1
  526.     lsl.w    #5,d1
  527.     add.w    d1,d3
  528.     bcc.s    .green_sat_done
  529.     moveq    #$FFFFFFFF,d3
  530. .green_sat_done:
  531.     andi.w    #$FC00,d3            ; d3.w=green<<5
  532.     lsr.w    #5,d3                ; d3.w=green
  533.     or.w    d3,d4                ; d4.w=red|green
  534.  
  535.     move.w    (a0),d3
  536.     andi.w    #$001F,d3
  537.     lsl.w    #3,d3
  538.     move.w    d0,d1
  539.     lsl.w    #3,d1
  540.     add.b    d1,d3
  541.     bcc.s    .blue_sat_done
  542.     moveq    #$FFFFFFFF,d3
  543. .blue_sat_done:
  544.     andi.w    #$00F8,d3            ; d3.w=blue<<5
  545.     lsr.w    #3,d3                ; d3.w=blue
  546.     or.w    d3,d4                ; d4.w=red|green|blue
  547.  
  548. ; Store pixel.
  549.     move.w    d4,160*2(a0)
  550.     move.w    d4,(a0)+
  551.  
  552.     ELSE
  553.  
  554.     move.w    d0,160*2(a0)
  555.     move.w    d0,(a0)+
  556.     
  557.     ENDC
  558.  
  559.     dbf    d6,.xloop
  560.  
  561. .end_xloop:
  562.  
  563.     adda.l    a6,a0
  564.     adda.l    a5,a2
  565.     dbf    d7,.yloop
  566.     
  567.     move.w    .width(pc),d0
  568.     mulu.w    #32*2,d0
  569.     suba.l    d0,a0
  570.     lea    2(a0,d2.l*2),a0
  571.  
  572.     bra    .charloop
  573.  
  574. .end:    rts
  575.  
  576. .width:    DC.W    0
  577.  
  578.  
  579.  
  580. * Calculates circular wavetable for circular plasma.
  581. DspWaves.initCircular:    
  582.     moveq    #-50,d7
  583.  
  584. .yloop:    moveq    #-80,d6
  585.  
  586. .xloop:    move.w    d6,d0
  587.     muls.w    d0,d0
  588.     move.w    d7,d1
  589.     muls.w    d1,d1
  590.     add.l    d0,d1
  591.     bsr.l    Math.sqrt
  592.     swap    d0
  593.     andi.l    #$000001ff,d0
  594.     sendLongToDsp    d0
  595.     addq.w    #1,d6
  596.     blt.s    .xloop
  597.  
  598.     addq.w    #1,d7
  599.     cmpi.w    #50,d7
  600.     blt.s    .yloop
  601.  
  602.     rts
  603.  
  604. ; p[t] = r[t](cos[phase[t]], sin[phase[t]])
  605. DspWaves.calcTable:
  606.     lea    sine_tbl,a1
  607.     move.w    $4bc.w,d0
  608.     move.w    d0,d5
  609.  
  610. ; Calc twist phase.
  611.     sub.w    DspWaves.twistStart,d5
  612.     muls.w    DspWaves.twistVelocity,d5
  613.     asr.l    #2,d5
  614.     add.w    DspWaves.twistStartPos,d5
  615.     move.w    d5,DspWaves.twistPosition
  616.  
  617. ; Calc wave phase.
  618.     sub.w    DspWaves.waveStart,d0
  619.     muls.w    DspWaves.waveVelocity,d0
  620.     asr.l    #2,d0
  621.     add.w    DspWaves.waveStartPos,d0
  622.     move.w    d0,DspWaves.wavePosition
  623.  
  624.     move.w    DspWaves.waveStep,a6
  625.     move.w    DspWaves.rotationAmp,d4
  626.     move.w    DspWaves.scalar,d6
  627.     move.w    #95-1,d7
  628. ; d0.w = t = 0
  629.  
  630. .loop:    Do_SinModulo    d0
  631.     Do_SinModulo    d5
  632. ; d0.w = t mod 2*pi
  633.     Get_Sin    a1,d0,d1
  634.     muls.w    d6,d1
  635.     add.l    d1,d1
  636.     swap    d1
  637. ; d1.w = r[t]
  638.     Get_Sin    a1,d5,d2
  639.     muls.w    d4,d2
  640.     swap    d2
  641.     Do_SinModulo    d2
  642. ; d2.w = phase[t]
  643.     Get_Cos    a1,d2,d3
  644. ; d3.w = cos[phase[t]]
  645.     Get_Sin    a1,d2,d2
  646. ; d2.w = sin[phase[t]]
  647.     muls.w    d1,d3
  648.     asr.l    #7,d3
  649. ; d3.w = r[t]*cos[phase[t]]
  650.     muls.w    d1,d2
  651.     asr.l    #7,d2
  652. ; d2.w = r[t]*sin[phase[t]]
  653.     sendLongToDsp    d3
  654.     sendLongToDsp    d2
  655. ; p[t] = r[t](cos[phase[t]], sin[phase[t]])
  656.     add.w    a6,d0                ; t := t + dt
  657.     add.w    a6,d5
  658. ; p[t-1] = r[t-dt](cos[phase[t-dt]], sin[phase[t-dt]])
  659.     dbra    d7,.loop
  660.     rts
  661.  
  662. DspWaves.paintSined:
  663.     movea.l    scr,a0
  664.     lea    Texture.16bTexture2+(256*128+128)*2,a1
  665.     lea    $ffffa206.w,a2
  666.     lea    $ffffa202.w,a5
  667.     moveq    #100-1,d7
  668.  
  669.     move.w    monitormode,d0
  670.     cmpi.w    #vga60,d0
  671.     beq    DspWaves.paintSinedVga60
  672.     cmpi.w    #vga100,d0
  673.     beq    DspWaves.paintSinedVga100
  674.     cmpi.w    #rgb50,d0
  675.     beq    DspWaves.paintSinedRgb50
  676. * Unknown monitormode..
  677.     rts
  678.  
  679. DspWaves.paintSinedVga60:
  680.     movea.w    #160*2,a4
  681.  
  682. .yloop:    moveq    #160/10-1,d6
  683.     lea    (a0,a4.l),a3
  684.  
  685. .wait_for_da_bitch:
  686.     btst.b    #0,(a5)
  687.     beq.s    .wait_for_da_bitch
  688.  
  689. .xloop:
  690.     REPT    10
  691. ;    receiveWordFromDsp    d3
  692.     move.w    (a2),d3
  693.     move.w    (a1,d3.w*2),d3
  694.     move.w    d3,(a0)+
  695.     move.w    d3,(a3)+
  696.     ENDR
  697.     dbf    d6,.xloop
  698.  
  699.     adda.l    a4,a0
  700.     dbf    d7,.yloop
  701.  
  702.     rts
  703.  
  704. DspWaves.paintSinedVga100:
  705.  
  706. .yloop:    moveq    #160/10-1,d6
  707. .wait_for_da_bitch:
  708.     btst.b    #0,(a5)
  709.     beq.s    .wait_for_da_bitch
  710.  
  711. .xloop:
  712.     REPT    10
  713. ;    receiveWordFromDsp    d3
  714.     move.w    (a2),d3
  715.     move.w    (a1,d3.w*2),(a0)+
  716.     ENDR
  717.     dbf    d6,.xloop
  718.  
  719.     dbf    d7,.yloop
  720.  
  721.     rts
  722.  
  723. DspWaves.paintSinedRgb50:
  724.  
  725. .yloop:    moveq    #160/10-1,d6
  726. .wait_for_da_bitch:
  727.     btst.b    #0,(a5)
  728.     beq.s    .wait_for_da_bitch
  729.  
  730. .xloop:
  731.     REPT    10
  732. ;    receiveWordFromDsp    d3
  733.     move.w    (a2),d3
  734.     move.l    (a1,d3.w*2),(a0)+
  735.     ENDR
  736.     dbf    d6,.xloop
  737.  
  738.     dbf    d7,.yloop
  739.  
  740.     rts
  741.  
  742. ;======= OBJECT DATA ========
  743.  
  744.     DATA
  745.  
  746. DspWaves.p56:
  747.     INCBIN    WAVES.P56
  748. DspWaves.p56End
  749.  
  750. DspWaves.lineText:
  751.     DC.B    "         -line out-",0
  752. DspWaves.presentText:
  753.     DC.B    "         :present:",0
  754. DspWaves.funnyText:
  755.     DC.B    " a funny production",0
  756. DspWaves.codeText:
  757.     DC.B    "      code: earx",0
  758. DspWaves.musicText:
  759.     DC.B    "     music: d-force",0
  760. DspWaves.nullText:
  761.     DC.B    0
  762.  
  763.     EVEN
  764.  
  765. ;======= OBJECT RESERVES ========
  766.  
  767.     BSS
  768.  
  769. DspWaves.rotationAmp:
  770.     DS.W    1
  771. DspWaves.waveVelocity:
  772.     DS.W    1
  773. DspWaves.twistVelocity:
  774.     DS.W    1
  775. DspWaves.waveStart:
  776.     DS.W    1
  777. DspWaves.twistStart:
  778.     DS.W    1
  779. DspWaves.wavePosition:
  780.     DS.W    1
  781. DspWaves.twistPosition:
  782.     DS.W    1
  783. DspWaves.waveStartPos:
  784.     DS.W    1
  785. DspWaves.twistStartPos:
  786.     DS.W    1
  787. DspWaves.resRout:
  788.     DS.L    1
  789.  
  790. DspWaves.scalar:
  791.     DS.W    1
  792. DspWaves.waveStep:
  793.     DS.W    1
  794. DspWaves.textAdr:
  795.     DS.L    1
  796.  
  797. ;======= END OF DEMO-EFFECT OBJECT ========