APPLICATIONSDIVERS ★ ZEICHENUMKODIERUNG BEI CPC 664 UND 6128 (COMPUTER TECHNIK) ★

Zeichenumkodierung bei CPC 664 und 6128 (Computer Technik)Applications Divers
★ Ce texte vous est présenté dans sa version originale ★ 
 ★ This text is presented to you in its original version ★ 
 ★ Este texto se presenta en su versión original ★ 
 ★ Dieser Text wird in seiner Originalfassung präsentiert ★ 

Verborgene Fähigkeiten

Der CPC 664 und CPC 6128 (sorry, liebe 464-User!) besitzen eine bisher nahezu unbekannte Fähigkeit: Die Umkodierung von Zeichen bei der Druckerausgabe. Hier erfahren Sie, was man damit machen kann.

Geben Sie doch einmal folgende BASIC-Befehle (bei angeschlossenem Drucker) ein:

FOR i = 32 TO 126:
PRINT #8,CHR$(i+128);:
NEXT i:PRINT #8

Sie werden erwarten, daß genau der Zeichensatz ausgedruckt wird, den man auch mit diesen Befehlen ausgeben kann:

FOR i = 32 TO 126:
PRINT #8,CHR$(i);:
NEXT i = RINT #8

Denn der Schneider CPC überträgt bekanntlich (leider) nur die unteren sieben Bits jedes Bytes, so daß das höchstwertige Bit eigentlich ignoriert werden sollte. Damit müßte auf dem Papier stehen:

!‘#$%&'()*+.-./0123...

Doch weit gefehlt! Unwiderlegbar finden sich dort nämlich folgende Symbole:

"Öä#$%§'()*öüßÜÄ0123 . ..

beziehungsweise bei eingeschaltetem internationalem Zeichensatz:

^ \{#$%@'()*|}~][0123...

Warum? Wie bereits angedeutet. besitzen die Modelle 664 und 6128 eine Übersetzungstabelle, die bei jeder Ausgabe eines Zeichens durchsucht wird. Hauptsächlich ist sie für CP/M-Plus zur Ausgabe nationaler Zeichensätze gedacht. Unter CP/M-Plus wurden ja auch die Grafikzeichen durch nationale Sonderzeichen ersetzt.

Die Übersetzungstabelle liegt fest im RAM zwischen den Adressen &B804 und &B82C. Sie ist 40 Bytes lang, kann also zwanzig Zeichenpaare aufnehmen. Von BASIC aus läßt sie sich mit PEEK und POKE ohne weiteres manipulieren. Betrachten Sie bitte einmal den genauen Aufbau der Tabelle. An der Adresse &B804 steht nach dem Einschalten des Computers oder einem Reset der Wert 10. Er gibt die Anzahl der Zeichen an, die umkodiert werden. Wollen Sie zum Beispiel zwanzig Zeichen übersetzen, ‘poken' Sie dort den Wert 20 hinein.

X für'n U

An diese Systemvariable schließen sich die Zeichenpaare an. Zuerst kommt das Zeichen, das umkodiert werden soll, dann dasjenige, in das es umkodiert wird. In &B805 steht etwa 160, in &B806 der Wert 94. Daraus erfahrt der Computer, daß er das Zeichen mit dem Code 160 (nicht-ASCII) in das Potenzierungssymbol (ASCII: 94) umwandeln soll. Geben Sie mal folgendes ein:

POKE &B805.ASC("U"):
POKE &B806.ASCCX")
und PRINT #8,"UUUUUU"

und es erscheinen statt der eigentlich erwarteten ‘U's lauter 'X'e auf dem Papier, ein frappantes Beispiel dafür, wie Ihnen der Computer ein X für'n U vormachen kann.

Natürlich sind die PEEKs und POKEs genausowenig wie die genaue Startadresse der Tabelle von Schneider bisher offiziell dokumentiert. Wer also nur nach dem Firmware-Handbuch programmieren will, um die Kompatibilität mit zukünftigen Computern der Firma Schneider beizubehalten (wenn es überhaupt noch welche mit einem Z80-Prozessor geben sollte, schließlich gibt's ja nun den 16-Bitter), muß auf Maschinensprache zurückgreifen. Denn es gibt wie in c't 8/86 bereits beschrieben ( ‘Noch mehr Vektoren') eine neue ROM-Routine mit einem Sprungvektor an der Adresse &BD58, den man wohl sinnvollerweise MC_PRINT_TRANSLATION nennen sollte. Übergeben Sie der Routine im HL-Register einen Zeiger auf die neue Druckerübersetzungstabelle. Wenn die Tabelle nicht zu groß ist, ajso nicht länger als 41 Bytes (20 Übersetzungen und allen voran die Systemvariable mit der Zahl der Einträge), wird sie vom System in den Bereich ab &B804 kopiert und als neue Übersetzung verwendet.

Listing I zeigt ein Hilfsprogramm, mit dem die Umkodierung von Zeichen kinderleicht wird. Wenn Sie es starten, wird der Bildschirm in drei Fenster aufgeteilt. In der linken Bildschirmhälfte ist der aktuelle Zustand der Tabelle dargestellt.

Umkodieren ist...

Die einzelnen Einträge sind von 1 bis 20 durchnumeriert. Links vom Pfeil sehen Sie das zu ersetzende Zeichen als ASCII-Code und als Grafikzeichen, rechts davon das Zeichen, durch das es ersetzt wird.

Sobald der Cursor erscheint, können Sie bei ‘Nummer:' eine Zahl von 1 bis 20 eingeben, die mit der Numerierung der Tabelle im linken Fenster korrespondiert. Als nächstes fragt Sie der Computer nach dem Ausgangs- und dem Zielzeichen. Ihre Eingabe können Sie dezimal (64), hexadezimal (&H40 oder &40) und binär (&X1000000) machen. Zusätzlich ist die Eingabe als ASCII-Zeichen erlaubt. Ihr wird ein Doppelkreuz vorangestellt: Der Computer aktualisiert dann die Tabelle und erwartet neue Umkodierbefehle von Ihnen. Um das Programm abzubrechen, geben Sie bei ‘Nummer:' bitte einen Stern (*) ein.

Wenn Sie sich jetzt fragen, ob diese Zeichenübersetzungen wirklich mehr sind als nur eine Spielerei, erhalten Sie hier eine wirklich sinnvolle Anwendung: einen deutschen Zeichensatz für den Computer - bitte nicht gähnen, dieser hier hat einen ganz entscheidenden Vorteil. Denn er kostet nur 80 Bytes Ihres kostbaren und über alles geliebten RAM-Speichers!

Rechnen Sic einmal mit: SYMBOL AFTER 0 zieht 1920 Bytes vom verfügbaren Speicher ab, SYMBOL AFTER 64 immerhin noch 1408 Bytes, immer ausgehend vom Standardwert SYMBOL AFTER 240.

Das Listing 2 definiert sämtliche deutschen Sonderzeichen im Bereich zwischen ASCII 230 und 237. Damit lassen sie sich zwar mit CHR$(x) ausdrucken,

... kinderleicht

aber noch nicht über die Tastatur erreichen. Das erreichen dann die KEY-DEF-Befehle. Wenn Sie allerdings ohne MC-PRINT-TRANSLATION die Zeichen auf dem Drucker ausgeben wollen, erhalten Sie (denken Sie an die 7-Bit-Schnittstelle!) die Zeichen ‘fghijklm'. Die Zeilen 300 bis 330 ‘poken' die Ausgabe-Routine aber so um, daß auch die Druckeransteuerung mit den deutschen Sonderzeichen möglich wird.

Drei kleine Nachteile hat diese Methode aber: Erstens können Sie die deutschen Sonderzeichen nicht in BASIC-Programme aufnehmen, da sie intern immer noch als Grafikzeichen angesehen werden. In allen Fällen aber, in denen die Sonderzeichen in Anführungszeichen stehen, lassen sie sich im Programm unterbringen. Statt

10 REM ÄÖÜ

schreiben Sie also besser

10 REM "ÄÖÜ"

Der zweite Nachteil besteht darin, daß die üblichen Logik-und Vergleichsbefehle mit den Zeichen natürlich nicht mehr so richtig funktionieren. Und drittens werden die Umlaute von CAPS-LOCK nicht erfaßt.

Diese drei Einschränkungen sind aber oft gar nicht so wichtig, und schließlich sparen Sie enorm Speicher.

c't

★ PUBLISHER: Computer Technik (c't)
★ YEAR: 1986
★ CONFIG: 64K + AMSDOS
★ LANGUAGE:
★ LiCENCE: LISTING
★ AUTHOR: Martin KOTULLA
★ INFOS:
  • Listing 1: Ein komfortables Menü ermöglicht es, die Umkodiertabelle zu betrachten und neue Werte einzusetzen.
  • Listing 2: Der Dauerbrenner ‘Deutscher Zeichensatz unter 'BASIC' kostet, so eingebunden, nur schlappe 80 Bytes vom kostbaren RAM.

 

★ AMSTRAD CPC ★ DOWNLOAD ★

Type-in/Listing:
» Zeichenumkodierung  bei  CPC  664  und  6128    (Computer  Technik)    GERMAN    LISTINGDATE: 2024-03-08
DL: 29
TYPE: PDF
SiZE: 217Ko
NOTE: Supplied by archive.org ; 2 pages/PDFlib v1.6

★ AMSTRAD CPC ★ A voir aussi sur CPCrulez , les sujets suivants pourront vous intéresser...

Lien(s):
» Applications » Symbol Editor (CPC Amstrad International)
» Applications » Symbol Poker (Compute Mit)
» Applications » Super Symbole
» Applications » Symbol (CPC Infos)
» Applications » Symbol (CPC Infos)
» Applications » Symbol-Basic (Computer Partner)
Je participe au site:
» Pour ce titre nous ne disposons de fichier executable sur CPC (Dump, Saisie du listing) , alors si vous avez ça dans vos cartons ou vous désirez usé vos petit doigts boudinés sur votre clavier faites le nous savoir.
» Vous avez des infos personnel ?
» Vous avez remarqué une erreur dans ce texte ?
» Aidez-nous à améliorer cette page : en nous contactant via le forum ou par email.

CPCrulez[Content Management System] v8.7-desktop/c
Page créée en 427 millisecondes et consultée 114 fois

L'Amstrad CPC est une machine 8 bits à base d'un Z80 à 4MHz. Le premier de la gamme fut le CPC 464 en 1984, équipé d'un lecteur de cassettes intégré il se plaçait en concurrent  du Commodore C64 beaucoup plus compliqué à utiliser et plus cher. Ce fut un réel succès et sorti cette même années le CPC 664 équipé d'un lecteur de disquettes trois pouces intégré. Sa vie fut de courte durée puisqu'en 1985 il fut remplacé par le CPC 6128 qui était plus compact, plus soigné et surtout qui avait 128Ko de RAM au lieu de 64Ko.