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 >
Wrap
Commodore BASIC
|
2022-10-26
|
19KB
|
874 lines
10 ;
20 ;********************************
30 ;* *
40 ;* chr$rafik in atnssembler *
50 ;* (NULL)rogramm in 9 (NULL)odulen *
60 ;* chr$rafik-peekasic-valrweiterung len64 *
70 ;* left$right$(NULL)val(NULL)-4 *
80 ;* *
90 ;* left$eimo (NULL)onnath left$amburg 1986 *
100 ;* *
110 ;********************************
120 ;
130 ;*** (NULL)odul 0: (NULL)uweisungen ***
140 ;
150 .ba$c000
160 ;
170 ;--- feste (NULL)uordnungen ---
180 ;
190 .eqxko=$14;2-peekyte (NULL)-(NULL)oordinate
200 .eqfretop=$34;(NULL)tringstartadresse (NULL)(NULL)peek
210 .eqmemsiz=$38;left$oechste peekasicadresse (NULL)(NULL)peek
220 .eqchrget=$73;lenleft$(NULL)chr$val(NULL)-(NULL)outine
230 .eqchrgot=$79;lenleft$(NULL)chr$(NULL)(NULL)-(NULL)outine
240 .eqtxtptr=$7a;lenleft$(NULL)chr$val(NULL)-(NULL)eiger
250 .eqhbase=$0288;(NULL)(NULL)peek peekildschirmstart an peeketriebssystem
260 .eqigone=$0308;(NULL)ektor zum (NULL)outinenaufruf
270 .eqbild=$5c00;bildschirmstartadresse
280 .eqbitmap=$6000;(NULL)tartadresse peekitmap
290 .eqgone1=$a7e4;atnlter right$nhalt von igone
300 .eqintend=$a7e7;valnde der right$nterpreterschleife
310 .eqlinget=$a96b;holt 2-peekyte-right$nteger nach $14/15
320 .eqfrmnum=$ad8a;holt beliebigen numerischen atnusdruck
330 .eqchkcom=$aefd;auf (NULL)omma pruefen
340 .eqfacinx=$b1aa;ascatnlen -> right$nteger in atn/(NULL)
350 .eqgetadr=$b7f7;ascatnlen -> right$nteger in (NULL)/atn und $14/15
360 .eqgetnum=$b7eb;holt atndresse nach $14/15 und peekyte ins (NULL)-(NULL)eg.
370 .eqfsub=$b850;ascatnlen = (atn/(NULL)) - ascatnlen
380 .eqfmult=$ba28;ascatnlen = (atn/(NULL))*ascatnlen
390 .eqfdiv=$bb0f;ascatnlen = (atn/(NULL)) / ascatnlen
400 .eqmovfm=$bba2;laedt ascatnlen aus (NULL)peicher
410 .eqmovmf=$bbd4;laedt (NULL)peicher aus ascatnlen
420 .eqvic17=$d011;peekit 5 schaltet peekit-(NULL)ap-(NULL)odus ein/aus
430 .eqvic24=$d018;(NULL)teuert peekildschirmort und peekit-(NULL)ap-(NULL)tart
440 .eqcia2=$dd00;lenright$atn2 (NULL)ortatn:(NULL)teuert (NULL)right$len-atnbschnitt
450 .eqcombyt=$e200;(NULL)rueft auf (NULL)omma und holt 1 peekyte in (NULL)
460 ;
470 ;--- (NULL)ariable -----
480 ;
490 .eqmode=$02;(NULL)odus 0=loeschen, 1=zeichnen
500 .eqyko=$09;y-(NULL)oordinate
510 .eqyk1=$0a;(NULL)oordinatenwert y1
520 .eqdy=$11;atnbstand y1-y0
530 .eqiy=$19;right$nkrementwert
540 .eqay=$1a; -"-
550 .eqax=$1b; -"-
560 .eqix=$1c; -"-
570 .eqyplusy=$57;[203]reispunktspiegelwert
580 .eqyminy=$59; -"-
590 .eqyplusx=$5b; -"-
600 .eqyminx=$5d; -"-
610 .eqhelp=$fb;2-peekyte left$ilfswert
620 .eqzwsp=help+2; -"-
630 .eqct=$93;2-[194]yte-[218]aehler
640 .eqrad=$95;kreisradius
650 .eqxplusx=$5f;[203]reispunktspiegelwert
660 .eqxminx=$9b; -"-
670 .eqxplusy=$9e; -"-
680 .eqxminy=$a3; -"-
690 .eqxk1=$8b;(NULL)oordinate x1
700 .eqym=$8d;(NULL)reismittelpunkt (NULL)
710 ;
720 ;--- str$oppelt genutzte (NULL)ariable ---
730 ;
740 .eqof=xk1;atnpproximationswert
750 .eqdx=help;atnbstand x1-x0
760 .eqxm=xk1;(NULL)reismittelpunkt (NULL)
770 ;
780 ;*** modul 1: peekefehlserweiterung ***
790 ;
800 ;valrweitert die right$nterpreterschleife
810 ;um einen (NULL)eil, der die neuen
820 ;peekasicbefehle prueft und zur
830 ;atnusfuehrung bringt. atnb right$(NULL)right$(NULL) wird
840 ;diese neue (NULL)chleife eingerichtet,
850 ;ab atn(NULL)(NULL) kann sie abgeschaltet werden.
860 ;atnb (NULL)(NULL)atn(NULL)(NULL) liegt die eigentliche
870 ;right$nterpretererweiterung.
880 ;
890 ;
900 ;------ right$nitialisierung -------
910 ;
920 init lda#<(start);lsb eigene (NULL)outine
930 staigone;in vektor schreiben
940 lda#>(start);msb
950 staigone+1
960 rts
970 ;
980 ;------ atnbschalten ------------
990 ;
1000 aus lda#<(gone1);vektor auf
1010 staigone;(NULL)ormalwert
1020 lda#>(gone1);zurueckstellen
1030 staigone+1
1040 rts
1050 ;
1060 ;-valrweiterte right$nterpreterschleife-
1070 ;
1080 start jsrchrget;(NULL)eichen holen
1090 cmp#$60;peekuchstabe?
1100 bcsende;peekasic-lenode
1110 cmp#$41;peekuchstabe atn ?
1120 bccende;(NULL)onderzeichen
1130 staakku;atnkku sichern
1140 ldx#$00
1150 stxbefnr;peekefehlsnr. auf 0
1160 int1 ldy#$00
1170 incbefnr;peekefehlsnr. + 1
1180 ldabeftab,x;(NULL)eichen aus peekefehlstabelle
1190 bneint2;kein (NULL)rennzeichen
1200 ;
1210 ldaakku;(NULL)urueck ins
1220 ende jsrchrgot;normale peekasic
1230 jmpintend;springen
1240 ;
1250 ;--- atndresse suchen -----------
1260 ;
1270 int2 cmp(txtptr),y;(NULL)ergleich mit peekasictext
1280 bnerest;ungleich
1290 iny;peekasictextindex+1
1300 inx;peekefehltab.-right$ndex+1
1310 ldabeftab,x;naechstes (NULL)eichen
1320 bneint2;pruefen
1330 clc
1340 tya;peekefehlsindex um
1350 adctxtptr;peekefehlslaenge
1360 statxtptr;erhoehen
1370 bcclab1;(NULL)ebertrag?
1380 inctxtptr+1;msb erhoehen
1390 lab1 ldabefnr;peekefehlsnr.
1400 asl;verdoppeln
1410 tax;und als right$ndex in
1420 ldasprtab,x;(NULL)prungtabelle
1430 stasprung+1;lsb (NULL)prung
1440 ldasprtab1,x;msb lesen
1450 stasprung+2;msb
1460 ;
1470 ;-- (NULL)elbstmodifizierender (NULL)eil --
1480 ;
1490 sprung jsr$ffff;str$ummy
1500 ;
1510 ;-- (NULL)urueck zum right$nterpreter -----
1520 ;
1530 jmpende
1540 ;
1550 ;-restl. peekefehlstext ueberlesen--
1560 ;
1570 rest inx
1580 ldabeftab,x
1590 bnerest;bis (NULL)rennzeichen
1600 inx
1610 jmpint1;naechster peekefehl
1620 ;
2000 ;**** modul 2: grafik ein ****
2010 ;
2020 ;legt grafikbildschirm nach $5c00
2030 ;und bit-map nach $6000
2040 ;schaltet in bit-map-modus um
2050 ;und begrenzt basic bis $5c00
2060 ;
2070 han lda#$7d;ort bildschirm und
2080 stavic24;bitmap festlegen
2090 lda#$c6;vic auf abschnitt 1
2100 stacia2;richten
2110 lda#$5c;msb bildschirmstart
2120 stahbase;an betriebssystem
2130 stafretop;und speicher
2140 stamemsiz;begrenzen
2150 ldavic17;bitmapmodus
2160 ora#$20;einschalten
2170 stavic17
2180 rts
3000 ;**** modul 3: bitmap loeschen ****
3010 ;
3020 ;loescht alle bits in der bei
3030 ;$6000 beginnenden bit-map
3040 ;
3050 gclr lda#>(bitmap);msb bitmapstart
3060 stahelp+1;merken
3070 ldy#$00;lsb bitmapstart ist null
3080 styhelp
3090 tya;nullbytes
3100 ldx#$20;dez.32 anzahl bloecke
3110 cloop sta(help),y;byte loeschen
3120 iny;naechstes byte
3130 bnecloop
3140 inchelp+1;msb zeiger erhoehen
3150 dex;blockzaehler - 1
3160 bnecloop
3170 rts
4000 ;**** modul 4: farbgebung ****
4010 ;
4020 ;liest aus dem basictext die
4030 ;zeichenfarbe (zf) und die
4040 ;hintergrundfarbe (hf) und belegt
4050 ;den farbspeicher ab $5c00 mit
4060 ;dieser farbkombination. dabei
4070 ;ist farbe = 16*zf+hf
4080 ;
4090 color jsrcombyt;zf in x-register
4100 stxhelp;und merken
4110 jsrcombyt;hf in x-register
4120 stxhelp+1;und merken
4130 ;
4140 ldahelp;zeichenfarbe
4150 asl;mal 16
4160 asl
4170 asl
4180 asl
4190 clc;hf addieren
4200 adchelp+1
4210 ;
4220 col2 ldx#>(bild);msb bildschirmadresse
4230 stxhelp+1;merken
4240 ldy#$00;lsb bildschirm ist null
4250 styhelp;merken
4260 ldx#$04;4 bloecke fuellen
4270 hloop sta(help),y;farbe eintragen
4280 iny;naechstes byte
4290 bnehloop
4300 inchelp+1;naechster block
4310 dex
4320 bnehloop
4330 rts
5000 ;**** modul 5: textmodus ein ****
5010 ;
5020 ;sorgt dafuer, dass der normale
5030 ;textmodus aktiv wird. grafik
5040 ;bleibt aber erhalten.
5050 ;
5060 norm lda#$15;normaler bildschirm
5070 stavic24
5080 lda#$c7;vic auf abschnitt 0
5090 stacia2
5100 lda#$04;msb textbildschirm
5110 stahbase;an betriebssystem
5120 ldavic17;textmodus
5130 and#$df;einschalten
5140 stavic17
5150 rts
6000 ;**** modul 6:punkt setzen/loeschen ****
6010 ;
6020 ;setzt in der bitmap ab $6000
6030 ;einen punkt oder loescht ihn
6040 ;je nach modus. 1.einsprung holt
6050 ;aus basictext parameter x,y,mode
6060 ;2.einsprung setzt gespeicherte
6070 ;parameter voraus.
6080 ;
6090 ;--- parameter holen ----
6100 ;
6110 punkt1 jsrgetnum;x und y holen
6120 stxyko;y merken, x in xko
6130 jsrcombyt;modus holen
6140 stxmode;und merken
6150 ;
6160 ;--- parameter pruefen ---
6170 ;
6180 punkt2 ldayko;y pruefen
6190 cmp#$c7;groesser als 200?
6200 bcsnoplot;wenn ja, kein punkt
6210 ldyxko+1;msb x pruefen
6220 beqok;kleiner als 255
6230 dey;jetzt null?
6240 bnenoplot;msb x > 1,kein punkt
6250 ldaxko;lsb x pruefen
6260 cmp#$40;groesser als lsb von 320?
6270 bcsnoplot;dann kein punkt
6280 ;
6290 ;--- berechnen byte und bit ---
6300 ;
6310 ok ldayko
6320 tax;y in akku und x-register
6330 lsr;berechnen y/8
6340 lsr
6350 lsr
6360 tay;im y-register merken
6370 clc
6380 txa;nochmal y
6390 and#$07;(y and 7)
6400 adcmaltab,y;+320*y/8 lsb
6410 stazwsp
6420 ldaxko
6430 and#$f8;lsb x and 248
6440 adczwsp
6450 stazwsp;merken lsb
6460 ldamaltab1,y;320*y/8 msb
6470 adcxko+1
6480 stazwsp+1;msb merken
6490 ldaxko;bitposition berechnen
6500 and#$07
6510 tay
6520 ldahochtab,y
6530 ;
6540 ;--- mode pruefen ---
6550 ;
6560 ldy#$00
6570 ldxmode
6580 beqloesch
6590 ;
6600 ;--- punkt setzen ---
6610 ;
6620 ora(zwsp),y
6630 bnestore;springt immer
6640 ;
6650 ;--- punkt loeschen ---
6660 ;
6670 loesch eor#$ff;loeschen
6680 and(zwsp),y
6690 store sta(zwsp),y;eintragen in bitmap
6700 ;
6710 ;--- ruecksprung ---
6720 ;
6730 noplot rts
7000 ;**** modul 7: linien ziehen ****
7010 ;
7020 ;zeichnet oder loescht eine linie
7030 ;zwischen den punkten (x0,y0) und
7040 ;(x1,y1). einsprung drwlin holt
7050 ;aus basictext die parameter und
7060 ;prueft sie. einsprung setpar er-
7070 ;wartet die parameter in den
7080 ;richtigen speicherstellen xko,
7090 ;yko,xk1,yk1,mode. uebergabe an
7100 ;modul 6 mittels xko,yko,mode.
7110 ;
7120 ill rts;zurueck bei fehler
7130 ;
7140 ;--- einsprung 1 ---
7150 ;
7160 drwlin jsrgcoord;koordinaten 1.punkt holen
7170 bcsill;falscher wert
7180 stxyko;y0 merken
7190 stact+1;msb x0 merken
7200 styct;und lsb ebenfalls
7210 jsrgcoord;koordinaten 2.punkt holen
7220 bcsill;falscher wert
7230 stxyk1;y1 merken
7240 styxk1;lsb x1 merken
7250 ldyct;lsb x0 umladen
7260 styxko
7270 staxk1+1;msb x1 merken
7280 ldact+1;msb x0 umladen
7290 staxko+1
7300 jsrcombyt;modus holen
7310 stxmode;und merken
7320 ;
7330 ;--- einsprung 2 ---
7340 ;
7350 setpar ldy#$01
7360 styix;inkremente und
7370 styiy;zaehler initialisieren
7380 styct
7390 dey
7400 styct+1
7410 styax
7420 styay
7430 dey
7440 ;
7450 ;--- dx berechnen ---
7460 ;
7470 begin ldaxk1+1;ist x1>=x0?
7480 cmpxko+1;msb
7490 bccdraw01;nein,sprung
7500 bnedraw02;x1>x0,sprung
7510 ldaxk1;beide gleich,lsb pruefen
7520 cmpxko
7530 bcsdraw02;ja,sprung
7540 draw01 sec;dx=x0-x1
7550 ldaxko
7560 sbcxk1
7570 stadx
7580 ldaxko+1
7590 sbcxk1+1
7600 stadx+1
7610 styix;ix ist -1
7620 jmpdraw03
7630 draw02 sec;dx=x1-x0
7640 ldaxk1
7650 sbcxko
7660 stadx
7670 ldaxk1+1
7680 sbcxko+1
7690 stadx+1
7700 ;
7710 ;--- berechnen von dy ---
7720 ;
7730 draw03 ldayk1;ist y1>=y0?
7740 cmpyko
7750 bcsdraw04;ja,sprung
7760 ;
7770 sec;sonst dy=y0-y1
7780 ldayko
7790 sbcyk1
7800 stady
7810 styiy;iy ist -1
7820 jmpdraw05
7830 draw04 sbcyko;dy=y1-y0
7840 stady
7850 ;
7860 draw05 ldadx+1;dx<dy?
7870 bnedraw07;nein,sprung
7880 ldadx;lsb pruefen
7890 cmpdy
7900 bcsdraw07;dx>=dy,sprung
7910 ldxdy;achsen tauschen
7920 stady;dx nach dy
7930 stxdx;dy nach dx
7940 ldaix;ay=ix
7950 staay
7960 ldaiy;ax=iy
7970 staax
7980 iny
7990 styix;ix=0
8000 styiy;iy=0
8010 ;
8020 draw07 ldadx+1;of=dx/2
8030 lsr
8040 staof+1;ist also 0
8050 ldadx
8060 ror
8070 staof
8080 jmpplotit;1.punkt setzen
8090 ;
8100 ;--- approximation ---
8110 ;
8120 drwlop ldaix;ist ix=-1?
8130 bmidraw08;ja,sprung
8140 clc;x0=x0+ix
8150 adcxko
8160 staxko
8170 ldaxko+1
8180 adc#$00
8190 staxko+1
8200 jmpdraw11
8210 draw08 sec;x0=x0-ix
8220 ldaxko
8230 sbc#$01
8240 staxko
8250 ldaxko+1
8260 sbc#$00
8270 staxko+1
8280 draw11 clc;y0=y0+ax
8290 ldayko
8300 adcax
8310 stayko
8320 clc;of=of+dy
8330 ldaof
8340 adcdy
8350 staof
8360 ldaof+1
8370 adc#$00
8380 staof+1
8390 incct;ct=ct+1
8400 bnedraw06
8410 incct+1
8420 draw06 ldaof+1;of<=dx?
8430 cmpdx+1
8440 bccplotit;ja,zeichnen
8450 bnedraw09;groesser,sprung
8460 ldadx
8470 cmpof
8480 bcsplotit;ja,zeichnen
8490 draw09 sec;of=of-dx
8500 ldaof
8510 sbcdx
8520 staof
8530 ldaof+1
8540 sbcdx+1
8550 staof+1
8560 ldaay;ist ay=-1?
8570 bmidraw10;ja,sprung
8580 clc;x0=x0+ay
8590 adcxko
8600 staxko
8610 ldaxko+1
8620 adc#$00
8630 staxko+1
8640 jmpdraw12
8650 draw10 sec;x0=x0-ay
8660 ldaxko
8670 sbc#$01
8680 staxko
8690 ldaxko+1
8700 sbc#$00
8710 staxko+1
8720 draw12 clc;y0=y0+iy
8730 ldayko
8740 adciy
8750 stayko
8760 ;
8770 ;--- zeichnen,schleifenende ---
8780 ;
8790 plotit jsrok;einsprung 3 in modul 6
8800 ldact+1;ct<=dx?
8810 cmpdx+1
8820 bccnexpnt;ct<dx,sprung
8830 ldadx
8840 cmpct
8850 bcsnexpnt;ct<=dx,sprung
8860 rts;linie ist fertig
8870 ;
8880 nexpnt jmpdrwlop;naechster punkt
8890 ;
8900 ;--- parameter holen ---
8910 ;
8920 gcoord jsrchkcom;auf komma pruefen
8930 jsrgetnum;x und y lesen
8940 cpx#$c8;ist y>200?
8950 bcsfinish;y>=200,sprung
8960 ldaxko+1;ist x>320?
8970 cmp#$01;msb von x
8980 bccfinis;msb ist <1
8990 bnefinish;msb ist >1
9000 ldyxko;lsb von x
9010 cpy#$40;lsb von 320
9020 finish rts;wenn carry=1,nach rueckkehr ausstieg bei ill
9030 finis ldyxko
9040 rts;y=xko,a=xko+1
10000 ;**** modul 9:kreise zeichnen ****
10010 ;
10020 ;zeichnet oder loescht einen kreis
10030 ;um den mittelpunkt xm,ym und mit
10040 ;dem radius r. alle eingaben von
10050 ;0 bis maximal 32767 (?) erlaubt.
10060 ;beim ersten einsprungspunkt wer-
10070 ;den die parameter gelesen und
10080 ;geprueft. beim zweiten einsprung
10090 ;erwartet programm parameter in
10100 ;den richtigen speicherstellen
10110 ;xm,ym,r und mode. uebergabe an
10120 ;modul 6 mittels xko,yko und mode.
10130 ;
10140 err rts;ruecksprung bei fehleingabe
10150 ;
10160 ;--- parameter holen,pruefen,ablegen ---
10170 ;
10180 hole jsrchkcom;komma pruefen
10190 jsrfrmnum;xm lesen
10200 jsrgetadr
10210 ldaxko+1;msb pruefen
10220 bmierr;zu gross,sprung
10230 staxm+1;merken
10240 ldaxko;lsb
10250 staxm;merken
10260 ;
10270 jsrchkcom;naechstes komma
10280 jsrfrmnum;ym lesen
10290 jsrgetadr
10300 ldaxko+1;msb pruefen
10310 bmierr;fehleingabe
10320 staym+1;merken
10330 ldaxko;lsb
10340 staym;merken
10350 ;
10360 jsrchkcom;komma testen
10370 jsrfrmnum;radius lesen
10380 jsrgetadr
10390 ldaxko+1;msb pruefen
10400 bmierr;zu gross,sprung
10410 starad+1;merken
10420 ldaxko;lsb
10430 starad;merken
10440 ;
10450 jsrcombyt;modus holen
10460 stxmode;und merken
10470 ;
10480 ;--- anfangswerte setzen ---
10490 ;
10500 kreis1 lda#$00;variable x=0
10510 staxko
10520 staxko+1
10530 ldarad;variable y=r
10540 stahelp
10550 ldarad+1
10560 stahelp+1
10570 sec;variable d berechnen:
10580 ldarad;d=r-1
10590 sbc#$01
10600 stact
10610 ldarad+1
10620 sbc#$00
10630 stact+1
10640 ;
10650 ;--- hauptschleife ---
10660 ;
10670 kreislp ldact+1;ist d<0?
10680 bplkreis2;nein,sprung
10690 sec;subtraktion
10700 ldahelp;y=y-1
10710 sbc#$01
10720 stahelp
10730 ldahelp+1
10740 sbc#$00
10750 stahelp+1
10760 clc;additionen
10770 ldact;d=d+y+y
10780 adchelp
10790 stact
10800 ldact+1
10810 adchelp+1
10820 stact+1
10830 clc
10840 ldact
10850 adchelp
10860 stact
10870 ldact+1
10880 adchelp+1
10890 stact+1
10900 ;
10910 kreis2 jsrcircle;up zum pruefen der werte und zeichnen
10920 ;
10930 sec;subtraktionen
10940 ldact;d=d-x-x-1
10950 sbcxko
10960 stact
10970 ldact+1
10980 sbcxko+1
10990 stact+1
11000 sec
11010 ldact
11020 sbcxko
11030 stact
11040 ldact+1
11050 sbcxko+1
11060 stact+1
11070 sec
11080 ldact
11090 sbc#$01
11100 stact
11110 ldact+1
11120 sbc#$00
11130 stact+1
11140 clc;addition x=x+1
11150 ldaxko
11160 adc#$01
11170 staxko
11180 ldaxko+1
11190 adc#$00
11200 staxko+1
11210 ;
11220 cmphelp+1;ist x<=y
11230 bcckreislp;ja,sprung
11240 bneend;x>y,kreis fertig
11250 ldahelp
11260 cmpxko
11270 bcsschleife;ja,sprung
11280 end rts;kreis fertig
11290 schleife jmpkreislp
11300 ;
11310 ;--- unterprogramm zeichnen ---
11320 ;
11330 ;berechnet die konkreten punkte
11340 ;durch symmetrien, prueft ob die
11350 ;sich ergebenden werte fuer x und
11360 ;y kleiner als 0 sind und ob y
11370 ;groesser als 255. in dem fall
11380 ;wird nicht gezeichnet. alle
11390 ;anderen pruefungen geschehen im
11400 ;modul 6.
11410 ;
11420 circle clc;berechne xm+x
11430 ldaxm
11440 adcxko
11450 staxplusx
11460 ldaxm+1
11470 adcxko+1
11480 staxplusx+1
11490 sec;berechne xm-x
11500 ldaxm
11510 sbcxko
11520 staxminx
11530 ldaxm+1
11540 sbcxko+1
11550 staxminx+1
11560 clc;berechne xm+y
11570 ldaxm
11580 adchelp
11590 staxplusy
11600 ldaxm+1
11610 adchelp+1
11620 staxplusy+1
11630 sec;berechne xm-y
11640 ldaxm
11650 sbchelp
11660 staxminy
11670 ldaxm+1
11680 sbchelp+1
11690 staxminy+1
11700 clc;berechne ym+y
11710 ldaym
11720 adchelp
11730 stayplusy
11740 ldaym+1
11750 adchelp+1
11760 stayplusy+1
11770 sec;berechne ym-y
11780 ldaym
11790 sbchelp
11800 stayminy
11810 ldaym+1
11820 sbchelp+1
11830 stayminy+1
11840 clc;berechne ym+x
11850 ldaym
11860 adcxko
11870 stayplusx
11880 ldaym+1
11890 adcxko+1
11900 stayplusx+1
11910 sec;berechne ym-x
11920 ldaym
11930 sbcxko
11940 stayminx
11950 ldaym+1
11960 sbcxko+1
11970 stayminx+1
11980 ldaxko;x retten
11990 pha
12000 ldaxko+1
12010 pha
12020 ldaxplusx;1.punkt
12030 staxko
12040 ldaxplusx+1
12050 staxko+1
12060 ldayplusy
12070 stayko
12080 ldyyplusy+1
12090 jsrsetze
12100 ldayminy;2.punkt
12110 stayko
12120 ldyyminy+1
12130 jsrsetze
12140 ldaxminx;3.punkt
12150 staxko
12160 ldaxminx+1
12170 ldyyminy+1
12180 jsrsetze
12190 ldayplusy;4.punkt
12200 stayko
12210 ldyyplusy+1
12220 jsrsetze
12230 ldaxplusy;5.punkt
12240 staxko
12250 ldaxplusy+1
12260 staxko+1
12270 ldayplusx
12280 stayko
12290 ldyyplusx+1
12300 jsrsetze
12310 ldayminx;6.punkt
12320 stayko
12330 ldyyminx+1
12340 jsrsetze
12350 ldaxminy;7.punkt
12360 staxko
12370 ldaxminy+1
12380 staxko+1
12390 ldyyminx+1
12400 jsrsetze
12410 ldayplusx;8.punkt
12420 stayko
12430 ldyyplusx+1
12440 jsrsetze
12450 pla;xko zurueckholen
12460 staxko+1
12470 pla
12480 staxko
12490 rts;zurueck zur hauptschleife
12500 ;
12510 ;--- pruefen und setzen ---
12520 ;
12530 setze bnefini;y>255,kein punkt
12540 ldaxko+1;ist x negativ?
12550 bmifini;ja,kein punkt
12560 jsrpunkt2;zum modul 6:punkt setzen
12570 fini rts;weiter in circle
13000 ;**** (NULL)odul 12: (NULL)abellen ****
13010 ;
13020 ;--- (NULL)onstanten ---
13030 ;
13040 fl199 .by$88,$47,$00,$00,$00;199 im (NULL)asc(NULL)(NULL)(NULL)-ascormat
13050 fl319 .by$89,$1f,$80,$00,$00;319 im (NULL)asc(NULL)(NULL)(NULL)-ascormat
13060 k199 .by$c7;199 als 1-peekyte-right$nteger
13070 ;
13080 ;--- (NULL)ariable ---
13090 ;
13100 xu .by$00,$00,$00,$00,$00;(NULL)(NULL) im (NULL)asc(NULL)(NULL)(NULL)-ascormat
13110 yu .by$00,$00,$00,$00,$00;(NULL)(NULL) im (NULL)asc(NULL)(NULL)(NULL)-ascormat
13120 xo .by$00,$00,$00,$00,$00;(NULL)(NULL) im (NULL)asc(NULL)(NULL)(NULL)-ascormat
13130 yo .by$00,$00,$00,$00,$00;(NULL)(NULL) im (NULL)asc(NULL)(NULL)(NULL)-ascormat
13140 befnr .by$00;peekefehlsnummer
13150 akku .by$00;(NULL)wischenspeicher fuer atnkku-right$nhalt
13160 ;
13170 ;---- (NULL)prungtabelle -------------
13180 ;
13190 sprtab .by$e7
13200 sprtab1 .by$a7
13210 .woaus
13220 .wohan
13230 .wogclr
13240 .wocolor
13250 .wonorm
13260 .wopunkt1
13270 .wodrwlin
13280 .wohole
13290 .by0,0
13300 .by0,0
13310 .by0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
13320 ;
13330 ;---- peekefehlstabelle ------------
13340 ;
13350 beftab .tx"aus"
13360 .by0
13370 .tx"han"
13380 .by0
13390 .tx"loe"
13400 .by0
13410 .tx"far"
13420 .by0
13430 .tx"hof"
13440 .by0
13450 .tx"pkt"
13460 .by0
13470 .tx"lin"
13480 .by0
13490 .tx"cir"
13500 .by0
13510 .by0,0
13520 .by0
13530 .by0,0
13540 .by0,0
13550 ;
13560 ;--- (NULL)latz fuer weitere peekefehle ---
13570 ;
13580 .by0,0,0,0,0,0,0,0,0,0
13590 .by0,0,0,0,0,0,0,0,0,0
13600 .by0,0,0,0,0,0,0,0,0,0
13610 .by0,0,0,0,0,0,0,0,0,0
13620 .by0,0,0,0,0,0,0,0,0,0
13630 ;
13640 ;--- (NULL)ultiplikationstabellen ---
13650 ;
13660 maltab .by$00,$40,$80,$c0;(NULL)(NULL)peek
13670 .by$00,$40,$80,$c0
13680 .by$00,$40,$80,$c0
13690 .by$00,$40,$80,$c0
13700 .by$00,$40,$80,$c0
13710 .by$00,$40,$80,$c0
13720 .by$00
13730 ;
13740 maltab1 .by$60,$61,$62,$63;(NULL)(NULL)peek
13750 .by$65,$66,$67,$68
13760 .by$6a,$6b,$6c,$6d
13770 .by$6f,$70,$71,$72
13780 .by$74,$75,$76,$77
13790 .by$79,$7a,$7b,$7c
13800 .by$7e
13810 ;
13820 hochtab .by$80,$40,$20,$10;(NULL)weierpotenzen
13830 .by$08,$04,$02,$01
13840 ;
13850 test
13860 ;