home *** CD-ROM | disk | FTP | other *** search
/ Transactor / Transactor_21_1988_Transactor_Publishing.d64 / potential.pal (.txt) < prev    next >
Commodore BASIC  |  2023-02-26  |  4KB  |  304 lines

  1. 100 rem  'hires'  circle - potential
  2. 110 rem  source file by anthony bryant
  3. 120 sys 700
  4. 130 .opt n
  5. 140 ;
  6. 150 ;
  7. 160 ;"hires" variables by g.kiziak
  8. 170 x1   = $c027 ;current position
  9. 180 y1   = $c029
  10. 190 x2   = $c02b ;new position
  11. 200 y2   = $c02d
  12. 210 xc   = $c02f ;circ centre (also box)
  13. 220 yc   = $c031
  14. 230 hm   = $c035 ;hires/multi flag
  15. 240 ;
  16. 250 ;
  17. 260 ;"hires" internal subroutines
  18. 270 igeti =$c17c ;internal get integer
  19. 280 ieget =$c187 ;internal eat & get x,y
  20. 290 move  =$c26e ;'move' rtn
  21. 300 imov  =$c271 ;internal moveto x1,y1
  22. 310 iplt  =$c375 ;internal plot
  23. 320 idrw  =$c42b ;internal drawto
  24. 330 ;
  25. 340 ;zero page labels
  26. 350 t1 = $22
  27. 360 t2 = $24
  28. 370 flag = $26
  29. 380 x  = $27
  30. 390 y  = $29
  31. 400 phi = $57
  32. 410 phiy = $59
  33. 420 phixy = $5b
  34. 430 ;
  35. 440 *=$8000    ;545 bytes
  36. 450 ;
  37. 460 xr  .wor 0  ;x radius
  38. 470 yr  .wor 0  ;y radius
  39. 480 x3  .wor 0  ;potential y
  40. 490 y3  .wor 0  ;potential x
  41. 500 ;
  42. 510 ;subroutine moveto xc,yc
  43. 520 movc ldx #3
  44. 530 lda x2,x
  45. 540 sta xc,x
  46. 550 dex
  47. 560 bpl movc+2
  48. 570 rts
  49. 580 ;
  50. 590 ;subroutine moveto xr,yr
  51. 600 movr ldx #3
  52. 610 lda x2,x
  53. 620 sta xr,x
  54. 630 dex
  55. 640 bpl movr+2
  56. 650 rts
  57. 660 ;
  58. 670 ;sys circle,xc,yc,xr,yr
  59. 680 circle = *
  60. 690 jsr ieget
  61. 700 jsr movc ;moveto xc,yc
  62. 710 jsr ieget
  63. 720 jsr movr ;moveto xr,yr
  64. 730 lda #0
  65. 740 sta flag
  66. 750 sta phi
  67. 760 sta phi+1
  68. 770 sta y
  69. 780 sta y+1
  70. 790 ;
  71. 800 cases lda xr
  72. 810 sta x    ;x=xr
  73. 820 cmp yr
  74. 830 lda xr+1
  75. 840 sta x+1
  76. 850 sbc yr+1
  77. 860 bcs loop  ;branch if xr >= yr
  78. 870 swap  lda #$ff
  79. 880 sta flag
  80. 890 lda yr
  81. 900 sta x
  82. 910 tax      ;x=yr
  83. 920 lda yr+1
  84. 930 sta x+1
  85. 940 tay      ;and swap
  86. 950 lda xr
  87. 960 sta yr
  88. 970 stx xr   ; xr with yr
  89. 980 lda xr+1
  90. 990 sta yr+1
  91. 1000 sty xr+1
  92. 1010 ;
  93. 1020 loop = * ;main loop start
  94. 1030 ldx y+1
  95. 1040 stx phiy+1
  96. 1050 lda y
  97. 1060 asl      ;phiy=phi+y+y+1
  98. 1070 rol phiy+1
  99. 1080 sec
  100. 1090 adc phi
  101. 1100 sta phiy
  102. 1110 lda phiy+1
  103. 1120 adc phi+1
  104. 1130 sta phiy+1
  105. 1140 ldx x+1
  106. 1150 stx phixy+1
  107. 1160 lda x
  108. 1170 asl      ;phixy=phiy-x-x+1
  109. 1180 rol phixy+1
  110. 1190 sta phixy
  111. 1200 clc
  112. 1210 lda phiy
  113. 1220 sbc phixy
  114. 1230 sta phixy
  115. 1240 lda phiy+1
  116. 1250 sbc phixy+1
  117. 1260 sta phixy+1
  118. 1270 ;
  119. 1280 lda x
  120. 1290 ldx x+1
  121. 1300 ldy flag
  122. 1310 bmi altn
  123. 1320 sta x2
  124. 1330 stx x2+1
  125. 1340 jsr scale
  126. 1350 sta y3
  127. 1360 stx y3+1
  128. 1370 lda y
  129. 1380 ldx y+1
  130. 1390 sta x3
  131. 1400 stx x3+1
  132. 1410 jsr scale
  133. 1420 sta y2
  134. 1430 stx y2+1
  135. 1440 jmp doplt
  136. 1450 altn sta y3
  137. 1460 stx y3+1
  138. 1470 jsr scale
  139. 1480 sta x2
  140. 1490 stx x2+1
  141. 1500 lda y
  142. 1510 ldx y+1
  143. 1520 sta y2
  144. 1530 stx y2+1
  145. 1540 jsr scale
  146. 1550 sta x3
  147. 1560 stx x3+1
  148. 1570 ;
  149. 1580 doplt jsr plot4
  150. 1590 lda x3
  151. 1600 ldx x3+1
  152. 1610 sta x2
  153. 1620 stx x2+1
  154. 1630 lda y3
  155. 1640 ldx y3+1
  156. 1650 sta y2
  157. 1660 stx y2+1
  158. 1670 jsr plot4
  159. 1680 ;
  160. 1690 inc y
  161. 1700 bne j1
  162. 1710 inc y+1  ;y=y+1
  163. 1720 j1 lda phiy
  164. 1730 ldx phiy+1 ;phi=phiy
  165. 1740 sta phi
  166. 1750 stx phi+1
  167. 1760 abs1 jsr absv   ;take abs(phiy)
  168. 1770 sta t2
  169. 1780 stx t2+1
  170. 1790 lda phixy
  171. 1800 ldx phixy+1
  172. 1810 abs2 jsr absv   ;take abs(phixy)
  173. 1820 sta t1
  174. 1830 stx t1+1
  175. 1840 ;
  176. 1850 doif lda t1    ;if abs(phixy)
  177. 1860 cmp t2    ; < abs(phiy)
  178. 1870 lda t1+1
  179. 1880 sbc t2+1  ;then ...
  180. 1890 bcs else  ;else ...
  181. 1900 then lda phixy
  182. 1910 ldx phixy+1
  183. 1920 sta phi
  184. 1930 stx phi+1 ;phi=phixy
  185. 1940 lda x
  186. 1950 bne j2
  187. 1960 dec x+1
  188. 1970 j2 dec x  ;x=x-1
  189. 1980 else lda x    ;if x >= y
  190. 1990 cmp y    ;then loop
  191. 2000 lda x+1
  192. 2010 sbc y+1
  193. 2020 bcc stop ;else stop
  194. 2030 jmp loop
  195. 2040 stop rts
  196. 2050 ;
  197. 2060 ;subroutine  reflect points & plot
  198. 2070 plot4 = *
  199. 2080 lda xc
  200. 2090 clc
  201. 2100 adc x2
  202. 2110 sta x1
  203. 2120 pha
  204. 2130 lda xc+1
  205. 2140 adc x2+1
  206. 2150 sta x1+1
  207. 2160 pha
  208. 2170 lda yc
  209. 2180 clc
  210. 2190 adc y2
  211. 2200 sta y1
  212. 2210 lda yc+1
  213. 2220 adc y2+1
  214. 2230 sta y1+1
  215. 2240 jsr iplt
  216. 2250 lda xc
  217. 2260 sec
  218. 2270 sbc x2
  219. 2280 sta x1
  220. 2290 lda xc+1
  221. 2300 sbc x2+1
  222. 2310 sta x1+1
  223. 2320 jsr iplt
  224. 2330 lda yc
  225. 2340 sec
  226. 2350 sbc y2
  227. 2360 sta y1
  228. 2370 lda yc+1
  229. 2380 sbc y2+1
  230. 2390 sta y1+1
  231. 2400 jsr iplt
  232. 2410 pla
  233. 2420 sta x1+1
  234. 2430 pla
  235. 2440 sta x1
  236. 2450 jmp iplt
  237. 2460 ;
  238. 2470 ;subroutine absolute value
  239. 2480 absv bpl abok
  240. 2490 clc
  241. 2500 eor #$ff
  242. 2510 adc #1
  243. 2520 pha
  244. 2530 txa
  245. 2540 eor #$ff
  246. 2550 adc #0
  247. 2560 tax
  248. 2570 pla
  249. 2580 abok rts
  250. 2590 ;
  251. 2600 ;subroutine to scale offset
  252. 2610 scale = *     ;t1=t2*yr/xr
  253. 2620 sta t2
  254. 2630 stx t2+1
  255. 2640 lda #0
  256. 2650 sta t1
  257. 2660 sta t1+1
  258. 2670 ldx #17
  259. 2680 clc  ;16 bit integer math
  260. 2690 mullp ror t1+1
  261. 2700 ror t1
  262. 2710 ror t2+1
  263. 2720 ror t2
  264. 2730 bcc decn1
  265. 2740 clc
  266. 2750 lda yr
  267. 2760 adc t1
  268. 2770 sta t1
  269. 2780 lda yr+1
  270. 2790 adc t1+1
  271. 2800 sta t1+1
  272. 2810 decn1  dex
  273. 2820 bne mullp
  274. 2830 lda xr
  275. 2840 ora xr+1
  276. 2850 beq error
  277. 2860 lda #0
  278. 2870 sta t1
  279. 2880 sta t1+1
  280. 2890 ldx #16      ;16 bit integer math
  281. 2900 divlp rol t2
  282. 2910 rol t2+1
  283. 2920 rol t1
  284. 2930 rol t1+1
  285. 2940 sec
  286. 2950 lda t1
  287. 2960 sbc xr
  288. 2970 tay
  289. 2980 lda t1+1
  290. 2990 sbc xr+1
  291. 3000 bcc decn2
  292. 3010 sty t1
  293. 3020 sta t1+1
  294. 3030 decn2  dex
  295. 3040 bne divlp
  296. 3050 rol t2
  297. 3060 rol t2+1
  298. 3070 lda t2
  299. 3080 ldx t2+1
  300. 3090 rts
  301. 3100 error jmp $bb8a ;"division by zero"
  302. 3110 ;
  303. 3120 .end
  304.