home *** CD-ROM | disk | FTP | other *** search
/ 64'er 1993 July / 64er_Magazin_93-07_1993_Markt__Technik_de_Side_A.d64 / vektorgrafik_src (.txt) < prev   
Encoding:
Commodore BASIC  |  1993-01-01  |  7.1 KB  |  360 lines

  1. 100 (NULL):opt oo:*= $c000
  2. 110 ;
  3. 120 ;
  4. 130 ;  3d-(NULL)-routine
  5. 140 ;
  6. 150 ;
  7. 160 vektram    = $a4   ;6 bytes
  8. 170 freezero   = $fb   ;4 bytes
  9. 180 farbram    = $8c00
  10. 190 picture    = $a000
  11. 200 ;
  12. 210 ;
  13. 220 ;  sprungtabelle
  14. 230 ;
  15. 240 jmp graphicson
  16. 250 jmp graphics(NULL)
  17. 260 jmp (NULL)
  18. 270 ;
  19. 280 nop:nop:nop
  20. 290 nop:nop:nop
  21. 300 nop:nop:nop
  22. 310 nop:nop:nop
  23. 320 ;
  24. 330 ;
  25. 340 ;  subroutinen
  26. 350 ;
  27. 360 rom(NULL) sei
  28. 370 lda #$36
  29. 380 sta $01
  30. 390 rts
  31. 400 ;
  32. 410 romon lda #$37
  33. 420 sta $01
  34. 430 cli
  35. 440 rts
  36. 450 ;
  37. 460 (NULL)mem ldy #0
  38. 470 l000 sta (freezero+0),y
  39. 480 iny
  40. 490 bne l000
  41. 500 inc freezero+1
  42. 510 dex
  43. 520 bne l000
  44. 530 rts
  45. 540 ;
  46. 550 ;
  47. 560 ;  mainroutinen
  48. 570 ;
  49. 580 graphicson jsr $e200
  50. 590 txa                 ;hintergrfarbe
  51. 600 and #%00001111
  52. 610 sta freezero+0
  53. 620 jsr $e200
  54. 630 txa                 ;zeichenfarbe
  55. 640 asl:asl
  56. 650 asl:asl
  57. 660 eor freezero+0
  58. 670 ldx #<farbram
  59. 680 ldy #>farbram
  60. 690 stx freezero+0
  61. 700 sty freezero+1
  62. 710 ldx #4              ;farbram
  63. 720 jsr (NULL)mem         ;initialisieren
  64. 730 ldx #<picture
  65. 740 ldy #>picture
  66. 750 stx freezero+0
  67. 760 sty freezero+1
  68. 770 ldx #32
  69. 780 lda #0              ;(NULL)(NULL)
  70. 790 jsr (NULL)mem         ;initialisieren
  71. 800 ;
  72. 810 lda 56576           ;grafik
  73. 820 and #252            ;einschalten
  74. 830 ora #1
  75. 840 sta 56576
  76. 850 lda 53272
  77. 860 and #15
  78. 870 ora #(16*3+8)
  79. 880 sta 53272
  80. 890 lda 53265
  81. 900 ora #32
  82. 910 sta 53265
  83. 920 rts
  84. 930 ;
  85. 940 graphics(NULL) lda 53265
  86. 950 and #223
  87. 960 sta 53265
  88. 970 lda #23
  89. 980 sta 53272
  90. 990 lda #151
  91. 1000 sta 56576
  92. 1010 rts
  93. 1020 ;
  94. 1030 ;
  95. 1040 ;  3d-(NULL)-routine
  96. 1050 ;
  97. 1060 ;   $a4-$a9 -> 2 3d-vektoren
  98. 1070 ;   $aa-$b5 -> versch. genutzt
  99. 1080 ;     u.a. bresenham-al(NULL)rithmus
  100. 1090 ;   $aa-$ab -> vektor in picture
  101. 1100 ;       $ac -> bit d. punktes
  102. 1110 ;   $ad-$b0 -> punktrichtungen
  103. 1120 ;       $b1 -> vergleichszahl
  104. 1130 ;       $b2 -> summand
  105. 1140 ;       $b3 -> laufende summe
  106. 1150 ;       $b4 -> abwaertszaehler
  107. 1160 ;       $b5 -> zweite richtung
  108. 1170 ;
  109. 1180 error jmp $b248
  110. 1190 ;
  111. 1200 (NULL) jsr $e200
  112. 1210 cpx #2
  113. 1220 bcs error
  114. 1230 txa
  115. 1240 lsr
  116. 1250 php            ;zeichnen/loeschen
  117. 1260 l001 sta $aa   ;schleife zum
  118. 1270 jsr $aefd      ;einlesen der
  119. 1280 jsr $ad8a      ;6 koeffizienten
  120. 1290 jsr $b849
  121. 1300 jsr $b1aa
  122. 1310 ldx $aa
  123. 1320 sty vektram,x
  124. 1330 tax
  125. 1340 tya
  126. 1350 cpx #0
  127. 1360 beq l002
  128. 1370 inx
  129. 1380 bne error
  130. 1390 sbc #1
  131. 1400 eor #$ff
  132. 1410 l002 cmp #61
  133. 1420 bcs error
  134. 1430 lda $aa
  135. 1440 adc #1
  136. 1450 cmp #6
  137. 1460 bcc l001
  138. 1470 lda #>picture
  139. 1480 plp
  140. 1490 ;
  141. 1500 (NULL)2 php         ;einsprung fuer
  142. 1510 pha               ;3d-(NULL), wenn
  143. 1520 jsr rom(NULL)        ;koeffizienten
  144. 1530 ldx #0            ;schon in zero-
  145. 1540 l003 lda vektram,x;(NULL) stehen
  146. 1550 cmp #$80
  147. 1560 ror
  148. 1570 bpl l004          ;3d -> 2d
  149. 1580 adc #0            ;berechne dx und
  150. 1590 l004 tay          ;dy fuer anfangs
  151. 1600 eor #$ff          ;und endpunkt
  152. 1610 clc               ;aus den vor-
  153. 1620 adc #161          ;handenen 6 vor-
  154. 1630 clc               ;zeichenbehaf-
  155. 1640 adc vektram+1,x   ;teten koeffi-
  156. 1650 sta $aa,x         ;zienten der
  157. 1660 tya               ;beiden vektoren
  158. 1670 clc
  159. 1680 adc #100          ;ergebnis nach
  160. 1690 sec               ;$aa/$ab und
  161. 1700 sbc vektram+2,x   ;$ad/$ae
  162. 1710 sta $ab,x
  163. 1720 inx:inx
  164. 1730 inx
  165. 1740 cpx #6
  166. 1750 bcc l003
  167. 1760 ;
  168. 1770 ldx #1            ;berechne dx, dy
  169. 1780 l005 sec          ;und deren vor-
  170. 1790 lda $ad,x         ;zeichen
  171. 1800 sbc $aa,x         ;zwischen an-
  172. 1810 tay               ;fangs- und end-
  173. 1820 txa               ;punkt der linie
  174. 1830 ror
  175. 1840 eor #$81          ;abs(dx),abs(dy)
  176. 1850 sta $b3,x         ;-> $b1/$b2
  177. 1860 asl               ;vor(dx),vor(dy)
  178. 1870 tya               ;-> $b3/$b4
  179. 1880 bcc l006
  180. 1890 eor #$ff
  181. 1900 adc #0
  182. 1910 l006 sta $b1,x
  183. 1920 dex
  184. 1930 bpl l005
  185. 1940 ;
  186. 1950 lda $aa           ;berechne bit-
  187. 1960 and #%00000111    ;maske fuer 1.
  188. 1970 tax               ;zu setzenden/
  189. 1980 lda bits,x        ;zu loeschenden
  190. 1990 sta $ac           ;grafikpunkt
  191. 2000 ;
  192. 2010 lda $ab           ;berechne zeiger
  193. 2020 and #%11111000    ;auf byte der
  194. 2030 lsr               ;(NULL)(NULL), in
  195. 2040 lsr               ;dem der erste
  196. 2050 tax               ;zu setzende/
  197. 2060 lda $aa           ;zu loeschende
  198. 2070 and #%11111000    ;grafikpunkt
  199. 2080 sta $aa           ;steht
  200. 2090 lda $ab
  201. 2100 and #%00000111    ;zeiger in
  202. 2110 ora $aa           ;$aa/$ab
  203. 2120 adc multab+0,x
  204. 2130 sta $aa
  205. 2140 pla               ;hi-b graf.(NULL)
  206. 2150 adc multab+1,x
  207. 2160 sta $ab
  208. 2170 ;
  209. 2180 ldx #0            ;hole die ver-
  210. 2190 ldy #0            ;gleichszahl,
  211. 2200 lda $b1           ;den abwaerts-
  212. 2210 cmp $b2           ;zaehler, den
  213. 2220 bcc l007          ;summanden und
  214. 2230 pha               ;das vorzeichen
  215. 2240 lda $b2           ;fuer die zweite
  216. 2250 pha               ;richtung in ab-
  217. 2260 lda $b4           ;haengigkeit von
  218. 2270 ldx $b3           ;max(dx,dy) fuer
  219. 2280 ;                 ;bresh.-al(NULL)rit.
  220. 2290 ;
  221. 2300 bcs l008          ;unbedingt
  222. 2310 l007 lda $b2
  223. 2320 pha
  224. 2330 lda $b1
  225. 2340 pha
  226. 2350 lda $b3
  227. 2360 ldy $b4
  228. 2370 ;
  229. 2380 l008 stx $ad      ;setze d. konst.
  230. 2390 sty $ae           ;1. richtung,
  231. 2400 sta $b5           ;vorz. 2.richt.,
  232. 2410 pla
  233. 2420 sta $b2           ;den summanden,
  234. 2430 inc $b2
  235. 2440 pla
  236. 2450 sta $b1           ;die vergl.zahl,
  237. 2460 inc $b1
  238. 2470 sta $b4           ;den abw.zaehl.,
  239. 2480 lda #0
  240. 2490 sta $b3           ;die lauf. summe
  241. 2500 sta $af           ;und die variab.
  242. 2510 sta $b0           ;2. richtung
  243. 2520 jmp l020
  244. 2530 ;
  245. 2540 l009 lda #0       ;bresenham-al-
  246. 2550 sta $af           ;(NULL)rithmus
  247. 2560 sta $b0
  248. 2570 clc
  249. 2580 lda $b3
  250. 2590 adc $b2
  251. 2600 bcs l010
  252. 2610 sta $b3
  253. 2620 cmp $b1
  254. 2630 bcc l012
  255. 2640 l010 sbc $b1
  256. 2650 sta $b3
  257. 2660 lda $b5
  258. 2670 ldx $ad
  259. 2680 bne l011
  260. 2690 sta $af
  261. 2700 beq l012          ;unbedingt
  262. 2710 l011 sta $b0
  263. 2720 ;
  264. 2730 l012 ldx #2
  265. 2740 l013 lda $ad,x
  266. 2750 beq l015
  267. 2760 bmi l014
  268. 2770 lsr $ac           ;veraendere
  269. 2780 bcc l015          ;zeiger und bit-
  270. 2790 ror $ac           ;maske fuer
  271. 2800 lda $aa           ;x=x+1
  272. 2810 adc #8
  273. 2820 sta $aa
  274. 2830 bcc l015
  275. 2840 inc $ab
  276. 2850 bcs l015          ;unbedingt
  277. 2860 ;
  278. 2870 l014 asl $ac      ;veraendere
  279. 2880 bcc l015          ;zeiger und bit-
  280. 2890 rol $ac           ;maske fuer
  281. 2900 sec               ;x=x-1
  282. 2910 lda $aa
  283. 2920 sbc #8
  284. 2930 sta $aa
  285. 2940 bcs l015
  286. 2950 dec $ab
  287. 2960 ;
  288. 2970 l015 lda $ae,x
  289. 2980 beq l019
  290. 2990 bmi l017
  291. 3000 inc $aa           ;veraendere
  292. 3010 bne l016          ;zeiger und bit-
  293. 3020 inc $ab           ;maske fuer
  294. 3030 l016 lda $aa      ;y=y+1
  295. 3040 and #%00000111
  296. 3050 bne l019
  297. 3060 clc
  298. 3070 lda $aa
  299. 3080 adc #<312
  300. 3090 sta $aa
  301. 3100 lda $ab
  302. 3110 adc #>312
  303. 3120 sta $ab
  304. 3130 bcc l019          ;unbedingt
  305. 3140 ;
  306. 3150 l017 lda $aa      ;veraendere
  307. 3160 bne l018          ;zeiger und bit-
  308. 3170 dec $ab           ;maske fuer
  309. 3180 l018 dec $aa      ;y=y-1
  310. 3190 lda $aa
  311. 3200 and #%00000111
  312. 3210 eor #%00000111
  313. 3220 bne l019
  314. 3230 sec
  315. 3240 lda $aa
  316. 3250 sbc #<312
  317. 3260 sta $aa
  318. 3270 lda $ab
  319. 3280 sbc #>312
  320. 3290 sta $ab
  321. 3300 ;
  322. 3310 l019 dex          ;2 mal schleife
  323. 3320 dex               ;durchlaufen
  324. 3330 bpl l013          ;fuer x und y
  325. 3340 ;
  326. 3350 l020 plp
  327. 3360 lda $ac
  328. 3370 ldy #0
  329. 3380 bcs l021
  330. 3390 eor #$ff
  331. 3400 and ($aa),y       ;punkt loeschen
  332. 3410 byt $2c           ;oder
  333. 3420 l021 ora ($aa),y  ;setzen
  334. 3430 sta ($aa),y
  335. 3440 lda $b4
  336. 3450 beq l022
  337. 3460 dec $b4
  338. 3470 php
  339. 3480 jmp l009
  340. 3490 ;
  341. 3500 l022 jmp romon
  342. 3510 ;
  343. 3520 bits byt $80,$40,$20,$10
  344. 3530 byt $08,$04,$02,$01
  345. 3540 ;
  346. 3550 multab byt 0,0,<320,>320
  347. 3560 byt <0640,>0640,<0960,>0960
  348. 3570 byt <1280,>1280,<1600,>1600
  349. 3580 byt <1920,>1920,<2240,>2240
  350. 3590 byt <2560,>2560,<2880,>2880
  351. 3600 byt <3200,>3200,<3520,>3520
  352. 3610 byt <3840,>3840,<4160,>4160
  353. 3620 byt <4480,>4480,<4800,>4800
  354. 3630 byt <5120,>5120,<5440,>5440
  355. 3640 byt <5760,>5760,<6080,>6080
  356. 3650 byt <6400,>6400,<6720,>6720
  357. 3660 byt <7040,>7040,<7360,>7360
  358. 3670 byt <7680,>7680
  359. 3680 ;
  360.