Mini-Grafik VC 20
Diese kleine Grafik-Hilfe läuft auf der Grundversion des VC 20.

Wie der Name schon sagt, handelt es sich um eine Grafik-Erweiterung im kleinen Stil. Damit wird Grafik-Programmierung auch ohne große Speichererweiterung oder (teures) Grafik-Modul möglich. Da in Maschinensprache geschrieben, ist diese Basic-Erweiterung überdies sehr schnell. Minutenlange Wartezeiten auf die Fertigstellung einer Bildschirmgrafik entfallen damit.
Zur Anwendung der Grafikhilfe: Man nehme das Programm-Listing, tippe es in den VC 20 und erfreue sich folgender Befehle und Funktionen:
@ON | schaltet den Bildschirm auf Grafikdarstellung um, wobei die momentane Zeichenfarbe zur Plotfarbe wird |
@CLR | löscht den Grafik-Speicher |
@f,x,y | setzt (f≠0) oder löscht (f=0) einen Punkt mit der Koordinate (x,y). Für f gilt: 0 < = f < 256, für x wie für y gilt: 0 < = x < 128. f, x und y können beliebige Variable oder Formeln sein |
@(x,y) | ist eine Funktion, welche testet, ob der Punkt mit der Koordinate (x,y) gesetzt (Ergebnis = —1) oder nicht gesetzt(Ergebnis = 0) ist. Beispiel: »PRINT @ (5,7)« |
@RETURN | schaltet den Bildschirm schließlich wieder auf normalen Print-Modus |
Das Programm implementiert sich nach dem Start des einzugebenden Basic-Laders (Listing 1) von selbst und ist absolut absturzsicher. Es hat, man lese und staune, eine Länge von nur 256 Byte. Für eine Auflösungvon 128 mal 128 Punkten sind 2 KByte RAM unerläßlich. Somit verbleiben in der Grundversion 1279 Byte und mit 3 KByte Erweiterung sage und schreibe 4351 Byte Basic-RAM. Zugegeben, das ist nicht die Welt, aber für den Anfang durchaus ausreichend, und dafür wurde die Routine schließlich konzipiert. Überdies wird der Kassetten-Puffer nicht benutzt, und man kann von einem Programm aus mit »LOAD« ein weiteres nachladen. Listing 2 ist ein kleines Demo-Programm, um die Fähigkeiten der »Mini-Grafik« einmal vorzuführen (siehe Bild).
(Wolfgang Wirth/ev)100 rem mg10 by w.wirth 105 poke55,0:poke56,21:clr:poke648,22 110 sys58651:poke36879,14:print"{wht}" 115 deffnb4(x)=x-48+(x>57)*7 120 fori=0to255:readby$:print"{home}"i,by$ 125 by=16*fnb4(asc(by$))+fnb4(asc(right$(by$,1))) 130 cs=cs+by:poke5376+i,by:next 135 fori=0to3:readby:cs=cs+by 140 poke6140+i,by:next 145 ifcs=29186thensys5389:sys58238 150 print"{clr}{down} Checksummenfehler !" 155 print"{down} Datablock pruefen .":end 160 data19,15,83,c4,7c,c5,1a,c7,29,15,ef 165 data15,00,a2,0b,bd,00,15,9d,00,03,ca 170 data10,f7,60,8a,48,ad,05,90,c9,de,d0 175 data03,20,18,e5,68,4c,3b,c4,20,73,00 180 data08,c9,40,f0,04,28,4c,e7,c7,28,20 185 data3c,15,4c,ae,c7,20,73,00,c9,91,d0 190 data55,20,73,00,a2,04,bd,fb,17,9d,01 195 data90,ca,d0,f7,ad,86,02,9d,00,96,e8 200 datad0,fa,a9,7f,aa,9d,00,16,e9,08,e9 205 data00,29,7f,ca,10,f4,60,20,9e,d7,8a 210 data10,f9,4c,48,d2,a2,00,86,fd,20,6a 215 data15,48,4a,4a,4a,4a,66,fd,09,18,85 220 datafe,20,fd,ce,20,6a,15,a8,68,29,07 225 dataaa,a9,00,38,6a,ca,10,fc,60,c9,9c 230 datad0,19,20,73,00,a2,18,86,23,a0,00 235 data84,22,98,91,22,c8,d0,fb,e6,23,e8 240 datae0,20,90,f4,60,c9,8e,d0,06,20,73 245 data00,4c,18,e5,20,6a,15,08,20,fd,ce 250 data20,73,15,28,f0,04,11,fd,d0,04,49 255 dataff,31,fd,91,fd,60,20,73,00,20,fa 260 datace,20,73,15,31,fd,f0,02,a9,01,20 265 data94,d7,20,b4,df,4c,f7,ce,a9,00,85 270 data0d,20,73,00,c9,40,f0,dd,20,79,00 275 data4c,8d,ce,144,17,0,222
10 @on:@clr:dim p(127) 20 for i=0 to 127 30 @1,0,i 40 next 50 for i=1 to 127 60 @1,i,64 70 next 80 for x=0 to 127 90 @1,x,(1-sin(x*~/64))*63.5 95 @1,x,(1-cos(x*~/64))*63.5 100 next 180 for x=0 to 127 190 @1,x,(sin(x*~/16))*(127-x)/2+63.5 200 next 250 for i=1 to 127 260 @1,i,0 265 @0,0,i 270 next 280 rem 281 y=rnd(ti)^2*128 285 p(y)=p(y)+1 :if p(y)>127 then400 286 @1,y,p(y) 300 goto280 400 for i=6144 to 8191 420 pokei,255-peek(i):next 900 @return