Erstellt: 21. Februar 2013 (zuletzt geändert: 22. Oktober 2019)

PETSCII

Der PETSCII-Zeichensatz

Computer verwenden bis heute noch (zumindest unter DOS) einen Zeichensatz, der 1967 als ASCII (American Standard Code for Information Interchange) genormt wurde. Als Commodore in den Computermarkt vordrang, wollten sie die Grafikfähigkeiten des Rechners durch entsprechende Symbole erhöhen und „verbogen“ die Normung etwas. Der Commodore eigene Zeichensatz, basiert auf einem früheren ASCII-Entwurf von 1963 und wird liebevoll PETSCII (nach dem 1977 erschienenen Commodore PET) genannt.

Gebt ihr unter BASIC zum Beispiel mit
10 PRINT CHR$(147)
oder
20 PRINT “HALLO“

Zeichen auf dem Bildschirm aus, so wird dafür die PETSCII-Tabelle verwendet. In dieser finden sich neben sichtbaren Zeichen z. B. A, 1, ! oder , auch nicht darstellbare Sonderzeichen z. B. CHR$(147), um den Bildschirm zu löschen.

Die wichtigsten darstellbaren Zeichen findet ihr in den nächsten beiden Bildern inkl. einem kleinen Basic-Programm, das genau diese Ausgabe erzeugt.

Die Angaben der Zeichen-Codes in den Bildern ist Hexadezimal (z. B. ist * = $2A = 42), bei Bedarf einfach mal die Zahlensysteme besuchen.

Zeichensatz 1 (nur Großbuchstaben)
Zeichensatz 1 (nur Großbuchstaben)

Der C64 bietet die Möglichkeit, eigene Zeichensätze zu erstellen. Er liefert auch gleich einen zweiten Zeichensatz mit. Dabei werden einige grafische Symbole geopfert, um Groß- und Kleinschreibung zu ermöglichen.

Zeichensatz 2 (Groß- und Kleinbuchstaben)
Zeichensatz 2 (Groß- und Kleinbuchstaben)

 

Es gibt auch noch eine Reihe von Steuerzeichen, mit denen ihr bei der Ausgabe z. B. den Bildschirmlöschen oder die Zeichenfarbe umstellen könnt. Vom BASIC aus könnt ihr diese z. B. mit CHR$(<zeichencode>) oder über PRINT “<steuercode>“ ausgeben. Ihr kennt bestimmt aus BASIC-Listings die lustigen Steuerzeichenzeilen.

Diese Zeile...
Die Zeile 10 PRINT …
... fürht zu dieser Ausgabe.
… führt zu dieser Ausgabe.

Zunächst wird der Bildschirm gelöscht, dann der Cursor um drei Zeilen nach unten und um drei Zeichen nach rechts verschoben. Zum Schluß wird HALLO ausgegeben, wobei jeder Buchstabe eine andere Farbe erhält.

Unter Assembler geht es am einfachsten, wenn ihr diese Steuerzeichen mit der Kernal-Funktion CHAROUT, die ihr bei $FFD2 findet, ausgebt.

Hier nun die Liste mit den wichtigsten Steuerzeichen…

PETSCII
dezimal
PETSCII
hex
Funktion
147$93Bildschirm löschen und Cursor links oben in die Ecke setzen
19$13Cursor nach links oben in die Ecke bewegen (home)
29$1DCursor ein Zeichen nach rechts
157$9DCursor ein Zeichen nach links
17$11Cursor eine Zeile nach unten
145$91Cursor eine Zeile nach oben
32$20Leerzeichen ausgeben
13$0DCursor an den Beginn der nächsten Zeile (Zeilenumbruch)
18$12Invertieren an
146$92Invertieren aus
14$0EGroß- & Kleinbuchstaben anschalten
142$8EGroßbuchstaben und grafische Symbole anschalten
144$90Zeichenfarbe auf schwarz setzen
Die 16 Farben des C64.
Die 16 Farben des C64.
5$05Zeichenfarbe auf weiß setzen
28$1CZeichenfarbe auf rot setzen
159$9FZeichenfarbe auf türkis setzen
156$9CZeichenfarbe auf lila setzen
30$1EZeichenfarbe auf grün setzen
31$1FZeichenfarbe auf blau setzen
158$9EZeichenfarbe auf gelb setzen
129$81Zeichenfarbe auf orange setzen
149$95Zeichenfarbe auf braun setzen
150$96Zeichenfarbe auf rosa setzen
151$97Zeichenfarbe auf dunkelgrau setzen
152$98Zeichenfarbe auf grau setzen
153$99Zeichenfarbe auf hellgrün setzen
154$9AZeichenfarbe auf hellblau setzen
155$9BZeichenfarbe auf hellgrau setzen

Arbeitet ihr mit Assembler (oder POKEs) direkt im Bildschirmspeicher, dann werdet ihr bestimmt darüber stolpern, dass ihr teilweise andere Codes verwenden müsst. Außerdem funktionieren dort die Steuerzeichen nicht! An der Stelle werden nämlich direkt die Zeichen aus dem Char-ROM verwendet.

BASIC Listing

Hier nun, wie versprochen, das BASIC-Listing (nicht schön, aber es läuft 😉 ).

10 s%=0:bv$=chr$(125):bh$=chr$(96)
20 print chr$(147):print;
30 if s%=0 then print "     petscii (zeichensatz 1)";chr$(142)
40 if s%=1 then print "     PETSCII (Zeichensatz 2)";chr$(14)
50 print:print "     ";bv$;"0 1 2 3 4 5 6 7 8 9";
60 if s%=0 then print " a b c d e f"
70 if s%=1 then print " A B C D E F"
80 print "  ";bh$;bh$;bh$;chr$(219);
90 for i=1to32:printbh$;:next:print
100 for j=0 to 5
110 print "  ";
120 print str$(2+j);" ";bv$;:fori=32+16*jto47+16*j
130 print chr$(i);" ";
140 next i
150 print:print "     ";bv$
160 next j
170 if s%=0 then print "   a ";bv$;
180 if s%=1 then print "   A ";bv$;
190 for i=160 to 175:print chr$(i);" ";:next i
200 print:print "     ";bv$
210 if s%=0 then print "   b ";bv$;
220 if s%=1 then print "   B ";bv$;
230 for i=176 to 191:print chr$(i);" ";:next i
240 print:print "     ";bv$
250 print
260 if s%=0 then print "     umschalten mit space oder x=exit";
270 if s%=1 then print "     Umschalten mit SPACE oder X=Exit";
280 get a$:if a$="" then goto 280
290 if a$=" " then s%=abs(s%-1):goto 20
300 if s%=1 then print chr$(142);
310 print chr$(147)

Schrott!!Naja...Geht so...Ganz gut...SUPER! (3 Bewertungen | Ø 5,00 von 5 | 100,00%)

Loading...


Zurück

6 Gedanken zu „PETSCII“

  1. Wenn ich $41 nehme bekomme ich das PIK Zeichen. Wie in deinem Tutorial gezeigt. Aber es müste doch eigentlich ein “A” sein und das PIK eine $61?

    Ich steh auf dem Schlauch xD

  2. Hi, ich lese gerade diverse Seiten hier durch um das Programmieren im CBM Stdio zu lernen. Coole Seiten und tlw. super Erklärungen zur Hardware. Mein Problem aktuell ist folgendes. Wie kann ich in Assembler Steuerzeichen für den C64 ausgeben. Ich habe das so gelöst:
    text”D0=U21″
    byte $9D,$9D,$9D,$9D,$9D,$9D,$11,$11
    Es soll aber möglich sein mit !pet”Hallo”,13,17,0 eine direkte Eingabe der Steuerzeichen zu machen, haut aber nicht hin bei mir (cbm stdio 3.0.0)
    Gibt es einen Tipp? Oder am Besten ein kleines Beispiel?
    Gruß und vielen Dank
    Pit

    1. Hallo,
      !pet ist ACME-Syntax, die kennt das CBM prg Studio leider nicht.

      Du kannst aber folgendes machen (CBM prg Studio 3.1.0 BETA)…

      *=$0801
      ; 2014 SYS 2062
      BYTE $0B,$08,$DE,$07,$9E,$20,$32,$30,$36,$32,$00,$00,$00

      ;*** Start des Programms
      ldx #0
      @loop
      lda test,X
      beq @exit
      jsr $FFD2
      inx
      bne @loop
      @exit
      rts

      test
      BYTE 147,"HALLO",29,17,29,18,"WELT",146,150,"!",0
      ;Bildschirm löschen (147)
      ;"HALLO"
      ;CURSOR rechts (29), unten (17), rechts (29)
      ;REVERS AN (18)
      ;"WELT"
      ;REVERS AUS (146)
      ;FARBE hellrot (150)
      ;"!"
      ;ENDE der Ausgabe (0)

Schreibe einen Kommentar

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

Protected by WP Anti Spam