home *** CD-ROM | disk | FTP | other *** search
/ 64'er Special 20 / 64er_Magazin_Sonderheft_20_19xx_Markt__Technik_de_Side_A.d64 / hires4.quell (.txt) < prev    next >
Commodore BASIC  |  2022-10-26  |  19KB  |  874 lines

  1. 10 ;
  2. 20 ;********************************
  3. 30 ;*                              *
  4. 40 ;*     chr$rafik in atnssembler      *
  5. 50 ;*   (NULL)rogramm in  9 (NULL)odulen     *
  6. 60 ;* chr$rafik-peekasic-valrweiterung len64 *
  7. 70 ;*         left$right$(NULL)val(NULL)-4              *
  8. 80 ;*                              *
  9. 90 ;*  left$eimo (NULL)onnath left$amburg 1986  *
  10. 100 ;*                              *
  11. 110 ;********************************
  12. 120 ;
  13. 130 ;*** (NULL)odul 0: (NULL)uweisungen ***
  14. 140 ;
  15. 150  .ba$c000
  16. 160 ;
  17. 170 ;--- feste (NULL)uordnungen ---
  18. 180 ;
  19. 190  .eqxko=$14;2-peekyte (NULL)-(NULL)oordinate
  20. 200  .eqfretop=$34;(NULL)tringstartadresse (NULL)(NULL)peek
  21. 210  .eqmemsiz=$38;left$oechste peekasicadresse (NULL)(NULL)peek
  22. 220  .eqchrget=$73;lenleft$(NULL)chr$val(NULL)-(NULL)outine
  23. 230  .eqchrgot=$79;lenleft$(NULL)chr$(NULL)(NULL)-(NULL)outine
  24. 240  .eqtxtptr=$7a;lenleft$(NULL)chr$val(NULL)-(NULL)eiger
  25. 250  .eqhbase=$0288;(NULL)(NULL)peek peekildschirmstart an peeketriebssystem
  26. 260  .eqigone=$0308;(NULL)ektor zum (NULL)outinenaufruf
  27. 270  .eqbild=$5c00;bildschirmstartadresse
  28. 280  .eqbitmap=$6000;(NULL)tartadresse peekitmap
  29. 290  .eqgone1=$a7e4;atnlter right$nhalt von igone
  30. 300  .eqintend=$a7e7;valnde der right$nterpreterschleife
  31. 310  .eqlinget=$a96b;holt 2-peekyte-right$nteger nach $14/15
  32. 320  .eqfrmnum=$ad8a;holt beliebigen numerischen atnusdruck
  33. 330  .eqchkcom=$aefd;auf (NULL)omma pruefen
  34. 340  .eqfacinx=$b1aa;ascatnlen -> right$nteger in atn/(NULL)
  35. 350  .eqgetadr=$b7f7;ascatnlen -> right$nteger in (NULL)/atn und $14/15
  36. 360  .eqgetnum=$b7eb;holt atndresse nach $14/15 und peekyte ins (NULL)-(NULL)eg.
  37. 370  .eqfsub=$b850;ascatnlen = (atn/(NULL)) - ascatnlen
  38. 380  .eqfmult=$ba28;ascatnlen = (atn/(NULL))*ascatnlen
  39. 390  .eqfdiv=$bb0f;ascatnlen = (atn/(NULL)) / ascatnlen
  40. 400  .eqmovfm=$bba2;laedt ascatnlen aus (NULL)peicher
  41. 410  .eqmovmf=$bbd4;laedt (NULL)peicher aus ascatnlen
  42. 420  .eqvic17=$d011;peekit 5 schaltet peekit-(NULL)ap-(NULL)odus ein/aus
  43. 430  .eqvic24=$d018;(NULL)teuert peekildschirmort und peekit-(NULL)ap-(NULL)tart
  44. 440  .eqcia2=$dd00;lenright$atn2 (NULL)ortatn:(NULL)teuert (NULL)right$len-atnbschnitt
  45. 450  .eqcombyt=$e200;(NULL)rueft auf (NULL)omma und holt 1 peekyte in (NULL)
  46. 460 ;
  47. 470 ;--- (NULL)ariable -----
  48. 480 ;
  49. 490  .eqmode=$02;(NULL)odus 0=loeschen, 1=zeichnen
  50. 500  .eqyko=$09;y-(NULL)oordinate
  51. 510  .eqyk1=$0a;(NULL)oordinatenwert y1
  52. 520  .eqdy=$11;atnbstand y1-y0
  53. 530  .eqiy=$19;right$nkrementwert
  54. 540  .eqay=$1a;   -"-
  55. 550  .eqax=$1b;   -"-
  56. 560  .eqix=$1c;   -"-
  57. 570  .eqyplusy=$57;[203]reispunktspiegelwert
  58. 580  .eqyminy=$59;   -"-
  59. 590  .eqyplusx=$5b;   -"-
  60. 600  .eqyminx=$5d;   -"-
  61. 610  .eqhelp=$fb;2-peekyte left$ilfswert
  62. 620  .eqzwsp=help+2;   -"-
  63. 630  .eqct=$93;2-[194]yte-[218]aehler
  64. 640  .eqrad=$95;kreisradius
  65. 650  .eqxplusx=$5f;[203]reispunktspiegelwert
  66. 660  .eqxminx=$9b;   -"-
  67. 670  .eqxplusy=$9e;   -"-
  68. 680  .eqxminy=$a3;   -"-
  69. 690  .eqxk1=$8b;(NULL)oordinate x1
  70. 700  .eqym=$8d;(NULL)reismittelpunkt (NULL)
  71. 710 ;
  72. 720 ;--- str$oppelt genutzte (NULL)ariable ---
  73. 730 ;
  74. 740  .eqof=xk1;atnpproximationswert
  75. 750  .eqdx=help;atnbstand x1-x0
  76. 760  .eqxm=xk1;(NULL)reismittelpunkt (NULL)
  77. 770 ;
  78. 780 ;*** modul 1: peekefehlserweiterung ***
  79. 790 ;
  80. 800 ;valrweitert die right$nterpreterschleife
  81. 810 ;um einen (NULL)eil, der die neuen
  82. 820 ;peekasicbefehle prueft und zur
  83. 830 ;atnusfuehrung bringt. atnb right$(NULL)right$(NULL) wird
  84. 840 ;diese neue (NULL)chleife eingerichtet,
  85. 850 ;ab atn(NULL)(NULL) kann sie abgeschaltet werden.
  86. 860 ;atnb (NULL)(NULL)atn(NULL)(NULL) liegt die eigentliche
  87. 870 ;right$nterpretererweiterung.
  88. 880 ;
  89. 890 ;
  90. 900 ;------ right$nitialisierung -------
  91. 910 ;
  92. 920 init lda#<(start);lsb eigene (NULL)outine
  93. 930  staigone;in vektor schreiben
  94. 940  lda#>(start);msb
  95. 950  staigone+1
  96. 960  rts
  97. 970 ;
  98. 980 ;------ atnbschalten ------------
  99. 990 ;
  100. 1000 aus lda#<(gone1);vektor auf
  101. 1010  staigone;(NULL)ormalwert
  102. 1020  lda#>(gone1);zurueckstellen
  103. 1030  staigone+1
  104. 1040  rts
  105. 1050 ;
  106. 1060 ;-valrweiterte right$nterpreterschleife-
  107. 1070 ;
  108. 1080 start jsrchrget;(NULL)eichen holen
  109. 1090  cmp#$60;peekuchstabe?
  110. 1100  bcsende;peekasic-lenode
  111. 1110  cmp#$41;peekuchstabe atn ?
  112. 1120  bccende;(NULL)onderzeichen
  113. 1130  staakku;atnkku sichern
  114. 1140  ldx#$00
  115. 1150  stxbefnr;peekefehlsnr. auf 0
  116. 1160 int1 ldy#$00
  117. 1170  incbefnr;peekefehlsnr. + 1
  118. 1180  ldabeftab,x;(NULL)eichen aus peekefehlstabelle
  119. 1190  bneint2;kein (NULL)rennzeichen
  120. 1200 ;
  121. 1210  ldaakku;(NULL)urueck ins
  122. 1220 ende jsrchrgot;normale peekasic
  123. 1230  jmpintend;springen
  124. 1240 ;
  125. 1250 ;--- atndresse suchen -----------
  126. 1260 ;
  127. 1270 int2 cmp(txtptr),y;(NULL)ergleich mit peekasictext
  128. 1280  bnerest;ungleich
  129. 1290  iny;peekasictextindex+1
  130. 1300  inx;peekefehltab.-right$ndex+1
  131. 1310  ldabeftab,x;naechstes (NULL)eichen
  132. 1320  bneint2;pruefen
  133. 1330  clc
  134. 1340  tya;peekefehlsindex um
  135. 1350  adctxtptr;peekefehlslaenge
  136. 1360  statxtptr;erhoehen
  137. 1370  bcclab1;(NULL)ebertrag?
  138. 1380  inctxtptr+1;msb erhoehen
  139. 1390 lab1 ldabefnr;peekefehlsnr.
  140. 1400  asl;verdoppeln
  141. 1410  tax;und als right$ndex in
  142. 1420  ldasprtab,x;(NULL)prungtabelle
  143. 1430  stasprung+1;lsb (NULL)prung
  144. 1440  ldasprtab1,x;msb lesen
  145. 1450  stasprung+2;msb
  146. 1460 ;
  147. 1470 ;-- (NULL)elbstmodifizierender (NULL)eil --
  148. 1480 ;
  149. 1490 sprung jsr$ffff;str$ummy
  150. 1500 ;
  151. 1510 ;-- (NULL)urueck zum right$nterpreter -----
  152. 1520 ;
  153. 1530  jmpende
  154. 1540 ;
  155. 1550 ;-restl. peekefehlstext ueberlesen--
  156. 1560 ;
  157. 1570 rest inx
  158. 1580  ldabeftab,x
  159. 1590  bnerest;bis (NULL)rennzeichen
  160. 1600  inx
  161. 1610  jmpint1;naechster peekefehl
  162. 1620 ;
  163. 2000 ;**** modul 2: grafik ein ****
  164. 2010 ;
  165. 2020 ;legt grafikbildschirm nach $5c00
  166. 2030 ;und bit-map nach $6000
  167. 2040 ;schaltet in bit-map-modus um
  168. 2050 ;und begrenzt basic bis $5c00
  169. 2060 ;
  170. 2070 han lda#$7d;ort bildschirm und
  171. 2080  stavic24;bitmap festlegen
  172. 2090  lda#$c6;vic auf abschnitt 1
  173. 2100  stacia2;richten
  174. 2110  lda#$5c;msb bildschirmstart
  175. 2120  stahbase;an betriebssystem
  176. 2130  stafretop;und speicher
  177. 2140  stamemsiz;begrenzen
  178. 2150  ldavic17;bitmapmodus
  179. 2160  ora#$20;einschalten
  180. 2170  stavic17
  181. 2180  rts
  182. 3000 ;**** modul 3: bitmap loeschen ****
  183. 3010 ;
  184. 3020 ;loescht alle bits in der bei
  185. 3030 ;$6000 beginnenden bit-map
  186. 3040 ;
  187. 3050 gclr lda#>(bitmap);msb bitmapstart
  188. 3060  stahelp+1;merken
  189. 3070  ldy#$00;lsb bitmapstart ist null
  190. 3080  styhelp
  191. 3090  tya;nullbytes
  192. 3100  ldx#$20;dez.32 anzahl bloecke
  193. 3110 cloop sta(help),y;byte loeschen
  194. 3120  iny;naechstes byte
  195. 3130  bnecloop
  196. 3140  inchelp+1;msb zeiger erhoehen
  197. 3150  dex;blockzaehler - 1
  198. 3160  bnecloop
  199. 3170  rts
  200. 4000 ;**** modul 4: farbgebung ****
  201. 4010 ;
  202. 4020 ;liest aus dem basictext die
  203. 4030 ;zeichenfarbe (zf) und die
  204. 4040 ;hintergrundfarbe (hf) und belegt
  205. 4050 ;den farbspeicher ab $5c00 mit
  206. 4060 ;dieser farbkombination. dabei
  207. 4070 ;ist farbe = 16*zf+hf
  208. 4080 ;
  209. 4090 color jsrcombyt;zf in x-register
  210. 4100  stxhelp;und merken
  211. 4110  jsrcombyt;hf in x-register
  212. 4120  stxhelp+1;und merken
  213. 4130 ;
  214. 4140  ldahelp;zeichenfarbe
  215. 4150  asl;mal 16
  216. 4160  asl
  217. 4170  asl
  218. 4180  asl
  219. 4190  clc;hf addieren
  220. 4200  adchelp+1
  221. 4210 ;
  222. 4220 col2 ldx#>(bild);msb bildschirmadresse
  223. 4230  stxhelp+1;merken
  224. 4240  ldy#$00;lsb bildschirm ist null
  225. 4250  styhelp;merken
  226. 4260  ldx#$04;4 bloecke fuellen
  227. 4270 hloop sta(help),y;farbe eintragen
  228. 4280  iny;naechstes byte
  229. 4290  bnehloop
  230. 4300  inchelp+1;naechster block
  231. 4310  dex
  232. 4320  bnehloop
  233. 4330  rts
  234. 5000 ;**** modul 5: textmodus ein ****
  235. 5010 ;
  236. 5020 ;sorgt dafuer, dass der normale
  237. 5030 ;textmodus aktiv wird. grafik
  238. 5040 ;bleibt aber erhalten.
  239. 5050 ;
  240. 5060 norm lda#$15;normaler bildschirm
  241. 5070  stavic24
  242. 5080  lda#$c7;vic auf abschnitt 0
  243. 5090  stacia2
  244. 5100  lda#$04;msb textbildschirm
  245. 5110  stahbase;an betriebssystem
  246. 5120  ldavic17;textmodus
  247. 5130  and#$df;einschalten
  248. 5140  stavic17
  249. 5150  rts
  250. 6000 ;**** modul 6:punkt setzen/loeschen ****
  251. 6010 ;
  252. 6020 ;setzt in der bitmap ab $6000
  253. 6030 ;einen punkt oder loescht ihn
  254. 6040 ;je nach modus. 1.einsprung holt
  255. 6050 ;aus basictext parameter x,y,mode
  256. 6060 ;2.einsprung setzt gespeicherte
  257. 6070 ;parameter voraus.
  258. 6080 ;
  259. 6090 ;--- parameter holen ----
  260. 6100 ;
  261. 6110 punkt1 jsrgetnum;x und y holen
  262. 6120  stxyko;y merken, x in xko
  263. 6130  jsrcombyt;modus holen
  264. 6140  stxmode;und merken
  265. 6150 ;
  266. 6160 ;--- parameter pruefen ---
  267. 6170 ;
  268. 6180 punkt2 ldayko;y pruefen
  269. 6190  cmp#$c7;groesser als 200?
  270. 6200  bcsnoplot;wenn ja, kein punkt
  271. 6210  ldyxko+1;msb x pruefen
  272. 6220  beqok;kleiner als 255
  273. 6230  dey;jetzt null?
  274. 6240  bnenoplot;msb x > 1,kein punkt
  275. 6250  ldaxko;lsb x pruefen
  276. 6260  cmp#$40;groesser als lsb von 320?
  277. 6270  bcsnoplot;dann kein punkt
  278. 6280 ;
  279. 6290 ;--- berechnen byte und bit ---
  280. 6300 ;
  281. 6310 ok ldayko
  282. 6320  tax;y in akku und x-register
  283. 6330  lsr;berechnen y/8
  284. 6340  lsr
  285. 6350  lsr
  286. 6360  tay;im y-register merken
  287. 6370  clc
  288. 6380  txa;nochmal y
  289. 6390  and#$07;(y and 7)
  290. 6400  adcmaltab,y;+320*y/8 lsb
  291. 6410  stazwsp
  292. 6420  ldaxko
  293. 6430  and#$f8;lsb x and 248
  294. 6440  adczwsp
  295. 6450  stazwsp;merken lsb
  296. 6460  ldamaltab1,y;320*y/8 msb
  297. 6470  adcxko+1
  298. 6480  stazwsp+1;msb merken
  299. 6490  ldaxko;bitposition berechnen
  300. 6500  and#$07
  301. 6510  tay
  302. 6520  ldahochtab,y
  303. 6530 ;
  304. 6540 ;--- mode pruefen ---
  305. 6550 ;
  306. 6560  ldy#$00
  307. 6570  ldxmode
  308. 6580  beqloesch
  309. 6590 ;
  310. 6600 ;--- punkt setzen ---
  311. 6610 ;
  312. 6620  ora(zwsp),y
  313. 6630  bnestore;springt immer
  314. 6640 ;
  315. 6650 ;--- punkt loeschen ---
  316. 6660 ;
  317. 6670 loesch eor#$ff;loeschen
  318. 6680  and(zwsp),y
  319. 6690 store sta(zwsp),y;eintragen in bitmap
  320. 6700 ;
  321. 6710 ;--- ruecksprung ---
  322. 6720 ;
  323. 6730 noplot rts
  324. 7000 ;**** modul 7: linien ziehen ****
  325. 7010 ;
  326. 7020 ;zeichnet oder loescht eine linie
  327. 7030 ;zwischen den punkten (x0,y0) und
  328. 7040 ;(x1,y1). einsprung drwlin holt
  329. 7050 ;aus basictext die parameter und
  330. 7060 ;prueft sie. einsprung setpar er-
  331. 7070 ;wartet die parameter in den
  332. 7080 ;richtigen speicherstellen xko,
  333. 7090 ;yko,xk1,yk1,mode. uebergabe an
  334. 7100 ;modul 6 mittels xko,yko,mode.
  335. 7110 ;
  336. 7120 ill rts;zurueck bei fehler
  337. 7130 ;
  338. 7140 ;--- einsprung 1 ---
  339. 7150 ;
  340. 7160 drwlin jsrgcoord;koordinaten 1.punkt holen
  341. 7170  bcsill;falscher wert
  342. 7180  stxyko;y0 merken
  343. 7190  stact+1;msb x0 merken
  344. 7200  styct;und lsb ebenfalls
  345. 7210  jsrgcoord;koordinaten 2.punkt holen
  346. 7220  bcsill;falscher wert
  347. 7230  stxyk1;y1 merken
  348. 7240  styxk1;lsb x1 merken
  349. 7250  ldyct;lsb x0 umladen
  350. 7260  styxko
  351. 7270  staxk1+1;msb x1 merken
  352. 7280  ldact+1;msb x0 umladen
  353. 7290  staxko+1
  354. 7300  jsrcombyt;modus holen
  355. 7310  stxmode;und merken
  356. 7320 ;
  357. 7330 ;--- einsprung 2 ---
  358. 7340 ;
  359. 7350 setpar ldy#$01
  360. 7360  styix;inkremente und
  361. 7370  styiy;zaehler initialisieren
  362. 7380  styct
  363. 7390  dey
  364. 7400  styct+1
  365. 7410  styax
  366. 7420  styay
  367. 7430  dey
  368. 7440 ;
  369. 7450 ;--- dx berechnen ---
  370. 7460 ;
  371. 7470 begin ldaxk1+1;ist x1>=x0?
  372. 7480  cmpxko+1;msb
  373. 7490  bccdraw01;nein,sprung
  374. 7500  bnedraw02;x1>x0,sprung
  375. 7510  ldaxk1;beide gleich,lsb pruefen
  376. 7520  cmpxko
  377. 7530  bcsdraw02;ja,sprung
  378. 7540 draw01 sec;dx=x0-x1
  379. 7550  ldaxko
  380. 7560  sbcxk1
  381. 7570  stadx
  382. 7580  ldaxko+1
  383. 7590  sbcxk1+1
  384. 7600  stadx+1
  385. 7610  styix;ix ist -1
  386. 7620  jmpdraw03
  387. 7630 draw02 sec;dx=x1-x0
  388. 7640  ldaxk1
  389. 7650  sbcxko
  390. 7660  stadx
  391. 7670  ldaxk1+1
  392. 7680  sbcxko+1
  393. 7690  stadx+1
  394. 7700 ;
  395. 7710 ;--- berechnen von dy ---
  396. 7720 ;
  397. 7730 draw03 ldayk1;ist y1>=y0?
  398. 7740  cmpyko
  399. 7750  bcsdraw04;ja,sprung
  400. 7760 ;
  401. 7770  sec;sonst dy=y0-y1
  402. 7780  ldayko
  403. 7790  sbcyk1
  404. 7800  stady
  405. 7810  styiy;iy ist -1
  406. 7820  jmpdraw05
  407. 7830 draw04 sbcyko;dy=y1-y0
  408. 7840  stady
  409. 7850 ;
  410. 7860 draw05 ldadx+1;dx<dy?
  411. 7870  bnedraw07;nein,sprung
  412. 7880  ldadx;lsb pruefen
  413. 7890  cmpdy
  414. 7900  bcsdraw07;dx>=dy,sprung
  415. 7910  ldxdy;achsen tauschen
  416. 7920  stady;dx nach dy
  417. 7930  stxdx;dy nach dx
  418. 7940  ldaix;ay=ix
  419. 7950  staay
  420. 7960  ldaiy;ax=iy
  421. 7970  staax
  422. 7980  iny
  423. 7990  styix;ix=0
  424. 8000  styiy;iy=0
  425. 8010 ;
  426. 8020 draw07 ldadx+1;of=dx/2
  427. 8030  lsr
  428. 8040  staof+1;ist also 0
  429. 8050  ldadx
  430. 8060  ror
  431. 8070  staof
  432. 8080  jmpplotit;1.punkt setzen
  433. 8090 ;
  434. 8100 ;--- approximation ---
  435. 8110 ;
  436. 8120 drwlop ldaix;ist ix=-1?
  437. 8130  bmidraw08;ja,sprung
  438. 8140  clc;x0=x0+ix
  439. 8150  adcxko
  440. 8160  staxko
  441. 8170  ldaxko+1
  442. 8180  adc#$00
  443. 8190  staxko+1
  444. 8200  jmpdraw11
  445. 8210 draw08 sec;x0=x0-ix
  446. 8220  ldaxko
  447. 8230  sbc#$01
  448. 8240  staxko
  449. 8250  ldaxko+1
  450. 8260  sbc#$00
  451. 8270  staxko+1
  452. 8280 draw11 clc;y0=y0+ax
  453. 8290  ldayko
  454. 8300  adcax
  455. 8310  stayko
  456. 8320  clc;of=of+dy
  457. 8330  ldaof
  458. 8340  adcdy
  459. 8350  staof
  460. 8360  ldaof+1
  461. 8370  adc#$00
  462. 8380  staof+1
  463. 8390  incct;ct=ct+1
  464. 8400  bnedraw06
  465. 8410  incct+1
  466. 8420 draw06 ldaof+1;of<=dx?
  467. 8430  cmpdx+1
  468. 8440  bccplotit;ja,zeichnen
  469. 8450  bnedraw09;groesser,sprung
  470. 8460  ldadx
  471. 8470  cmpof
  472. 8480  bcsplotit;ja,zeichnen
  473. 8490 draw09 sec;of=of-dx
  474. 8500  ldaof
  475. 8510  sbcdx
  476. 8520  staof
  477. 8530  ldaof+1
  478. 8540  sbcdx+1
  479. 8550  staof+1
  480. 8560  ldaay;ist ay=-1?
  481. 8570  bmidraw10;ja,sprung
  482. 8580  clc;x0=x0+ay
  483. 8590  adcxko
  484. 8600  staxko
  485. 8610  ldaxko+1
  486. 8620  adc#$00
  487. 8630  staxko+1
  488. 8640  jmpdraw12
  489. 8650 draw10 sec;x0=x0-ay
  490. 8660  ldaxko
  491. 8670  sbc#$01
  492. 8680  staxko
  493. 8690  ldaxko+1
  494. 8700  sbc#$00
  495. 8710  staxko+1
  496. 8720 draw12 clc;y0=y0+iy
  497. 8730  ldayko
  498. 8740  adciy
  499. 8750  stayko
  500. 8760 ;
  501. 8770 ;--- zeichnen,schleifenende ---
  502. 8780 ;
  503. 8790 plotit jsrok;einsprung 3 in modul 6
  504. 8800  ldact+1;ct<=dx?
  505. 8810  cmpdx+1
  506. 8820  bccnexpnt;ct<dx,sprung
  507. 8830  ldadx
  508. 8840  cmpct
  509. 8850  bcsnexpnt;ct<=dx,sprung
  510. 8860  rts;linie ist fertig
  511. 8870 ;
  512. 8880 nexpnt jmpdrwlop;naechster punkt
  513. 8890 ;
  514. 8900 ;--- parameter holen ---
  515. 8910 ;
  516. 8920 gcoord jsrchkcom;auf komma pruefen
  517. 8930  jsrgetnum;x und y lesen
  518. 8940  cpx#$c8;ist y>200?
  519. 8950  bcsfinish;y>=200,sprung
  520. 8960  ldaxko+1;ist x>320?
  521. 8970  cmp#$01;msb von x
  522. 8980  bccfinis;msb ist <1
  523. 8990  bnefinish;msb ist >1
  524. 9000  ldyxko;lsb von x
  525. 9010  cpy#$40;lsb von 320
  526. 9020 finish rts;wenn carry=1,nach rueckkehr ausstieg bei ill
  527. 9030 finis ldyxko
  528. 9040  rts;y=xko,a=xko+1
  529. 10000 ;**** modul 9:kreise zeichnen ****
  530. 10010 ;
  531. 10020 ;zeichnet oder loescht einen kreis
  532. 10030 ;um den mittelpunkt xm,ym und mit
  533. 10040 ;dem radius r. alle eingaben von
  534. 10050 ;0 bis maximal 32767 (?) erlaubt.
  535. 10060 ;beim ersten einsprungspunkt wer-
  536. 10070 ;den die parameter gelesen und
  537. 10080 ;geprueft. beim zweiten einsprung
  538. 10090 ;erwartet programm parameter in
  539. 10100 ;den richtigen speicherstellen
  540. 10110 ;xm,ym,r und mode. uebergabe an
  541. 10120 ;modul 6 mittels xko,yko und mode.
  542. 10130 ;
  543. 10140 err rts;ruecksprung bei fehleingabe
  544. 10150 ;
  545. 10160 ;--- parameter holen,pruefen,ablegen ---
  546. 10170 ;
  547. 10180 hole jsrchkcom;komma pruefen
  548. 10190  jsrfrmnum;xm lesen
  549. 10200  jsrgetadr
  550. 10210  ldaxko+1;msb pruefen
  551. 10220  bmierr;zu gross,sprung
  552. 10230  staxm+1;merken
  553. 10240  ldaxko;lsb
  554. 10250  staxm;merken
  555. 10260 ;
  556. 10270  jsrchkcom;naechstes komma
  557. 10280  jsrfrmnum;ym lesen
  558. 10290  jsrgetadr
  559. 10300  ldaxko+1;msb pruefen
  560. 10310  bmierr;fehleingabe
  561. 10320  staym+1;merken
  562. 10330  ldaxko;lsb
  563. 10340  staym;merken
  564. 10350 ;
  565. 10360  jsrchkcom;komma testen
  566. 10370  jsrfrmnum;radius lesen
  567. 10380  jsrgetadr
  568. 10390  ldaxko+1;msb pruefen
  569. 10400  bmierr;zu gross,sprung
  570. 10410  starad+1;merken
  571. 10420  ldaxko;lsb
  572. 10430  starad;merken
  573. 10440 ;
  574. 10450  jsrcombyt;modus holen
  575. 10460  stxmode;und merken
  576. 10470 ;
  577. 10480 ;--- anfangswerte setzen ---
  578. 10490 ;
  579. 10500 kreis1 lda#$00;variable x=0
  580. 10510  staxko
  581. 10520  staxko+1
  582. 10530  ldarad;variable y=r
  583. 10540  stahelp
  584. 10550  ldarad+1
  585. 10560  stahelp+1
  586. 10570  sec;variable d berechnen:
  587. 10580  ldarad;d=r-1
  588. 10590  sbc#$01
  589. 10600  stact
  590. 10610  ldarad+1
  591. 10620  sbc#$00
  592. 10630  stact+1
  593. 10640 ;
  594. 10650 ;--- hauptschleife ---
  595. 10660 ;
  596. 10670 kreislp ldact+1;ist d<0?
  597. 10680  bplkreis2;nein,sprung
  598. 10690  sec;subtraktion
  599. 10700  ldahelp;y=y-1
  600. 10710  sbc#$01
  601. 10720  stahelp
  602. 10730  ldahelp+1
  603. 10740  sbc#$00
  604. 10750  stahelp+1
  605. 10760  clc;additionen
  606. 10770  ldact;d=d+y+y
  607. 10780  adchelp
  608. 10790  stact
  609. 10800  ldact+1
  610. 10810  adchelp+1
  611. 10820  stact+1
  612. 10830  clc
  613. 10840  ldact
  614. 10850  adchelp
  615. 10860  stact
  616. 10870  ldact+1
  617. 10880  adchelp+1
  618. 10890  stact+1
  619. 10900 ;
  620. 10910 kreis2 jsrcircle;up zum pruefen der werte und zeichnen
  621. 10920 ;
  622. 10930  sec;subtraktionen
  623. 10940  ldact;d=d-x-x-1
  624. 10950  sbcxko
  625. 10960  stact
  626. 10970  ldact+1
  627. 10980  sbcxko+1
  628. 10990  stact+1
  629. 11000  sec
  630. 11010  ldact
  631. 11020  sbcxko
  632. 11030  stact
  633. 11040  ldact+1
  634. 11050  sbcxko+1
  635. 11060  stact+1
  636. 11070  sec
  637. 11080  ldact
  638. 11090  sbc#$01
  639. 11100  stact
  640. 11110  ldact+1
  641. 11120  sbc#$00
  642. 11130  stact+1
  643. 11140  clc;addition x=x+1
  644. 11150  ldaxko
  645. 11160  adc#$01
  646. 11170  staxko
  647. 11180  ldaxko+1
  648. 11190  adc#$00
  649. 11200  staxko+1
  650. 11210 ;
  651. 11220  cmphelp+1;ist x<=y
  652. 11230  bcckreislp;ja,sprung
  653. 11240  bneend;x>y,kreis fertig
  654. 11250  ldahelp
  655. 11260  cmpxko
  656. 11270  bcsschleife;ja,sprung
  657. 11280 end rts;kreis fertig
  658. 11290 schleife jmpkreislp
  659. 11300 ;
  660. 11310 ;--- unterprogramm zeichnen ---
  661. 11320 ;
  662. 11330 ;berechnet die konkreten punkte
  663. 11340 ;durch symmetrien, prueft ob die
  664. 11350 ;sich ergebenden werte fuer x und
  665. 11360 ;y kleiner als 0 sind und ob y
  666. 11370 ;groesser als 255. in dem fall
  667. 11380 ;wird nicht gezeichnet. alle
  668. 11390 ;anderen pruefungen geschehen im
  669. 11400 ;modul 6.
  670. 11410 ;
  671. 11420 circle clc;berechne xm+x
  672. 11430  ldaxm
  673. 11440  adcxko
  674. 11450  staxplusx
  675. 11460  ldaxm+1
  676. 11470  adcxko+1
  677. 11480  staxplusx+1
  678. 11490  sec;berechne xm-x
  679. 11500  ldaxm
  680. 11510  sbcxko
  681. 11520  staxminx
  682. 11530  ldaxm+1
  683. 11540  sbcxko+1
  684. 11550  staxminx+1
  685. 11560  clc;berechne xm+y
  686. 11570  ldaxm
  687. 11580  adchelp
  688. 11590  staxplusy
  689. 11600  ldaxm+1
  690. 11610  adchelp+1
  691. 11620  staxplusy+1
  692. 11630  sec;berechne xm-y
  693. 11640  ldaxm
  694. 11650  sbchelp
  695. 11660  staxminy
  696. 11670  ldaxm+1
  697. 11680  sbchelp+1
  698. 11690  staxminy+1
  699. 11700  clc;berechne ym+y
  700. 11710  ldaym
  701. 11720  adchelp
  702. 11730  stayplusy
  703. 11740  ldaym+1
  704. 11750  adchelp+1
  705. 11760  stayplusy+1
  706. 11770  sec;berechne ym-y
  707. 11780  ldaym
  708. 11790  sbchelp
  709. 11800  stayminy
  710. 11810  ldaym+1
  711. 11820  sbchelp+1
  712. 11830  stayminy+1
  713. 11840  clc;berechne ym+x
  714. 11850  ldaym
  715. 11860  adcxko
  716. 11870  stayplusx
  717. 11880  ldaym+1
  718. 11890  adcxko+1
  719. 11900  stayplusx+1
  720. 11910  sec;berechne ym-x
  721. 11920  ldaym
  722. 11930  sbcxko
  723. 11940  stayminx
  724. 11950  ldaym+1
  725. 11960  sbcxko+1
  726. 11970  stayminx+1
  727. 11980  ldaxko;x retten
  728. 11990  pha
  729. 12000  ldaxko+1
  730. 12010  pha
  731. 12020  ldaxplusx;1.punkt
  732. 12030  staxko
  733. 12040  ldaxplusx+1
  734. 12050  staxko+1
  735. 12060  ldayplusy
  736. 12070  stayko
  737. 12080  ldyyplusy+1
  738. 12090  jsrsetze
  739. 12100  ldayminy;2.punkt
  740. 12110  stayko
  741. 12120  ldyyminy+1
  742. 12130  jsrsetze
  743. 12140  ldaxminx;3.punkt
  744. 12150  staxko
  745. 12160  ldaxminx+1
  746. 12170  ldyyminy+1
  747. 12180  jsrsetze
  748. 12190  ldayplusy;4.punkt
  749. 12200  stayko
  750. 12210  ldyyplusy+1
  751. 12220  jsrsetze
  752. 12230  ldaxplusy;5.punkt
  753. 12240  staxko
  754. 12250  ldaxplusy+1
  755. 12260  staxko+1
  756. 12270  ldayplusx
  757. 12280  stayko
  758. 12290  ldyyplusx+1
  759. 12300  jsrsetze
  760. 12310  ldayminx;6.punkt
  761. 12320  stayko
  762. 12330  ldyyminx+1
  763. 12340  jsrsetze
  764. 12350  ldaxminy;7.punkt
  765. 12360  staxko
  766. 12370  ldaxminy+1
  767. 12380  staxko+1
  768. 12390  ldyyminx+1
  769. 12400  jsrsetze
  770. 12410  ldayplusx;8.punkt
  771. 12420  stayko
  772. 12430  ldyyplusx+1
  773. 12440  jsrsetze
  774. 12450  pla;xko zurueckholen
  775. 12460  staxko+1
  776. 12470  pla
  777. 12480  staxko
  778. 12490  rts;zurueck zur hauptschleife
  779. 12500 ;
  780. 12510 ;--- pruefen und setzen ---
  781. 12520 ;
  782. 12530 setze bnefini;y>255,kein punkt
  783. 12540  ldaxko+1;ist x negativ?
  784. 12550  bmifini;ja,kein punkt
  785. 12560  jsrpunkt2;zum modul 6:punkt setzen
  786. 12570 fini rts;weiter in circle
  787. 13000 ;**** (NULL)odul 12: (NULL)abellen ****
  788. 13010 ;
  789. 13020 ;--- (NULL)onstanten ---
  790. 13030 ;
  791. 13040 fl199 .by$88,$47,$00,$00,$00;199 im (NULL)asc(NULL)(NULL)(NULL)-ascormat
  792. 13050 fl319 .by$89,$1f,$80,$00,$00;319 im (NULL)asc(NULL)(NULL)(NULL)-ascormat
  793. 13060 k199 .by$c7;199 als 1-peekyte-right$nteger
  794. 13070 ;
  795. 13080 ;--- (NULL)ariable ---
  796. 13090 ;
  797. 13100 xu .by$00,$00,$00,$00,$00;(NULL)(NULL) im (NULL)asc(NULL)(NULL)(NULL)-ascormat
  798. 13110 yu .by$00,$00,$00,$00,$00;(NULL)(NULL) im (NULL)asc(NULL)(NULL)(NULL)-ascormat
  799. 13120 xo .by$00,$00,$00,$00,$00;(NULL)(NULL) im (NULL)asc(NULL)(NULL)(NULL)-ascormat
  800. 13130 yo .by$00,$00,$00,$00,$00;(NULL)(NULL) im (NULL)asc(NULL)(NULL)(NULL)-ascormat
  801. 13140 befnr .by$00;peekefehlsnummer
  802. 13150 akku .by$00;(NULL)wischenspeicher fuer atnkku-right$nhalt
  803. 13160 ;
  804. 13170 ;---- (NULL)prungtabelle -------------
  805. 13180 ;
  806. 13190 sprtab .by$e7
  807. 13200 sprtab1 .by$a7
  808. 13210  .woaus
  809. 13220  .wohan
  810. 13230  .wogclr
  811. 13240  .wocolor
  812. 13250  .wonorm
  813. 13260  .wopunkt1
  814. 13270  .wodrwlin
  815. 13280  .wohole
  816. 13290  .by0,0
  817. 13300  .by0,0
  818. 13310  .by0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
  819. 13320 ;
  820. 13330 ;---- peekefehlstabelle ------------
  821. 13340 ;
  822. 13350 beftab .tx"aus"
  823. 13360  .by0
  824. 13370  .tx"han"
  825. 13380  .by0
  826. 13390  .tx"loe"
  827. 13400  .by0
  828. 13410  .tx"far"
  829. 13420  .by0
  830. 13430  .tx"hof"
  831. 13440  .by0
  832. 13450  .tx"pkt"
  833. 13460  .by0
  834. 13470  .tx"lin"
  835. 13480  .by0
  836. 13490  .tx"cir"
  837. 13500  .by0
  838. 13510  .by0,0
  839. 13520  .by0
  840. 13530  .by0,0
  841. 13540  .by0,0
  842. 13550 ;
  843. 13560 ;--- (NULL)latz fuer weitere peekefehle ---
  844. 13570 ;
  845. 13580  .by0,0,0,0,0,0,0,0,0,0
  846. 13590  .by0,0,0,0,0,0,0,0,0,0
  847. 13600  .by0,0,0,0,0,0,0,0,0,0
  848. 13610  .by0,0,0,0,0,0,0,0,0,0
  849. 13620  .by0,0,0,0,0,0,0,0,0,0
  850. 13630 ;
  851. 13640 ;--- (NULL)ultiplikationstabellen ---
  852. 13650 ;
  853. 13660 maltab .by$00,$40,$80,$c0;(NULL)(NULL)peek
  854. 13670  .by$00,$40,$80,$c0
  855. 13680  .by$00,$40,$80,$c0
  856. 13690  .by$00,$40,$80,$c0
  857. 13700  .by$00,$40,$80,$c0
  858. 13710  .by$00,$40,$80,$c0
  859. 13720  .by$00
  860. 13730 ;
  861. 13740 maltab1 .by$60,$61,$62,$63;(NULL)(NULL)peek
  862. 13750  .by$65,$66,$67,$68
  863. 13760  .by$6a,$6b,$6c,$6d
  864. 13770  .by$6f,$70,$71,$72
  865. 13780  .by$74,$75,$76,$77
  866. 13790  .by$79,$7a,$7b,$7c
  867. 13800  .by$7e
  868. 13810 ;
  869. 13820 hochtab .by$80,$40,$20,$10;(NULL)weierpotenzen
  870. 13830  .by$08,$04,$02,$01
  871. 13840 ;
  872. 13850 test
  873. 13860 ;
  874.