C 64
Grafik

Grafik leicht gemacht

Mit einigen neuen Befehlen macht dieses Programm das Plotten von Funktionen zum Kinderspiel. Das mühsame Arbeiten mit den Commodore-Grafikbefehlen ist vorbei, wenn man die neuen Befehle einsetzt.

Das Programm stellt eine Basic-Erweiterung dar, die im Bereich von $0800-$4000 angesiedelt ist. Dieser Bereich enthält das Maschinenspracheprogramm sowie den Grafikbildschirm. Die neuen Befehle und ihre Bedeutung:

HIRES: Dieser Befehl schaltet die hochauflösende Grafik ein.

SCNCLR: Hiermit wird der Grafikbildschirm gelöscht.

TEXT: Um die Grafik wieder auszuschalten wird dieser Befehl benutzt. Am Programmende schaltet die hochauflösende Grafik automatisch ab.

REGION a: Die Cursor- beziehungsweise Plotfarbe wird festgelegt. Der Parameter a darf Werte von 0 bis 15 annehmen.

COLOR a,b,c: Bestimmt die Hintergrundfarbe ( a ), die Rahmenfarbe ( b ) und die Zeichenfarbe ( c ).

PLOT x,y: Dieser Befehl setzt einzelne Punkte auf dem Grafikbildschirm. Die Parameter x und y geben die Position des Punktes an. Der Ursprung des Koordinatensystems liegt in der linken oberen Bildschirmecke. X darf Werte von 0 bis 319, y Werte von 0 bis 199 annehmen. Bei Überschreiten dieser Bereiche gibt der Computer jedoch keine Fehlermeldung aus, wie es bei anderen Programmen meist der Fall ist. Für die Darstellung von Funktionen ist diese Einrichtung jedoch sehr nützlich.

UNPLOT x,y: Löscht einen gesetzten Punkt. Für die Parameter gelten die gleichen Grenzen wie beim Befehl PLOT.

AXES x,y: Zeichnet Koordinatenachsen auf den Grafikbildschirm. Die Parameter x und y bestimmen in diesem Fall den Ursprung des Koordinatensystems.

ONERROR GOTO n: Dieser Befehl fängt Definitionslücken von Funktionen ab, wenn nicht mit dem FPLOT-Befehl gearbeitet wird (siehe dort). Tritt während des Programmablaufs ein Fehler auf, der durch eine Definitionslücke verursacht wurde, wird zur Zeile n verzweigt. Dort wird das Programm ohne Unterbrechung weitergeführt. Die Fehlerausgabe wird sinnvollerweise jedoch nur bei den folgenden Fehlern unterdrückt: ILLEGAL QUANTITY, DIVISION BY ZERO, OVERFLOW Bei anderen Fehlerursachen bricht das Programm wie üblich ab.

FPLOT f(x) STEP n: Dieser Befehl stellt das Kernstück des Programms dar. Er ermöglicht das Plotten einer beliebigen Funktion mit einem Befehl. Er setzt voraus, daß das Koordinatensystem seinen Ursprung in der Mitte des Bildschirms hat. Nach STEP kann noch angegeben werden, in welchen Intervallen Punkte für die Funktionsdarstellung berechnet werden sollen. Soll die Funktion sehr genau ausfallen, muß n klein gewählt werden. Reicht eine grobe Darstellung, so wählt man den Parameter n größer. Läßt man den STEP-Befehl aus, wird n=0.03 gesetzt, was sich meist als bester Wert erweist. Die Anwendung des FPLOT-Befehls an einem Beispiel: Die Funktion f(x)=SQR(X) soll ausgegeben werden. 10 HIRES 20 SCNCLR 30 AXES160,100 40 FPLOTSQR(X) Das Programm schaltet die hochauflösende Grafik ein, löscht den Grafikbildschirm, zeichnet die Koordinatenachsen und plottet die Funktion. Alle neuen Befehle des Programms können übrigens wie die normalen Basic-Befehle über die Shift-Taste abgekürzt werden.

Zum Schluß noch ein Tip: Es gibt Funktionen, die in der Hauptsache in einem Bereich verlaufen, der nicht innerhalb der Koordinaten liegt, die für den FPLOT-Befehl vorgesehen sind. In diesem Fall wird einfach auf den PLOT-Befehl zurückgegriffen. Ein kleines Basic-Programm plottet unter Verwendung dieses Befehls auch solche Funktionen problemlos. In diesem Fall ist außerdem die Benutzung des ONERROR-Befehls sinnvoll.

Hier noch Hinweise zum Eintippen und Abspeichern beziehungsweise Laden des Programms. Vor dem Eingeben des Basic-Quellprogramms werden die folgenden Befehle eingegeben, die den Anfang des Basic-Speicherbereichs nach oben verschieben: POKE44,16:POKE4096,0:NEW Danach gibt man das Quellprogramm ein. Es enthält die DATAs für das Maschinenprogramm sowie eine Prüfsummenroutine. Nachdem das Maschinenprogramm erzeugt ist, wird es abgespeichert. In Zukunft muß nur noch das Maschinenprogramm geladen und gestartet werden.

(Uwe Seimet/rg)
10 rem **************************
20 rem *  funktionenplot vc 64  *
30 rem *    uwe seimet          *
40 rem *    waerderweg 47       *
50 rem *    4170 geldern 4      *
60 rem *    telefon: 02831/7637 *
70 rem **************************
80 rem
90 rem
100 data0,29,8,192,7,158,40,50,49,49,55,41,32,18,40,67,41,32,49,57,56,52
110 data32,66,89,32,85,83,0,0,0,7,9,131,164,87,9,10,10,84,10,141,10,70,85
120 data78,75,84,73,79,78,69,78,80,76,79,84,32,66,89,32,85,83,32,42,42,42
130 data42,32,169,55,133,1,160,0,132,251,132,253,169,160,133,252,169,224
140 data133,254,177,251,145,251,177,253,145,253,200,208,245,230,252,230,254
150 data208,239,162,26,189,42,8,157,125,228,202,208,247,142,217,236,142,218
160 data236,169,5,141,53,229,169,175,141,46,160,169,10,141,47,160,169,76
170 data141,55,169,169,126,141,56,169,169,10,141,57,169,169,224,141,94,160
180 data169,10,141,95,160,169,53,133,1,141,214,253,32,24,229,162,11,189,31
190 data8,157,0,3,202,16,247,232,160,64,24,32,3,228,76,154,227,72,73,82,69
200 data211,84,69,88,212,83,67,78,67,76,210,82,69,71,73,79,206,67,79,76,79
210 data210,80,76,79,212,85,78,80,76,79,212,70,80,76,79,212,65,88,69,211
220 data69,82,82,79,210,0,25,11,63,11,171,13,157,13,95,13,140,11,137,11,91
230 data12,250,12,9,175,138,48,58,173,62,3,208,7,173,64,3,201,88,208,46,224
240 data14,240,8,224,15,240,4,224,20,208,34,173,64,3,201,88,208,7,174,63
250 data3,154,76,217,12,173,60,3,133,20,173,61,3,133,21,32,163,168,174,63
260 data3,154,76,174,167,169,0,141,62,3,164,2,240,7,138,72,32,63,11,104,170
270 data76,139,227,166,122,160,4,132,15,189,0,2,16,7,201,255,240,62,232,208
280 data244,201,32,240,55,133,11,201,34,240,86,36,15,112,45,201,63,208,4
290 data169,153,208,37,201,48,144,4,201,60,144,29,132,113,160,0,132,11,136
300 data134,122,202,200,232,189,0,2,56,249,158,160,240,245,201,128,208,48
310 data5,11,164,113,232,200,153,251,1,185,251,1,240,89,56,233,58,240,4,201
320 data73,208,2,133,15,56,233,85,208,159,133,8,189,0,2,240,223,197,8,240
330 data219,200,153,251,1,232,208,240,166,122,230,11,200,185,157,160,16,250
340 data185,158,160,208,180,160,255,202,200,232,189,0,2,56,249,192,8,240
350 data245,201,128,208,2,240,173,166,122,230,11,200,185,191,8,16,250,185
360 data192,8,208,226,189,0,2,16,155,76,9,166,16,66,201,255,240,62,36,15
370 data48,58,170,132,73,201,204,176,10,160,160,132,35,160,158,132,34,208
380 data11,233,76,170,160,8,132,35,160,192,132,34,160,0,10,240,16,202,16
390 data12,230,34,208,2,230,35,177,34,16,246,48,241,200,177,34,48,8,32,71
400 data171,208,246,76,243,166,76,239,166,186,142,63,3,32,115,0,201,204,144
410 data25,201,213,176,21,32,105,10,76,174,167,233,203,10,168,185,244,8,72
420 data185,243,8,72,76,115,0,32,121,0,76,231,167,165,97,208,3,76,59,169
430 data32,121,0,176,209,76,160,168,169,0,133,13,32,115,0,176,3,76,243,188
440 data32,19,177,144,15,205,64,3,240,3,76,40,175,169,65,160,3,76,162,174
450 data76,154,174,201,213,240,3,76,75,169,32,166,179,32,115,0,169,137,32
460 data255,174,32,138,173,32,247,183,32,19,166,176,3,76,227,168,165,20,141
470 data60,3,165,21,141,61,3,169,137,141,62,3,96,32,43,188,240,52,16,3,76
480 data72,178,32,199,187,165,97,56,233,129,8,74,24,105,1,40,144,2,105,127
490 data133,97,169,4,133,103,32,202,187,169,92,160,0,32,15,187,169,87,160
500 data0,32,103,184,198,97,198,103,208,233,96,169,59,141,17,208,169,24,141
510 data24,208,160,0,162,4,132,253,134,254,173,33,208,41,15,145,253,200,208
520 data251,230,254,202,208,246,232,134,2,96,169,0,133,2,169,27,141,17,208
530 data169,21,141,24,208,76,68,229,0,0,64,1,128,2,192,3,0,5,64,6,128,7,192
540 data8,0,10,64,11,128,12,192,13,0,15,64,16,128,17,192,18,0,20,64,21,128
550 data22,192,23,0,25,64,26,128,27,192,28,0,30,1,2,4,8,16,32,64,128,169
560 data128,44,169,0,133,151,32,138,173,32,247,183,32,253,174,32,138,173
570 data32,155,188,165,100,208,154,166,101,224,200,176,148,165,21,201,1,144
580 data8,208,140,165,20,201,64,176,134,138,74,74,74,10,168,185,80,11,133
590 data247,185,81,11,133,248,138,41,7,24,101,247,133,247,165,20,41,248,133
600 data249,24,169,0,101,247,133,253,169,32,101,248,133,254,24,165,253,101
610 data249,133,253,165,254,101,21,133,254,56,233,32,133,252,165,253,133
620 data251,70,252,102,251,70,252,102,251,70,252,102,251,24,165,252,105,4
630 data133,252,160,0,173,134,2,10,10,10,10,133,97,177,251,41,15,5,97,145
640 data251,165,20,41,7,73,7,170,189,130,11,160,0,36,151,16,5,73,255,49,253
650 data44,17,253,145,253,96,131,160,0,0,0,131,32,0,0,0,123,117,194,143,92
660 data134,0,0,0,0,133,160,0,0,0,136,32,0,0,0,135,72,0,0,0,32,166,179,169
670 data0,133,151,169,88,141,64,3,166,122,164,123,208,1,136,202,152,72,138
680 data72,32,138,173,169,67,160,12,32,162,187,162,169,32,11,169,201,169
690 data208,9,32,251,168,32,115,0,32,138,173,162,70,160,3,32,212,187,186
700 data142,63,3,169,57,160,12,32,162,187,120,104,170,104,134,122,133,123
710 data72,138,72,162,65,160,3,32,215,187,169,72,160,12,32,40,186,169,82
720 data160,12,32,103,184,32,247,183,32,166,173,169,77,160,12,32,40,186,169
730 data87,160,12,32,103,184,32,157,11,169,65,160,3,32,162,187,169,70,160
740 data3,32,103,184,169,62,160,12,32,91,188,176,179,88,104,104,169,0,141
750 data64,3,76,248,168,32,138,173,32,247,183,32,253,174,32,138,173,32,155
760 data188,165,100,240,3,76,62,11,165,101,201,200,176,247,165,21,133,39
770 data201,1,144,8,208,237,165,20,201,64,176,231,165,20,133,38,169,63,133
780 data20,169,1,133,21,166,101,32,184,11,198,20,165,20,201,255,208,243,198
790 data21,16,239,165,38,133,20,165,39,133,21,162,199,134,101,169,0,133,100
800 data32,184,11,198,101,166,101,224,255,208,245,96,32,158,183,224,16,176
810 data66,142,33,208,32,155,183,224,16,176,56,142,32,208,32,115,0,32,158
820 data13,165,2,240,31,173,33,208,41,15,133,97,160,0,162,4,132,253,134,254
830 data177,253,41,240,5,97,145,253,200,208,245,230,254,202,208,240,96,32
840 data158,183,224,16,176,4,142,134,2,96,76,72,178,160,0,162,32,132,100
850 data134,101,152,145,100,200,208,251,230,101,202,208,246,96
900 printchr$(147)
1000 fori=0to415:readq:s1=s1+q:poke2048+i,q:next
1010 ifs1<>45402thenprint"fehler in den datas der zeilen 100-300!":end
1100 fori=416to801:readq:s2=s2+q:poke2048+i,q:next
1110 ifs2<>46267thenprint"fehler in den datas der zeilen 310-500":end
1200 fori=802to1193:readq:s3=s3+q:poke2048+i,q:next
1210 ifs3<>42667thenprint"fehler in den datas der zeilen 510-700!":end
1300 fori=1194to1471:readq:s4=s4+q:poke2048+i,q:next
1310 ifs4<>33923thenprint"fehler in den datas der zeilen 710-850!":end
1400 print"alle datas sind richtig!
1410 print:print"nun geben sie bitte die folgenden       befehle ein:
1420 print:print"poke44,8:poke46,13:poke45,192:clr
1430 print:print:print"danach koennen sie das maschinen-
1440 print"programm auf kassette oder diskette
1450 print"abspeichern und bei bedarf wie jedes
1460 print"andere programm laden und starten.
Listing »Funktionenplot«
PDF Diesen Artikel als PDF herunterladen
Mastodon Diesen Artikel auf Mastodon teilen
← Vorheriger ArtikelNächster Artikel →