home *** CD-ROM | disk | FTP | other *** search
/ Fujiology Archive / fujiology_archive_v1_0.iso / !FALCON / LINEOUT / DELTA.ZIP / DELTASRC.ZIP / DELTA.SRC / DSPWATER.ASM < prev    next >
Assembly Source File  |  2002-07-26  |  4KB  |  214 lines

  1. ; This will run 100% in DSP internal P Memory! 
  2. ; High precision stuff, full 3*3 filter!
  3.  
  4. ; basin dimentions: be sure not to make them too big!
  5. ; This might overflow the DSP RAM!
  6. ; Fucking dsp mixer limits this size smaller than a goddamn stamp!
  7. WIDTH:        =    144
  8. HEIGHT:        =    82
  9. TOTALWIDTH:    =    WIDTH+2
  10. TOTALHEIGHT:    =    HEIGHT+2
  11.  
  12. SCALAR:        =    1
  13.  
  14. get:    MACRO
  15. __getl:
  16.     jclr    #0,X:<<$FFE9,__getl
  17.     movep    X:<<$FFEB,\1
  18.     ENDM
  19. send:    MACRO
  20. __sendl:
  21.     jclr    #1,X:<<$FFE9,__sendl
  22.     movep    \1,X:<<$FFEB
  23.     ENDM
  24.  
  25.     ORG    P:$0000
  26.     jmp    <Main
  27.  
  28.     ORG    P:$0040
  29. Main:    jsr    <clear_buffers
  30.  
  31. _loop:    jsr    <xupdate
  32.     jsr    <drop_x
  33.     jsr    <send_xbuffer
  34.  
  35.     jsr    <yupdate
  36.     jsr    <drop_y
  37.     jsr    <send_ybuffer
  38.  
  39.     jmp    <_loop
  40.  
  41. clear_buffers:
  42.     move            #>TOTALWIDTH*TOTALHEIGHT+1,n7
  43.     move            #>xbuf-(TOTALWIDTH+1),r0
  44.     clr    a        #>ybuf-(TOTALWIDTH+1),r4
  45.     do    n7,<_end_loop
  46. _loop:    move            a,x:(r0)+    a,y:(r4)+
  47. _end_loop:
  48.     rts
  49.  
  50. send_ybuffer:
  51.     move            #<2,n0
  52.     move            #>ybuf+1,r0
  53.     move            #>SCALAR,x1
  54.     move                    y:(r0)+,x0
  55.  
  56.     do    #<HEIGHT,_yloop
  57.  
  58.     do    #<WIDTH,_xloop
  59.     mpy    x1,x0,a                y:(r0)+,x0
  60.     send    a0
  61. _xloop:
  62.  
  63.     move    (r0)+n0
  64. _yloop:
  65.  
  66.     nop
  67.     rts
  68.  
  69. send_xbuffer:
  70.     move            #<2,n0
  71.     move            #>xbuf+1,r0
  72.     move            #>SCALAR,x1
  73.     move            x:(r0)+,x0
  74.  
  75.     do    #<HEIGHT,_yloop
  76.  
  77.     do    #<WIDTH,_xloop
  78.     mpy    x1,x0,a        x:(r0)+,x0
  79.     send    a0
  80. _xloop:
  81.  
  82.     move            (r0)+n0
  83. _yloop:
  84.     nop
  85.     rts
  86.  
  87. xupdate:move            #>ybuf-TOTALWIDTH,r0        ;top
  88.     move            #>ybuf-1,r1            ;left
  89.     move            #>ybuf+1,r2            ;right
  90.     move            #>ybuf+TOTALWIDTH,r3        ;bottom
  91.     move            #>xbuf,r4            ;current
  92.     move            #>ybuf-TOTALWIDTH-1,r5        ;left top
  93.     move            #>ybuf+TOTALWIDTH-1,r6        ;left bottom
  94.     move            #<2,n2
  95.     move            #<2,n3
  96.     move            #<2,n4
  97.     move            #<2,n5
  98.     move            #<2,n6
  99.     move            #<$7C,y1
  100.     move            #<$20,x1
  101.  
  102.     do    #<HEIGHT,_yloop
  103.     move                    y:(r0)+,a    ; get top
  104.     move                    y:(r1)+,y0    ; get left
  105.  
  106.     do    #<WIDTH,_xloop
  107.     add    y0,a                y:(r2)+,y0    ; add left,get right
  108.     add    y0,a                y:(r3)+,y0    ; add right,get bottom
  109.     add    y0,a                y:(r5)+,y0    ; add right,get left top
  110.     add    y0,a                y:(r6)+,y0    ; add left top,get left bottom
  111.     add    y0,a                y:(r0),y0    ; add left bottom,get right top
  112.     add    y0,a                y:(r3),y0    ; add right top,get right bottom
  113.     add    y0,a        x:(r4),b            ; add right bottom,get destination
  114.     move            a,x0
  115.     mac    -x1,x0,b
  116.     move            b,x0
  117.     mpy    -y1,x0,a            y:(r1)+,y0
  118.     move            a,x:(r4)+    y:(r0)+,a
  119. _xloop:
  120.  
  121.     move            (r0)+
  122.     move            (r1)+
  123.     move            (r2)+n2
  124.     move            (r3)+n3
  125.     move            (r4)+n4
  126.     move            (r5)+n5
  127.     move            (r6)+n6
  128. _yloop:
  129.     nop
  130.     rts
  131.  
  132. yupdate:move            #>xbuf-TOTALWIDTH,r0        ;top
  133.     move            #>xbuf-1,r1            ;left
  134.     move            #>xbuf+1,r2            ;right
  135.     move            #>xbuf+TOTALWIDTH,r3        ;bottom
  136.     move            #>ybuf,r4            ;current
  137.     move            #>xbuf-TOTALWIDTH-1,r5        ;left top
  138.     move            #>xbuf+TOTALWIDTH-1,r6        ;left bottom
  139.     move            #<2,n2
  140.     move            #<2,n3
  141.     move            #<2,n4
  142.     move            #<2,n5
  143.     move            #<2,n6
  144.     move            #<$7C,y1
  145.     move            #<$20,x1
  146.  
  147.     do    #<HEIGHT,_yloop
  148.     move            x:(r0)+,a
  149.     move            x:(r1)+,y0
  150.  
  151.     do    #<WIDTH,_xloop
  152.     add    y0,a        x:(r2)+,y0
  153.     add    y0,a        x:(r3)+,y0
  154.     add    y0,a        x:(r5)+,y0            ;add right,get left top
  155.     add    y0,a        x:(r6)+,y0            ;add left top,get left bottom
  156.     add    y0,a        x:(r0),y0            ;add left bottom,get right top
  157.     add    y0,a        x:(r3),y0            ;add right top,get right bottom
  158.     add    y0,a                y:(r4),b
  159.     move            a,x0
  160.     mac    -x1,x0,b
  161.     move            b,x0
  162.     mpy    -y1,x0,a    x:(r1)+,y0
  163.     move            x:(r0)+,a    a,y:(r4)+
  164. _xloop:
  165.  
  166.     move            (r0)+
  167.     move            (r1)+
  168.     move            (r2)+n2
  169.     move            (r3)+n3
  170.     move            (r4)+n4
  171.     move            (r5)+n5
  172.     move            (r6)+n6
  173. _yloop:
  174.     nop
  175.     rts
  176.  
  177. drop_x:    get    a
  178.     tst    a
  179.     jeq    <_end_loop
  180.     move            a,n0
  181.     move            #<xbuf,r1
  182.     do    n0,<_end_loop
  183.  
  184. _loop:    get    n1
  185.     get    x0
  186.     move            x0,x:(r1+n1)
  187. _end_loop:
  188.     nop
  189.     rts
  190.  
  191. drop_y:    get    a
  192.     tst    a
  193.     jeq    <_end_loop
  194.     move            a,n0
  195.     move            #<ybuf,r1
  196.     do    n0,<_end_loop
  197.  
  198. _loop:    get    n1
  199.     get    x0
  200.     move            x0,y:(r1+n1)
  201. _end_loop:
  202.     nop
  203.     rts
  204.  
  205.     ORG    X:$0000
  206.     DS    TOTALWIDTH+1
  207. xbuf:    DS    TOTALWIDTH*HEIGHT
  208.     DS    TOTALWIDTH
  209.  
  210.     ORG    Y:$0000
  211.     DS    TOTALWIDTH+1
  212. ybuf:    DS    TOTALWIDTH*HEIGHT
  213.     DS    TOTALWIDTH
  214.