VC 20
Grafik

Mini-Grafik VC 20

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

Die »Mini-Grafik« erzeugt ein kleines Grafik-Fenster

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:

@ONschaltet den Bildschirm auf Grafikdarstellung um, wobei die momentane Zeichenfarbe zur Plotfarbe wird
@CLRlöscht den Grafik-Speicher
@f,x,ysetzt (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)«
@RETURNschaltet 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
 100 REM MG10 BY W.WIRTH 
 105 POKE 55,0:POKE 56,21:CLR :POKE 648,22 
 110 SYS 58651:POKE 36879,14:PRINT"{WHITE}" 
 115 DEF FN B4(X)=X-48+(X>57)*7 
 120 FOR I=0 TO255:READ BY$:PRINT"{HOME}"I,BY$ 
 125 BY=16*FN B4(ASC (BY$))+FN B4(ASC (RIGHT$ (BY$,1))) 
 130 CS=CS+BY:POKE 5376+I,BY:NEXT 
 135 FOR I=0 TO3:READ BY:CS=CS+BY 
 140 POKE 6140+I,BY:NEXT 
 145 IF CS=29186 THENSYS 5389:SYS 58238 
 150 PRINT"{CLR,DOWN,SPACE}CHECKSUMMENFEHLER !" 
 155 PRINT"{DOWN,SPACE}DATABLOCK PRUEFEN .":END 
 160 DATA 19,15,83,C4,7C,C5,1A,C7,29,15,EF 
 165 DATA 15,00,A2,0B,BD,00,15,9D,00,03,CA 
 170 DATA 10,F7,60,8A,48,AD,05,90,C9,DE,D0 
 175 DATA 03,20,18,E5,68,4C,3B,C4,20,73,00 
 180 DATA 08,C9,40,F0,04,28,4C,E7,C7,28,20 
 185 DATA 3C,15,4C,AE,C7,20,73,00,C9,91,D0 
 190 DATA 55,20,73,00,A2,04,BD,FB,17,9D,01 
 195 DATA 90,CA,D0,F7,AD,86,02,9D,00,96,E8 
 200 DATA D0,FA,A9,7F,AA,9D,00,16,E9,08,E9 
 205 DATA 00,29,7F,CA,10,F4,60,20,9E,D7,8A 
 210 DATA 10,F9,4C,48,D2,A2,00,86,FD,20,6A 
 215 DATA 15,48,4A,4A,4A,4A,66,FD,09,18,85 
 220 DATA FE,20,FD,CE,20,6A,15,A8,68,29,07 
 225 DATA AA,A9,00,38,6A,CA,10,FC,60,C9,9C 
 230 DATA D0,19,20,73,00,A2,18,86,23,A0,00 
 235 DATA 84,22,98,91,22,C8,D0,FB,E6,23,E8 
 240 DATA E0,20,90,F4,60,C9,8E,D0,06,20,73 
 245 DATA 00,4C,18,E5,20,6A,15,08,20,FD,CE 
 250 DATA 20,73,15,28,F0,04,11,FD,D0,04,49 
 255 DATA FF,31,FD,91,FD,60,20,73,00,20,FA 
 260 DATA CE,20,73,15,31,FD,F0,02,A9,01,20 
 265 DATA 94,D7,20,B4,DF,4C,F7,CE,A9,00,85 
 270 DATA 0D,20,73,00,C9,40,F0,DD,20,79,00 
 275 DATA 4C,8D,CE,144,17,0,222 
Listing 1. »Mini-Grafik VC 20« (Basic-Lader)
|
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
 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 GOTO 280 
 400 FOR I=6144  TO 8191 
 420 POKE I,255-PEEK (I):NEXT 
 900 @RETURN 
Listing 2. Demo-Programm zur »Mini-Grafik«
PDF Diesen Artikel als PDF herunterladen
Mastodon Diesen Artikel auf Mastodon teilen
← Vorheriger ArtikelNächster Artikel →