home *** CD-ROM | disk | FTP | other *** search
/ Fujiology Archive / fujiology_archive_v1_0.iso / !FALCON / LINEOUT / DELTA.ZIP / DELTASRC.ZIP / DELTA.SRC / WAVES.ASM < prev    next >
Assembly Source File  |  2002-12-20  |  2KB  |  106 lines

  1. ;======== GLOBAL MACROS ========
  2.  
  3. get:    MACRO
  4.     jclr    #0,X:<<$FFE9,*
  5.     movep    X:<<$FFEB,\1
  6.     ENDM
  7.  
  8. send:    MACRO
  9.     jclr    #1,X:<<$FFE9,*
  10.     movep    \1,X:<<$FFEB
  11.     ENDM
  12.  
  13. ;======== P-Memory Code ========
  14.  
  15.     ORG    P:$0000
  16.     jmp    <Waves
  17.  
  18.     ORG    P:$0040
  19. Waves:    jsr    <fillTable
  20.     jsr    <receiveRadiusMap
  21. _loop:    jsr    <receiveWaveTable
  22.     jsr    <sendWaves
  23.     jmp    <_loop
  24.  
  25. fillTable:
  26.     move            #<xTable,r0
  27.     move            #>-80,a
  28.     move            #>1,x0
  29.     do    #160,_loop
  30.     add    x0,a        a1,x:(r0)+
  31. _loop:    rts
  32.  
  33. receiveRadiusMap:
  34.     move            #<radiusMap,r0
  35.     move            #>80*100,x0
  36.     do    x0,_loop
  37.     get    y:(r0)+
  38. _loop:    rts
  39.  
  40. receiveWaveTable:
  41.     move            #<waveTable,r0
  42.     do    #>95,_loop
  43.     get    x:(r0)
  44.     get    y:(r0)+
  45. _loop:    rts
  46.  
  47. sendWaves:
  48.     move            #<radiusMap,r0
  49.     move            #<waveTable,r1
  50.     move            #<$80,r4            ; r4=ny scalar
  51.     move            #<81,n0
  52.     move            #>-50,y0            ; y0=ycount=-50
  53.  
  54.     do    #100,_yloop
  55.     move                    y:(r0)+,n1    ; n1 = radius
  56.     move            #<xTable,r3
  57.     move            l:(r1+n1),x
  58.  
  59.     do    #80,_xloop
  60.     mpy    +x0,y0,a    x:(r3)+,y1            ; a = sin*y = nx
  61.     macr    +x1,y1,a            y:(r0)+,n1    ; a = cos*x+sin*y = nx, n1 = radius
  62.     mpy    -x0,y1,b    a1,a0                ; b = -sin*x
  63.     macr    +x1,y0,b    r4,x0                ; b = -sin*x+cos*y = ny, x0 = ny scalar
  64.     move            b1,x1                ; x1 = ny
  65.     mac    +x0,x1,a    l:(r1+n1),x            ; a = scaled ny + scaled nx = offset, x0=1
  66.     send    a0                        ; Send offset to host.
  67. _xloop:
  68. ; b = 1
  69.     move            (r0)-
  70.     move                    y:-(r0),n1
  71.     nop
  72.     move            l:(r1+n1),x
  73.  
  74.     do    #80,_xloop2
  75.     mpy    +x0,y0,a    x:(r3)+,y1            ; a = sin*y
  76.     macr    +x1,y1,a            y:-(r0),n1    ; a = cos*x+sin*y = nx, n1 = radius
  77.     mpy    -x0,y1,b    a1,a0                ; b = -sin*x
  78.     macr    +x1,y0,b    r4,x0                ; b = -sin*x+cos*y = ny, x0 = ny scalar
  79.     move            b1,x1                ; x1 = ny
  80.     mac    +x0,x1,a    l:(r1+n1),x            ; a = scaled ny + scaled nx = offset, x0=1
  81.     send    a0                        ; Send offset to host.
  82. _xloop2:
  83.     
  84. ; Increase ycount..
  85.     move            #<1,b1
  86.     add    y0,b        (r0)+n0                ; r0: next line in radiusmap
  87.     move            b1,y0
  88. _yloop:    rts
  89.  
  90. ;======== X Memory ========
  91.  
  92.     ORG    X:$0000
  93.  
  94. count:    DS    1
  95. waveTable:
  96.     DS    95
  97. xTable:    DS    160                        ; contains -80,-79,...+79
  98.  
  99. ;======== Y Memory ========
  100.  
  101.     ORG    Y:95
  102.  
  103.     DS    1
  104. radiusMap:
  105.     DS    80*100
  106.