Manchmal steht man vor dem Problem, das auf dem Bildschirmcodes auf dem C64 in ASCII-, bzw. PETSCII-Codes umgerechnet werden sollen, oder umgekehrt. Leider gibt es keine eins zu eins Umrechnung um dieses zu bewerkstelligen.
Wenn man die Codetabelle in Abschnitte zu je 32 Zeichen zerlegt, kann für jeden dieser Blöcke eine Umrechnung finden. Die folgenden Tabellen zeigen die Codes mit den entsprechenden Umrechnungswerten.
Tabelle Bildschirmcodes in PETSCII Code umrechnen
Bildschirm-Code dezimal | Bildschirm-Code hexadezimal | Umrechnungs- summand dezimal | Umrechnungs- summand hexadezimal | PETSCII-Code dezimal | PETSCII-Code hexadezimal |
0-31 | $00-$1F | +64 | $40 | 64-95 | $40-$5F |
32-63 | $20-$3F | 0 | $00 | 32-63 | $20-$3F |
64-95 | $40-$5F | +32 | $20 | 96-127 | $60-$7F |
96-127 | $60-$7F | +64 | $40 | 160-191 | $A0-$BF |
128-159 | $80-$9F | -128 | $80 | 0-31 | $00-$1F |
160-191 | $A0-$BF | -128 | $80 | 32-63 | $20-$3F |
192-223 | $C0-$DF | -128 | $80 | 64-95 | $40-$5F |
224-254 | $E0-$FE | -128 | $80 | 96-127 | $60-$7F |
Ab dem Bildschirmcode 128 werden die Zeichen aus der PETSCII Tabelle invertiert ausgegeben.
Tabelle PETSCII Code in Bildschirmcodes umrechnen
PETSCII-Code dezimal | PETSCII-Code hexadezimal | Umrechnungs- summand dezimal | Umrechnungs- summand hexadezimal | Bildschirm-Code dezimal | Bildschirm-Code hexadezimal |
0-31 | $00-$1F | +128 | $80 | 128-159 | $80-$9F |
32-63 | $20-$3F | 0 | $00 | 32-63 | $20-$3F |
64-95 | $40-$5F | -64 | $C0 | 0-31 | $00-$1F |
96-127 | $60-$7F | -32 | $E0 | 64-95 | $40-$5F |
128-159 | $80-$9F | +64 | $40 | 192-223 | $C0-$DF |
160-191 | $A0-$BF | -64 | $C0 | 96-127 | $60-$7F |
192-223 | $C0-$DF | -128 | $80 | 64-95 | $40-$5F |
224-254 | $E0-$FE | -28 | $80 | 96-126 | $60-$7E |
255 | $FF | – | – | 94 | $5E |
Steuerzeichen im PETSKII Code
In den Tabellen scheinen einige Werte zu fehlen, dies liegt daran, dass einige PETSCII-Codes Steuerzeichen enthalten, die aber trotzdem als Bildschirmzeichen dargestellt werden können. So ergibt beispielsweise die Abfrage des PETSCII Codes mittels der ASC Funktion auf ein invertiertes Herz den Code 147.
Versucht man diesen ASCII Code aber mittels CHR$(147) wieder auszugeben, wird der Bildschirm gelöscht. Es handelt sich bei dem PETSCII-Zeichen 147 um ein Steuerzeichen, welches den Bildschirm leert, und den Cursor auf die obere, linke Ecke des Bildschirms setzt. Ähnlich wie das gleichzeitige drücken der SHIFT und CLR-HOME Taste. Wird letztere Tastenkombination nach Eingabe eines Anführungszeichens gedrückt, erhält man wieder das invertierte Herz auf dem Bildschirm. Der Versuch einer Ausgabe dieses Zeichens mit PRINT, unabhängig davon ob es mit SHIFT – CLR-HOME, oder RVS-ON SHIFT-S erzeugt wird, führt ebenfalls zu einem Löschen des Bildschirms. Das Invertierte Herz kann nur durch das Steuerzeichen für RVS-ON und anschließendem normalen Herzsymbol ausgegeben werden.
Diese Steuerzeichen sind also auf dem Bildschirm darstellbare Zeichen, die allerdings als PETSCII ausgegeben eine Funktonalität bereitstellen.
Umrechnung der Codes mittels Assembler
Bei dieser Ass-Routine werden PETSCII Codes in Bildschirmcodes umgewandelt. Dazu werden die Codes in die oben erwähnten 32er Blöcke aufgeteilt und anschließend mit einem vorher festgelegten Umrechnungsfaktor verrechnet.
Diese BASIC Routine rechnet PETSCII-Codes in Bildschirmcodes um. Dabei wird mittels IF Abfrage der Wertebereich bestimmt und der Entsprechende Code berechnet.
Hallo, weiß jemand, wie ich das Pi-Zeichen im VICE eingebe?
Gruß
Ein anderer Andreas
Ich konnte es nicht testen, aber das Forum64 sagt: Shift + ^ (Die Taste neben der 1)
https://www.forum64.de/index.php?thread/65500-wo-ist-pi-versteckt/
viel Erfolg!
Andreas
Zu PETSCII/ASCII Codes in Bildschirmcodes umwandeln, in C64 Basic:
Das Pi-Zeichen gibt beim Einlesen mit GetA$ den
ASCII-Code 222 zurück. Damit passt es in das
Schema der übrigen Zeichen und braucht nicht
gesondert behandelt zu werden. ?chr$(222) ergibt
wieder Pi. Das heißt in deinem Programm wird die
Sonderbehandlung von Pi nie aufgerufen, weil
der ASCII-Code nie 255 ist.
MfG.
Gerhard
Hallo Gerhard,
prinzipiell ist das richtig, allerdings kann es ja sein, das das Pi-Zeichen anderweitig, also nicht über GET/PRINT auf den Bildschirm gekommen ist. Für den Fall das eben doch der Bildschirmcode 255, welcher auch π ergibt, im Bildschirmspeicher steht, sollte man die Prüfung auf jeden Fall vornehmen. 🙂
viele Grüße,
Andreas