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$4064-95$40-$5F
32-63$20-$3F0$0032-63$20-$3F
64-95$40-$5F+32$2096-127$60-$7F
96-127$60-$7F+64$40160-191$A0-$BF
128-159$80-$9F-128$800-31$00-$1F
160-191$A0-$BF-128$8032-63$20-$3F
192-223$C0-$DF-128$8064-95$40-$5F
224-254$E0-$FE-128$8096-127$60-$7F
Umrechnungstabelle C64 Bildschirmcode in PETSCII Code

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$80128-159$80-$9F
32-63$20-$3F0$0032-63$20-$3F
64-95$40-$5F-64$C00-31$00-$1F
96-127$60-$7F-32$E064-95$40-$5F
128-159$80-$9F+64$40192-223$C0-$DF
160-191$A0-$BF-64$C096-127$60-$7F
192-223$C0-$DF-128$8064-95$40-$5F
224-254$E0-$FE-28$8096-126$60-$7E
255$FF94$5E
Umrechnungstabelle C64 PETSCII Code in Bildschirmcode

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.

Der PETSCII Steuerzeichen 147 wird als invertiertes Herz dargestellt

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.

Das Invertierte Herz kann als Zeichen nur über den Umweg des RVS-ON Steuerzeichens mit Print 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

PETSCII Codes in Bildschirmcodes Umrechnen mit 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.

PETSCII Codes in Bildschirmcodes Umrechnen mit BASIC

Diese BASIC Routine rechnet PETSCII-Codes in Bildschirmcodes um. Dabei wird mittels IF Abfrage der Wertebereich bestimmt und der Entsprechende Code berechnet.

4 Gedanken zu „Umrechnung von C64-PETSCII zu Bildschirmcodes“
  1. 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

    1. 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

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert