home *** CD-ROM | disk | FTP | other *** search
/ Fujiology Archive / fujiology_archive_v1_0.iso / !FALCON / LINEOUT / DELTA.ZIP / DELTASRC.ZIP / DELTA.SRC / JULIA.ASM < prev    next >
Assembly Source File  |  2001-09-28  |  2KB  |  92 lines

  1. get:    MACRO
  2.     jclr    #0,X:<<$FFE9,*
  3.     movep    X:<<$FFEB,\1
  4.     ENDM
  5.  
  6. send:    MACRO
  7.     jclr    #1,X:<<$FFE9,*
  8.     movep    \1,X:<<$FFEB
  9.     ENDM
  10.  
  11. ITERATIONS:    =    32
  12.  
  13.     ORG    P:$0000
  14.     jmp    <start
  15.  
  16.     ORG    P:$0040
  17.  
  18. start:    move            #<jx,r0
  19.     do    #8,_loop
  20.     get    x:(r0)+
  21. _loop:    jsr    <calcJulia
  22.     jmp    <start
  23.  
  24. calcJulia:
  25.     move            #>$FFEB,r1
  26.     move            x:<lx,a
  27.     move            a1,x:<vx
  28.     move            x:<ty,b
  29.     move            b1,x:<vy
  30.     do    #50,_yloop
  31.  
  32.     move            x:<vx,a
  33.     move            a1,x:<hx
  34.     move            x:<vy,b
  35.     move            b1,x:<hy
  36.     do    #160,_xloop
  37.  
  38.     move            x:<hx,x0
  39.     move            x:<hy,b
  40.     move            x:<jx,a
  41.     andi    #%10111111,ccr                    ; Clear limit bit.
  42.     do    #ITERATIONS,_iteration_loop
  43.  
  44. ; r0=#iterations done
  45. ; f(c,n) = f(c,n-1)^2 + j, f(c,0) = c
  46. ; Calculate f(c,n-1)^2 = x*x-y*y + i(x*y+x*y)
  47. ; |C| = |X + i*Y| = sqrt(X*X+Y*Y) < 2.0; faster: |C|^2 = (X*X+Y*Y) < 4.0
  48. ; Blah. That circle check takes too much time, better use 1d check!
  49.     mac    +x0,x0,a    b,y0                ; a=(xn^2+jx)/4, y0=yn/2
  50.     jls    <_end_iterations                ; Limiting ? (=> divergence)
  51.     macr    -y0,y0,a    x:<jy,b                ; a=(xn^2-yn^2+jx)/4, b=jy/8
  52.     macr    +x0,y0,b    a,x0                ; b=(xn*yn+jy/2)/4, x0=x(n+1)/2
  53.     asl    b        x:<jx,a                ; b=y(n+1)/4, a=jx/4
  54. _iteration_loop:
  55.     clr    a
  56.     jclr    #1,x:<<$FFE9,*
  57.     move            a,x:(r1)            ; Write #iterations
  58.     jmp    <_yeah
  59. _end_iterations:
  60.     jclr    #1,x:<<$FFE9,*
  61.     movec            lc,x:(r1)            ; Write #iterations
  62.     enddo
  63.  
  64. _yeah:    move            x:<hx,a
  65.     move            x:<hdx,x0
  66.     add    x0,a                        ; a=cx+dx
  67.     move            a1,x:<hx
  68. _xloop:
  69.  
  70.     move            x:<vy,b
  71.     move            x:<vdy,y0
  72.     add    y0,b                        ; b=cy+dy
  73.     move            b1,x:<vy
  74. _yloop:
  75.     rts
  76.  
  77. ;== INTERNAL X RAM ==========================================================
  78.  
  79.     ORG    X:$0000
  80.  
  81. jx:    DS    1                        ; re julia param
  82. jy:    DS    1                        ; im julia param
  83. lx:    DS    1                        ; left x
  84. ty:    DS    1                        ; top y
  85. hdx:    DS    1                        ; horizontal x step
  86. hdy:    DS    1                        ; horizontal y step
  87. vdx:    DS    1                        ; vertical x step
  88. vdy:    DS    1                        ; vertical y step
  89. hx:    DS    1                        ; horizontal x
  90. hy:    DS    1                        ; horizontal y
  91. vx:    DS    1                        ; vertical x
  92. vy:    DS    1                        ; vertical y