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 #8Sie 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 #8Denn 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 besser10 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 ★ AMSTRAD CPC ★ DOWNLOAD ★ |
|
CPCrulez[Content Management System] v8.7-desktop/c Page créée en 427 millisecondes et consultée 114 foisL'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. |
|
|