VC 20
Supergrafik
5/84, S. 81

Supergrafik ohne Erweiterungsmodul

Bekanntlich benötigt man für den VC 20 das Erweiterungsmodul, um hochauflösende Grafik darzustellen. Die Auflösung beträgt damit 160 mal 160 Punkte. Das abgedruckte Basicprogramm liefert aber eine Auflösung von 176 mal 184 Punkten.

Nun eine knappe Erläuterung des Programms:

Die Idee besteht darin, den Zugriff des Zeichengenerators in den freien RAM-Bereich zu legen. Immer wenn in eines der 22 x 23 = 506 Kästchen ein erster Punkt gesetzt werden soll, wird dieses Kästchen mit einem neuen Bildschirm-Code belegt. Damit können 256 der 506 Kästchen angesprochen werden, was wohl für die allermeisten Anwendungen ausreicht, insbesondere für das Erstellen von Funktionsgrafen. In Zeile 10 wird der neue Bereich für die Zeichen (5120 bis 7167) vor Basic geschützt. Die DATA-Zeilen 20 und 22 beinhalten ein kleines Maschinen-Programm, das den Bereich von 5120 bis 7167 vor jedem Programmlauf löscht (eine Basic-Routine würde dazu lästige Sekunden benötigen). In Zeile 135 wird nun der Zugriff des Zeichengenerators auf den freien RAM-Bereich bewerkstelligt.

In den Zeilen 300 bis 999 können Programmteile für die Bereitstellung der X und Y-Koordinaten eines Punktes untergebracht werden. Die Koordinate X darf Werte zwischen 0 und 175, die Koordinate Y Werte zwischen 0 und 183 annehmen. Das abgedruckte Programm generiert eine Sinuslinie.

Nach Ablauf des Programms wartet der VC 20 auf einen Tastendruck und schaltet dann in den Normal-Modus zurück.

Der eigentliche Grafikteil steht im Unterprogramm ab Zeile 4000. Zunächst werden aus X und Y die Koordinaten XS und YS eines der 506 Kästchen errechnet, danach das anzusprechende Byte BY und das Bit BI. Nach Feststellung des zu verwendenden Bildschirm-Codes in Zeile 4040 wird der Inhalt der entsprechenden Adresse im Zeichengeneratorbereich mit einer geeignet gewählten Zahl codiert. Dies führt dann zur Entstehung eines Punktes an der Stelle X, Y. Zusätzlichen Erweiterungen des Programms setzt nur der Speicher Grenzen.

(Rudolf Dörr)
10 poke55,0:poke56,20
20 data160,20,140,43,28,169,0,162,255,157,0,0,202,208,250,140,52,28,141,0,0,200
22 data192,28,208,232,96
40 fori=7200to7226:readz:pokei,z:next
80 print"{clr}supergraphik auf vc 20"
85 print"{down}{down}{rght}{rght}{rght}{rght}{rght}{rght}0<=x<=175":print"{rght}{rght}{rght}{rght}{rght}{rght}0<=y<=183"
90 print"{down}{down}funktion in den zeilen":print"{up}300-999 definieren"
92 print:print"copyright r.doerr":print"gunzenhausen, dez.83"
93 print"{down}{down}taste druecken"
95 gety$:ify$=""then 95
110 sys7200
132 print"{clr}"
135 poke36869,253
200 bc=-1
300 rem wahl v.xu.y
302 forx=0to175
310 y=91*sin(2*~*x/175)+91
330 gosub4000
400 next
1000 geta$:ifa$=""then1000
1010 poke36869,240
1020 end
1030 :
1100 sys7200
4000 rem up punkt setzen
4005 y=183-y:x=int(x+.5):y=int(y+.5):xs=int(x/8):ys=int(y/8)
4010 by=y-ys*8:bi=7-x+xs*8
4020 z=7680+xs+22*ys:zf=z+30720
4030 ifpeek(z)=32thenbc=bc+1:pokez,bc:pokezf,0
4040 bs=peek(z)
4050 b=5120+bs*8+by:p=peek(b):p=por2^bi
4060 pokeb,p
4080 return
Listing, um Grafiken mit 176 und 184 Punkten darzustellen
PDF Diesen Artikel als PDF herunterladen
Mastodon Diesen Artikel auf Mastodon teilen
← Vorheriger ArtikelNächster Artikel →