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

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