home *** CD-ROM | disk | FTP | other *** search
/ Transactor / Transactor_25_1988_Transactor_Publishing.d64 / graphics.tk (.txt) < prev    next >
Commodore BASIC  |  2023-02-26  |  5KB  |  358 lines

  1. 100 sys700
  2. 110 ;
  3. 120 ;  < < <  graphics  v1.0  > > >
  4. 130 ; copyright 1988 by robert huehn
  5. 140 ; high speed graphic routines
  6. 150 ; jan 1988
  7. 160 ;
  8. 170 ;zpage pseudo registers
  9. 180 r0 =$02
  10. 190 r1 =$04
  11. 200 r2 =$06
  12. 210 r3 =$08
  13. 220 r4 =$0a
  14. 230 r5 =$0c
  15. 240 r6 =$0e
  16. 250 r7 =$10
  17. 260 r8 =$12
  18. 270 r9 =$14
  19. 280 ;
  20. 290 *=$9000
  21. 300 ;jump table
  22. 310 bmon jmp ibmon
  23. 320 bmoff jmp ibmoff
  24. 330 bmclr jmp ibmclr
  25. 340 txclr jmp itxclr
  26. 350 plot jmp iplot
  27. 360 draw jmp idraw
  28. 370 ;
  29. 380 bitab =* ;pixel masks
  30. 390 .byte 128,64,32,16,8,4,2,1
  31. 400 lotab =* ;base addresses
  32. 410 hitab =*+1
  33. 420 .word $a000,$a140,$a280,$a3c0
  34. 430 .word $a500,$a640,$a780,$a8c0
  35. 440 .word $aa00,$ab40,$ac80,$adc0
  36. 450 .word $af00,$b040,$b180,$b2c0
  37. 460 .word $b400,$b540,$b680,$b7c0
  38. 470 .word $b900,$ba40,$bb80,$bcc0
  39. 480 .word $be00
  40. 490 ;
  41. 500 ;turn on bit map at $a000
  42. 510 ibmon =*
  43. 520 lda $dd00
  44. 530 and #$30
  45. 540 ora #$01
  46. 550 sta $dd00
  47. 560 lda #$3b
  48. 570 sta $d011
  49. 580 lda #$38
  50. 590 sta $d018
  51. 600 rts
  52. 610 ;
  53. 620 ;back to normal text
  54. 630 ibmoff =*
  55. 640 lda $dd00
  56. 650 and #$30
  57. 660 ora #$03
  58. 670 sta $dd00
  59. 680 lda #$1b
  60. 690 sta $d011
  61. 700 lda #$15
  62. 710 sta $d018
  63. 720 rts
  64. 730 ;
  65. 740 ;clear bit map $a000-bf40
  66. 750 ibmclr =*
  67. 760 lda #0
  68. 770 ldx #250
  69. 780 cl1 sta $9fff,x
  70. 790 sta $a0f9,x
  71. 800 sta $a1f3,x
  72. 810 sta $a2ed,x
  73. 820 sta $a3e7,x
  74. 830 sta $a4e1,x
  75. 840 sta $a5db,x
  76. 850 sta $a6d5,x
  77. 860 sta $a7cf,x
  78. 870 sta $a8c9,x
  79. 880 sta $a9c3,x
  80. 890 sta $aabd,x
  81. 900 sta $abb7,x
  82. 910 sta $acb1,x
  83. 920 sta $adab,x
  84. 930 sta $aea5,x
  85. 940 sta $af9f,x
  86. 950 sta $b099,x
  87. 960 sta $b193,x
  88. 970 sta $b28d,x
  89. 980 sta $b387,x
  90. 990 sta $b481,x
  91. 1000 sta $b57b,x
  92. 1010 sta $b675,x
  93. 1020 sta $b76f,x
  94. 1030 sta $b869,x
  95. 1040 sta $b963,x
  96. 1050 sta $ba5d,x
  97. 1060 sta $bb57,x
  98. 1070 sta $bc51,x
  99. 1080 sta $bd4b,x
  100. 1090 sta $be45,x
  101. 1100 dex
  102. 1110 bne cl1
  103. 1120 rts
  104. 1130 ;
  105. 1140 ;set bit map colour at $8c00
  106. 1150 itxclr =*
  107. 1160 lda #$bf
  108. 1170 ldx #250
  109. 1180 col1 sta $8bff,x
  110. 1190 sta $8cf9,x
  111. 1200 sta $8df3,x
  112. 1210 sta $8eed,x
  113. 1220 dex
  114. 1230 bne col1
  115. 1240 rts
  116. 1250 ;
  117. 1260 ;fast line draw
  118. 1270 idraw =*
  119. 1280 ;passed:
  120. 1290 x1 =r0
  121. 1300 y1 =r1
  122. 1310 x2 =r2
  123. 1320 y2 =r3
  124. 1330 ;altered:
  125. 1340 dx =r4   ;delta x
  126. 1350 dy =r5   ;delta y
  127. 1360 xi =r5+1 ;l/r flag
  128. 1370 yi =r6   ;u/d flag
  129. 1380 base =r7 ;base of pixel addr
  130. 1390 m =r6+1  ;pixel mask
  131. 1400 c =r8    ;count
  132. 1410 r =r9    ;
  133. 1420 ldx #0 ;xinc=right
  134. 1430 ldy #0 ;yinc=down
  135. 1440 lda x2 ;calculate dx=x2-x1
  136. 1450 sec
  137. 1460 sbc x1
  138. 1470 sta dx
  139. 1480 lda x2+1
  140. 1490 sbc x1+1
  141. 1500 sta dx+1
  142. 1510 bcs dr1
  143. 1520 dex ; dx<0, xinc=left
  144. 1530 lda #1
  145. 1540 sbc dx
  146. 1550 sta dx
  147. 1560 lda #0
  148. 1570 sbc dx+1
  149. 1580 sta dx+1
  150. 1590 dr1 lda y2 ;dy=y2-y1
  151. 1600 sec
  152. 1610 sbc y1
  153. 1620 bcs dr2
  154. 1630 dey ;dy<0, yinc=up
  155. 1640 eor #$ff ;dy=abs(dy)
  156. 1650 adc #1
  157. 1660 dr2 sta dy
  158. 1670 stx xi
  159. 1680 sty yi
  160. 1690 lda y1 ;plot (x1,y1)
  161. 1700 and #7
  162. 1710 tay
  163. 1720 eor y1
  164. 1730 lsr
  165. 1740 lsr
  166. 1750 tax
  167. 1760 lda x1
  168. 1770 and #$f8
  169. 1780 adc lotab,x
  170. 1790 sta base ;save base
  171. 1800 lda hitab,x
  172. 1810 adc x1+1
  173. 1820 sta base+1
  174. 1830 lda x1
  175. 1840 and #7
  176. 1850 tax
  177. 1860 lda bitab,x
  178. 1870 sta m ;save mask
  179. 1880 ora (base),y
  180. 1890 sta (base),y
  181. 1900 lda dx+1
  182. 1910 bne dri
  183. 1920 lda dx ;(dx>=dy)
  184. 1930 cmp dy
  185. 1940 bcs dri
  186. 1950 jmp drii
  187. 1960 dri =*;case i -1<slope<1
  188. 1970 lda dx+1
  189. 1980 sta c+1 ;c=dx
  190. 1990 lsr
  191. 2000 sta r+1 ;r=dx/2
  192. 2010 lda dx
  193. 2020 sta c
  194. 2030 ror
  195. 2040 sta r
  196. 2050 lda c
  197. 2060 ora c+1
  198. 2070 beq dr9 ;if single point
  199. 2080 dr3 lda xi
  200. 2090 bmi dr4
  201. 2100 lsr m ;right
  202. 2110 bcc dr5
  203. 2120 ror m
  204. 2130 lda base
  205. 2140 adc #8
  206. 2150 sta base
  207. 2160 bcc dr5
  208. 2170 inc base+1
  209. 2180 bne dr5
  210. 2190 dr4 asl m ;left
  211. 2200 bcc dr5
  212. 2210 rol m
  213. 2220 lda base
  214. 2230 sbc #7
  215. 2240 sta base
  216. 2250 bcs dr5
  217. 2260 dec base+1
  218. 2270 dr5 lda r ;r=r+dy
  219. 2280 clc
  220. 2290 adc dy
  221. 2300 sta r
  222. 2310 bcc dr6
  223. 2320 inc r+1
  224. 2330 dr6 sec
  225. 2340 sbc dx
  226. 2350 tax
  227. 2360 lda r+1
  228. 2370 sbc dx+1
  229. 2380 bcc dr8
  230. 2390 stx r ;r>=dx,
  231. 2400 sta r+1;r=r-dx
  232. 2410 lda yi
  233. 2420 bmi dr7
  234. 2430 iny ;down
  235. 2440 cpy #8
  236. 2450 bcc dr8
  237. 2460 ldy #0
  238. 2470 lda base
  239. 2480 adc #$3f
  240. 2490 sta base
  241. 2500 lda base+1
  242. 2510 adc #1
  243. 2520 bcc dr18
  244. 2530 dr7 dey ;up
  245. 2540 bpl dr8
  246. 2550 ldy #7
  247. 2560 lda base
  248. 2570 sbc #$40
  249. 2580 sta base
  250. 2590 lda base+1
  251. 2600 sbc #1
  252. 2610 dr18 sta base+1
  253. 2620 dr8 lda (base),y
  254. 2630 ora m
  255. 2640 sta (base),y ;plot (x,y)
  256. 2650 dec c
  257. 2660 bne dr3
  258. 2670 dec c+1
  259. 2680 beq dr3 ;next
  260. 2690 dr9 rts
  261. 2700 drii =* ; -1>slope>1
  262. 2710 lda dy
  263. 2720 beq dr15 ;single point
  264. 2730 sta c ;c=dy
  265. 2740 lsr
  266. 2750 sta r ;r=dy/2
  267. 2760 dr10 lda yi
  268. 2770 bmi dr11
  269. 2780 iny ;down
  270. 2790 cpy #8
  271. 2800 bcc dr12
  272. 2810 ldy #0
  273. 2820 lda base
  274. 2830 adc #$3f
  275. 2840 sta base
  276. 2850 lda base+1
  277. 2860 adc #1
  278. 2870 bcc dr19
  279. 2880 dr11 dey ;up
  280. 2890 bpl dr12
  281. 2900 ldy #7
  282. 2910 sec
  283. 2920 lda base
  284. 2930 sbc #$40
  285. 2940 sta base
  286. 2950 lda base+1
  287. 2960 sbc #1
  288. 2970 dr19 sta base+1
  289. 2980 dr12 ldx #0
  290. 2990 lda r ;r=r+dx
  291. 3000 clc
  292. 3010 adc dx
  293. 3020 sta r
  294. 3030 bcs dr16
  295. 3040 inx
  296. 3050 sec
  297. 3060 dr16 sbc dy
  298. 3070 bcs dr17
  299. 3080 dex
  300. 3090 beq dr14
  301. 3100 dr17 sta r ;r>=dy, r=r-dy
  302. 3110 lda xi
  303. 3120 bmi dr13
  304. 3130 lsr m ;right
  305. 3140 bcc dr14
  306. 3150 ror m
  307. 3160 lda base
  308. 3170 adc #8
  309. 3180 sta base
  310. 3190 bcc dr14
  311. 3200 inc base+1
  312. 3210 bne dr14
  313. 3220 dr13 asl m ;left
  314. 3230 bcc dr14
  315. 3240 rol m
  316. 3250 lda base
  317. 3260 sbc #7
  318. 3270 sta base
  319. 3280 bcs dr14
  320. 3290 dec base+1
  321. 3300 dr14 lda (base),y
  322. 3310 ora m
  323. 3320 sta (base),y ;plot (x,y)
  324. 3330 dec c
  325. 3340 bne dr10 ;next
  326. 3350 dr15 rts
  327. 3360 ;
  328. 3370 ;fast plot
  329. 3380 iplot =*
  330. 3390 ;passed:
  331. 3400 xc =r0
  332. 3410 yc =r1
  333. 3420 ;altered:
  334. 3430 ;base =r7
  335. 3440 ptemp =r6+1
  336. 3450 lda yc
  337. 3460 and #7
  338. 3470 sta ptemp
  339. 3480 eor yc
  340. 3490 lsr
  341. 3500 lsr
  342. 3510 tax
  343. 3520 lda hitab,x
  344. 3530 adc xc+1
  345. 3540 sta base+1
  346. 3550 lda lotab,x
  347. 3560 sta base
  348. 3570 lda xc
  349. 3580 and #7
  350. 3590 tax
  351. 3600 eor xc
  352. 3610 adc ptemp
  353. 3620 tay
  354. 3630 lda (base),y
  355. 3640 ora bitab,x
  356. 3650 sta (base),y
  357. 3660 rts
  358.