SHARE
TWEET

Untitled

a guest Jan 24th, 2020 90 Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. %include "include/machine.ca"
  2. %placeat __ExecBase + 0x002000
  3. ; Store static data
  4. %include "include/init.ca"
  5. jmp _Main
  6. %include "include/video.ca"
  7.  
  8. ; Usage
  9. ;   push XCENTER
  10. ;   push YCENTER
  11. ;   push RADIUS
  12. ;   push COLOR
  13. ;   call _DrawCircle
  14. ;   add sp, 16
  15. %const DrawCircleIteration 360
  16. %label _DrawCircle
  17.     push bp
  18.     bp = sp
  19.  
  20.     ; RA = iteration count
  21.     push ra
  22.     ; RB = used for index of pixel
  23.     push rb
  24.     ; RC = temporary
  25.     push rc
  26.  
  27.     ra = 0
  28.  
  29.     ; bp + 8 = color
  30.     ; bp + 12 = radius
  31.     ; bp + 16 = ycenter
  32.     ; bp + 20 = xcenter
  33.     ; bp + 8 = color
  34.     ; bp - 16 = iter. angle
  35.     ; bp - 20 = curr. angle
  36.     sp -= 8
  37.  
  38.     fldpi
  39.     fmuli 2
  40.     fdivi DrawCircleIteration
  41.     fstp [bp - 16]
  42.  
  43.     fld0
  44.  
  45. %label _DrawCircle_Loop
  46.  
  47.     fst [bp - 20]
  48.     fsin
  49.     fmuli [bp + 12]
  50.     fstip rb
  51.     rb += [bp + 16]
  52.     ; Y in RA
  53.     fld [bp - 20]
  54.     fcos
  55.     fmuli [bp + 12]
  56.     fstip rc
  57.     rc += [bp + 20]
  58.     ; X in RC
  59.  
  60.     rb *= VideoWidth
  61.     rb += rc
  62.  
  63.     [rb + VideoPixelBuffer] = byte [bp + 8]
  64.  
  65.     fld [bp - 20]
  66.     fld [bp - 16]
  67.     fadd
  68.     ; next one
  69.  
  70.     inc ra
  71.     cmp ra, DrawCircleIteration
  72.     jg _DrawCircle_End
  73.  
  74.     jmp _DrawCircle_Loop
  75.  
  76. %label _DrawCircle_End
  77.  
  78.     sp += 8
  79.  
  80.     pop rc
  81.     pop rb
  82.     pop ra
  83.     pop bp
  84.     ret
  85.  
  86. ; struct Ball {
  87. ; 0     U32 Radius;
  88. ; 4     U32 X;
  89. ; 8     U32 Y;
  90. ; 12    U32 dX;
  91. ; 16    U32 dY;
  92. ; 20    U32 oX;
  93. ; 24    U32 oY;
  94. ; };
  95.  
  96. ; Usage:
  97. ;   push BallBase
  98. %label _BallPhysics
  99.     push bp
  100.     bp = sp
  101.     push ra
  102.     push rb
  103.  
  104.     ra = [bp + 8]
  105.  
  106.     ; ox = x
  107.     ; oy = y
  108.     [ra + 20] = [ra + 4]
  109.     [ra + 24] = [ra + 8]
  110.  
  111.     ; x += dx, y += dy
  112.     [ra + 4] += [ra + 12]
  113.     [ra + 8] += [ra + 16]
  114.  
  115.     ; if x + radius >= VideoWidth:
  116.     ;   x = VideoWidth - radius - 1
  117.     ;   invert dX
  118.     rb = [ra + 4]
  119.     rb += [ra]
  120.     cmp rb, VideoWidth
  121.     jge _BallPhysics_InvertX_A
  122.     ; if x - radius < 0:
  123.     ;   X = radius
  124.     ;   invert X
  125.     rb = [ra + 4]
  126.     rb -= [ra]
  127.     cmp rb, 0
  128.     jl _BallPhysics_InvertX_B
  129.     jmp _BallPhysics_SkipInvertX
  130.  
  131. %label _BallPhysics_InvertX_A
  132.     [ra + 4] = VideoWidth - 1
  133.     [ra + 4] -= [ra]
  134.     neg [ra + 12]
  135.     jmp _BallPhysics_SkipInvertX
  136. %label _BallPhysics_InvertX_B
  137.     [ra + 4] = [ra]
  138.     [ra + 4] += 1
  139.     neg [ra + 12]
  140. %label _BallPhysics_SkipInvertX
  141.  
  142.     ; if y + radius > VideoHeight:
  143.     ;   y = VideoHeight - radius - 1
  144.     ;   invert dY
  145.     rb = [ra + 8]
  146.     rb += [ra]
  147.     cmp rb, VideoHeight
  148.     jge _BallPhysics_InvertY_A
  149.     ; if y - radius < 0:
  150.     ;   y = radius
  151.     ;   invert Y
  152.     rb = [ra + 8]
  153.     rb -= [ra]
  154.     cmp rb, 0
  155.     jl _BallPhysics_InvertY_B
  156.     jmp _BallPhysics_SkipInvertY
  157.  
  158. %label _BallPhysics_InvertY_A
  159.     [ra + 8] = VideoHeight - 1
  160.     [ra + 8] -= [ra]
  161.     neg [ra + 16]
  162.     jmp _BallPhysics_SkipInvertY
  163. %label _BallPhysics_InvertY_B
  164.     [ra + 8] = [ra]
  165.     [ra + 8] += 1
  166.     neg [ra + 16]
  167. %label _BallPhysics_SkipInvertY
  168.  
  169.     pop rb
  170.     pop ra
  171.     pop bp
  172.     ret
  173.  
  174. ; push Color
  175. ; push BallBase
  176. %label _BallRender
  177.     push bp
  178.     bp = sp
  179.     push ra
  180.  
  181.     ra = [bp + 8]
  182.  
  183.     ; X, Y, R, COLOR
  184.     push [ra + 4]
  185.     push [ra + 8]
  186.     push [ra]
  187.     push [bp + 12]
  188.     call _DrawCircle
  189.     sp += 16
  190.  
  191.     push rb
  192.     rb = [ra]
  193.     rb += [ra]
  194.     rb += 1
  195.     push rc
  196.     rc = [ra + 20]
  197.     rc -= [ra]
  198.     push rd
  199.     rd = [ra + 24]
  200.     rd -= [ra]
  201.     push rc
  202.     push rd
  203.     push rb
  204.     push rb
  205.     call _ClearRect
  206.     sp += 16
  207.     pop rd
  208.     pop rc
  209.     pop rb
  210.  
  211.     pop ra
  212.     pop bp
  213.     ret
  214.  
  215. %label _Main
  216.     sp -= 28
  217.     ; [sp +  0] = Radius
  218.     ;     +  4] = X
  219.     ;     +  8] = Y
  220.     ;     + 12] = dX
  221.     ;     + 16] = dY
  222.     ;     + 20] = oX
  223.     ;     + 24] = oY
  224.     [sp] = 10
  225.     [sp + 4] = 100
  226.     [sp + 8] = 50
  227.     [sp + 12] = 20
  228.     [sp + 16] = 25
  229.  
  230.     ; RC = BallBase
  231.     rc = sp
  232.  
  233.     sp -= 28
  234.     [sp] = 10
  235.     [sp + 4] = 200
  236.     [sp + 8] = 100
  237.     [sp + 12] = 40
  238.     [sp + 16] = 40
  239.  
  240.     ; RD = BallBase 2
  241.     rd = sp
  242.  
  243. %label _Main_Loop
  244.     push rd
  245.     call _BallPhysics
  246.     pop
  247.  
  248.     pop
  249.     push RED
  250.     push rd
  251.     call _BallRender
  252.     pop
  253.     pop
  254.  
  255.     push rc
  256.     call _BallPhysics
  257.     pop
  258.  
  259.     push AQUA
  260.     push rc
  261.     call _BallRender
  262.     pop
  263.  
  264.     jmp _Main_Loop
RAW Paste Data
We use cookies for various purposes including analytics. By continuing to use Pastebin, you agree to our use of cookies as described in the Cookies Policy. OK, I Understand
Top