Tips & Tricks

Zeicheneditor für C 64

In der Kürze liegt hier die Würze. Statt seitenlanger Listings brauchen Sie nur eine einzige Bildschirmseite abzutippen, um den Zeichensatz Ihres C 64 ganz nach Belieben ändern zu können.

Das Programm »Character Change« (Listing 1) ist ein Hilfsprogramm, um den Zeichensatz des C 64 beliebig zu verändern und anschließend auf Diskette abzuspeichern. Das ganze Listing wirkt zwar auf den ersten Blick etwas unübersichtlich, aber dafür sind es halt auch bloß 24 Zeilen.

Der Vollständigkeit halber ist auch noch ein Demo-Programm dabei, das es ermöglicht, mit diesem veränderten Zeichensatz in eigenen Programmen zu arbeiten. Einsatzmöglichkeiten gibt es genug, etwa Spiele.

Ein paar Erläuterungen zum Programm:

Nach dem Starten mit »RUN«, fragt der Computer »KEY ?«. Hier kann ein beliebiges Zeichen über die Tastatur eingegeben werden. Allerdings muß es an der Stelle stehen, an der der Cursor blinkt, da aus dieser Speicherzelle des Video-RAMs der Bildschirmcode geholt wird.

Nachdem die Eingabe mit RETURN abgeschlossen wurde, erscheint die Matrix des Zeichens vergrößert auf dem Bildschirm. Dabei steht ein Sternchen für gesetztes, ein Punkt für ein nicht gesetztes Pixel.

Jetzt kann die Zeichenmatrix verändert werden, und zwar zeilenweise. Wieder durch Punkte und Sternchen kennzeichnen, wo ein Punkt gesetzt beziehungsweise nicht gesetzt werden soll. Danach RETURN drücken und die nächste Zeile ändern.

Sind alle acht Zeilen neu eingegeben, so kann man sich für »W« wie »weiter« und »S« wie »save« entscheiden. Drückt man »W«, so geht das Spielchen von vorne los, mit »S« wird der «Zeichensatz auf Diskette abgespeichert. Drückt man eine andere Taste, so erfolgt ein Programmabbruch.

Das File des Zeichensatzes nennt sich »character ram«. Das Demo-Programm (Listing 2) lädt einen bereits veränderten Zeichensatz von Diskette und stellt dann alle 256 Zeichen auf dem Bildschirm dar.

So arbeitet das Programm

Noch ein paar Worte zur Arbeitsweise des Programms.

Zuerst wird von einem in DATAs abgelegten Maschinenprogramm mit Hilfe der Blockverschieberoutine des Betriebssystems der Zeichensatz zweimal in verschiedene RAM-Bereiche kopiert. Einmal nach $E000, einmal nach $9000. Dies ist erforderlich, um die Zeichenmatrix mit PEEK auslesen zu können, was im unter dem Betriebssystem liegenden RAM bekanntlich nicht geht Die zweite Kopie ist die, aus der der Computer jetzt die Zeichen ausliest. Danach werden von Basic aus die Zeiger für den Beginn des Video-RAMs, den Zeichengenerator und die damit zusammenhängenden 16 KByte für den Video-Controller neu gesetzt. Das Video-RAM wird also zwangsweise mit verschoben, und zwar nach dezimal 49152.

Aus dem Bildschirmcode des eingegebenen Zeichens wird die Startadresse in der ersten Kopie des Zeichensatzes ermittelt und 8 Bytes ausgelesen. Aus diesen 8 Bytes werden dann die Strings für die Bildschirmdarstellung gebildet. Umgekehrt werden aus den eingegebenen Strings die Bytes für den Zeichensatz gebildet und anschließend in beide Kopien ge-POKEt.

Ein zweites Maschinenprogramm ruft dann die SAVE-Routine auf und speichert die 4 KByte der ersten Kopie auf Diskette. Eine erste Kopie deshalb, um sie nach dem Laden in andere Programme nochmals lesen oder verändern zu können.

Das Demo-Programm enthält im wesentlichen eine weitere Maschinenspracheroutine, die den Zeichensatz nach $9000 lädt und dann nach $E000 verschiebt. Die Umschaltung der Zeiger geschieht auch hier von Basic aus, um dem Anwender zu überlassen, wann er den neuen Zeichensatz verwenden will.

(Marc Ritter/ev)
1 poke53280,0:poke53281,0:fori=832to911:reada:pokei,a:next:sys832:poke850,160
2 poke56,144:clr:sys832:poke56576,peek(56576)and252:poke53272,8:poke648,192
3 input"{clr}{yel}key";z$:ad=36864+(peek(53272)and2)*1024+8*peek(49157)
4 fori=0to7:a$(i)="":y=peek(ad+i):fork=7to0step-1:z$=".":x=2^k
5 if(yandx)thenz$="*"
6 a$(i)=a$(i)+z$:next:print"  "+a$(i):next:print"{home}":fori=0to7:input"{lred}";b$:a=0
7 fork=0to7:ifmid$(b$,8-k,1)="*"thena=a+2^k
9 next:pokead+i+20480,a:pokead+i,a:next:print"{rvon}s{rvof}ave/{rvon}w{rvof}eiter":wait203,63:getc$
10 ifc$="s"thensys866:goto3
11 data120,169,51,133,1,169,,133,95,133,90,133,88,169,208,133,96:ifc$="w"then3
12 end:data169,240,133,89,169,224,133,91,32,191,163,169,55,133,1,88,96,169,,133
13 data251,169,144,133,252,162,8,32,186,255,169,13,162,130,160,3,32,189,255,169
14 data251,162,,160,160,32,216,255,96,67,72,65,82,65,67,84,69,82,32,82,65,77,32
Listing 1. Der Zeicheneditor.
100 fori=828to900:readx:pokei,x:next
110 data162,8,160,1,32,186,255,169,13,162,115,160,3,32
120 data189,255,169,0,32,213,255,120,169,51,133,1,169,0
130 data133,95,133,90,133,88,169,144,133,96,169,240,133,89
140 data169,160,133,91,32,191,163,169,55,133,1,88,96,67
150 data72,65,82,65,67,84,69,82,32,82,65,77,0,0
160 data0,0,0
200 poke56,144:clr:sys828:poke56,160:clr
205 poke53272,8:poke56576,peek(56576)and252:poke648,192
210 print"{clr}{down}{down}{down}{down}{down}{down}{down}{down}":fori=0to255:poke49152+i,i:poke55296+i,3:next
Listing 2. Demo-Programm zum Zeicheneditor.
PDF Diesen Artikel als PDF herunterladen
Mastodon Diesen Artikel auf Mastodon teilen
← Vorheriger ArtikelNächster Artikel →