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.
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.