APPLICATIONSCP/M ★ BASIC-LADER_FUR_DEUTSCHER_ZEICHENSATZ_UNTER_CPM ★

Basic-Lader_fur_Deutscher_zeichensatz_unter_CPMApplications Cp/m
★ 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 ★ 

Deutsche Sonderzeichen unter CP/M

Das Diskettenlaufwerk des Schneider CPC 464 wird mit dem Betriebssystem CP/M ausgeliefert. Deutsche Sonderzeichen lassen sich hier nicht so einfach integrieren wie bei dem normalen Betriebssystem — außer Sie verwenden unser Programm.

Arbeitet man mit CP/M, so hat man normalerweise eine englische Tastatur mit englischem Zeichensatz zur Verfügung. Die Tastatur läßt sich relativ einfach umdefinieren. Für den deutschen Zeichensatz muß man schon einige Tricks anwenden. Für die Simulation des Basic-Befehls »SYMBOL AFTER« gibt es eine eigene ROM-Routine, die aus einer COM-Datei (CP/M-Programm) einfach mit »call Obbabh« aufgerufen werden kann. Die Definition eines bestimmten Sonderzeichens kann dann auch unter CP/M mit Hilfe eines Bildschirm-Steuerzeichens (Code 25) erfolgen (siehe CPC-Handbuch. Seite K9.3). Das eigentliche Problem ist, einen ausreichend großen Speicherbereich zu finden, um den selbstdefinierten Zeichensatz abzulegen. Damit absolute Kompatibilität mit jeder beliebigen CP/M-Softwa-re gewährleistet ist. muß dieser Bereich nämlich an einem Ort liegen, den CP/M unter keinerlei Umständen benötigt. Möchte man beispielsweise den Klammeraffen in das deutsche Sonderzeichen »§« verwandeln, so ist die Entsprechung des »SYMBOL AFTER 64«-Komman-dos nötig. Dabei wird aber nicht nur die Zeichenmatrix für den Code 64 ins RAM übertragen, sondern auch die der Codes 65 bis 255. Man benötigt dann nicht nur acht Byte freien Speicher, sondern volle 8 x 192 Byte = 1,5 KByte — eine rechte Verschwendung. Schlimmer noch ist aber die Tatsache, daß außer in der TPA (Transient Programm Area) überhaupt kein Speicherbereich in dieser Größe zur Verfügung steht. Die TPA selbst ist. trotz der Definition »für den Benutzer frei verfügbarer Speicherbereich«, doch nicht so frei verfügbar und deshalb für diese Zwecke tabu. Es könnten ja andere CP/M-Programme über diesen Bereich verfügen und dann böse Folgen auftreten. Einen »MEMORY«-Befehl. wie in Basic zum Schützen eines Speicherbereichs, gibt es unter CP/M nicht.

Geschützter Speicherbereich unter CP/M

Es bleiben also nur zwei Möglichkeiten, dieses Problem zu lösen:

1. Man wendet den Befehl »MOV CPM« an und erzeugt so einen geschützten Speicherbereich im Bereich bis B0FFh. Diese Methode hat aber den Nachteil, daß außer nach dem Aus- und Wiedereinschalten des Computers (und ein paar Tricks) nicht mehr zwischen Disketten ohne und mit verschobenem CP/M gewechselt werden darf. Diese Methode ist also nur bedingt zu empfehlen.

2. Man versucht die überflüssigen Teile der Zeichenmatrix einzusparen und trotzdem einen 100prozentigen ASCII-Zeichensatz zu behalten (beispielsweise das »Ä« auf dem Code 91 und nicht irgendwo oberhalb von 128). Und nur so, daß man für den Rest der Matrix noch irgendeinen kleinen freien Speicherplatz findet. der unter CP/M nicht benutzt wird. Dieser Weg wurde bei dem folgenden Programm verfolgt.

Die meisten wichtigen Betriebssystem-Routinen des CPC 464 werden nicht direkt aufgerufen, sondern über Sprungvektoren im RAM, die man naturgemäß leicht ändern kann. Man baut also eine »Umleitung« und richtet den Vektor auf eine Routine. Erst wenn diese Vorschalt-routine abgearbeitet ist, wird der direkte Sprung in die Ongmalroutine angehängt (oder auch nicht). Diese Methode wird auch für unseren Zeichensatz benutzt. Die vor die originale Zeichenausgaberoutine geschaltete Routine testet zunächst, ob Steuerzeichen erwartet wird und danach, ob ein deutsches Sonderzeichen ausgegeben werden soll. Wenn es ein »gewöhnliches« Steuerzeichen ist, wird die originale Zei-chensatztabelle eingeschaltet und ohne weitere Änderung zu der normalen Ausgaberoutine gesprungen. Wird dagegen ein deutsches Sonderzeichen erkannt, dann wandelt die Routine den Code des Zeichens so um, daß die deutschen Sonderzeichen (nur systemintern, nicht nach außen sichtbar!) auf die Codes von F7 hex bis FF hex liegen.

Die selbstdefinierte Zeichensatztabelle braucht also nicht mehr die Zeichen mit den Codes von 40 hex bis FF hex zu enthalten, sondern nur noch die Zeichen mit den Codes von F7 hex bis FF hex, belegt also statt 1,5 KByte nur noch 72 Byte. Die Code-Wandelroutine selbst schlägt noch mit zirka 45 Byte zu Buche, so daß der vollständige ASCII-Zei-chensatz mit deutschen Sonderzeichen ungefähr 110 Byte benötigt. Möchte man nur lOOprozentige CP/M-Programme einsetzen, wäre damit alles erledigt. Man muß nur noch den Sprung auf die einzige Textausgaberoutine, die im CP/M benutzt wird, anpassen. Sogar die Unterscheidung zwischen Steuerzeichen und direkt auszugebenden Zeichen kann man sich sparen.

Nur, welches CP/M-Programm hält sich schon daran? Die mit der CP/M-Diskette mitgelieferte Programmiersprache Logo ist ein Beispiel dafür. Wie man bei jedem Grafikbefehl sieht, verwendet Logo nicht nur Routinen aus der genormten BDOS/BlOS-Schnittstelle von CP/M. sondern auch Routinen aus dem CPC 464-Betriebssystem. Zur Sicherheit müssen deshalb also auch alle anderen Textausgaberoutinen angepaßt werden. Selbst das Lesen eines Zeichens vom Bildschirm ist dann möglich. Für Leser, die sich mit der CPC 464-Firmware auskennen: die zu ändernden Routinen heißen »TXT UNWRITE«, » TXT WR CHAR«. » GRA WR CHAR« und »TXT OUT ACTION«. Dabei ist darauf zu achten, daß auch immer die richtige RAM/ROM-Konfiguration zur Verfügung steht.

Oft werden Routinen nicht »vorschriftsmäßig« über den Vektor im RAM angesprungen, sondern direkt. Der Aufruf der Routine »GRA WR CHAR« in Routine »TXT OUT ACTION« ist ein Beispiel dafür. Die Korrektur muß dann eben eine Etage höher erfolgen — nur vergessen darf man sie nicht. Auch macht es einen Unterschied, ob ein ASCII-Zei-chen als solches oder als bloßes Symbol mit dem Prefix ASCII-Code 01 hex benützt wird (siehe CPC-Handbuch, Seite K9.2). Die Tabelle der Steuerzeichenaufrufe muß deshalb ebenfalls geändert werden. So ergibt sich das gesamte Anpassungsprogramm, das im Assembler-listing von der Adresse 037A hex bis 043A hex reicht. Es ist zwar jetzt auf 192 Byte angewachsen, was aber immer noch erheblich weniger als die besagten 1.5 KByte ist — und man hat die Garantie, daß es wirklich zu allen anderen CPC 464-Programmen kompatibel ist.

Wo ist freier Speicherplatz

Nachdem die Zeichensatzroutine steht, kehren wir wieder zu unserem alten Problem zurück — dem Auffinden eines unbelegten Speicherbereichs. Für nur 192 Byte ist dieses Problem allerdings einfacher zu lösen. Wenn man nur mit Disketten arbeitet. wird der »Kassetten-File-Header-Bereich« des CPC 464-Be-triebssystems nicht benötigt. Dieser Bereich reicht von b800 bis b8dl hex und ist somit mit 209 Byte länger als die benötigten 192 Byte Unsere Zeichensatzroutine paßt also hinein. Aber was ist mit den Routinen »CSAVE« oder »CLOAD«? Nun, diese dürfen tatsächlich nicht benutzt werden, solange der deutsche Zeichensatz eingeschaltet ist. Er muß also vorher wieder ausgeschaltet werden. Unserer Ansicht nach ist es aber besser, eine Inkompatibilität in Kauf zu nehmen — diese dafür aber genau abgrenzen zu können — als die Routine irgendwo in einem Speicherbereich mit unklaren Zugriffsrechten abzulegen (wo es zwar in 99 Prozent aller Fälle gut geht, Probleme aber nie auszuschließen sind). Außerdem wird man es als Laufwerk-Besitzer unter CP/M sowieso nicht all-
zuoft mit Kassettendateien zu tun haben.

Das Assemblerprogramm enthält einen sehr langen Vorspann: Zunächst testet das Programm, ob die Eingabe »DEUTSCH EIN«, oder »DEUTSCH AUS« heißt oder eine falsche Eingabe gemacht wurde. In Abhängigkeit davon gibt es zunächst Meldungen aus: bei einer falschen Eingabe die Korrektur und bei einer richtigen Eingabe eine Bestätigung. Wird der deutsche Zeichensatz eingeschaltet, weist das Programm sogar auf das Verbot der Kassettenoperationen hin. Danach wird die eigentliche Routine für die Sonderzeichen mit Hilfe eines Verschiebeladers aus dem Speicherbereich von 037Ahex und folgende in den Bereich von B800hex und folgende transferiert und ins Betriebssystem eingebunden. Der Verschiebelader benützt dazu die siebte Zeile des Assemblerprogramms »hi-mem__equ__0B8D1h«. Wem die Lage des deutschen Zeichensatzes nicht gefällt, der kann einfach durch die Änderung dieser Zeile einen neuen Bereich einstellen. Beim Ausschalten des deutschen Zeichensatzes werden nur die Sprungvektoren wieder berichtigt und ins CP/M zurückgesprungen. Bei der Eingabe der Routine für die deutschen Sonderzeichen müssen Sie wie folgt Vorgehen:

Zuerst den abgedruckten Basic-Lader eintippen (auch wenn es eingefleischten CP/M-Profis graust). Dann den Basic-Lader starten. Es wird auf der Diskette eine Datei mit dem Namen »DEUTSCH.HEX« erzeugt. Ist das geschehen, so gehen Sie in den CP/M-Modus. Beim Kauf des Diskettenlaufwerks wurde eine Systemdiskette mitgeliefert, auf der sich auch eine Datei »LOAD.COM« befindet. Falls sich diese nicht schon auf Ihrer Arbeitsdiskette befindet, kopieren Sie die Datei auf die Diskette, auf der sich »DEUTSCH.HEX« befindet Geben Sie jetzt (immer noch im CP/M-Modus) bei eingelegter Arbeitsdiskette »LOAD DEUTSCH« ein. Das Diskettenlaufwerk beginnt zu laufen und auf dem Bildschirm erscheinen Meldungen. Ist darunter, außer Angaben über den verbrauchten Speicherplatz, auch eine Warnung oder eine Fehlermeldung »Check sum error« (= Prüfsummen-fehler), so haben Sie bei der Eingabe der DATA-Zeilen des Basic-Laders einen Fehler gemacht. In diesem Fall erscheint die fehlerhafte Zeile auf dem Bildschirm (ohne Zeilennummer und Text »DATA«). Schalten Sie in den Basic-Modus, korrigieren Sie die Zeile des Basic-Laders und fangen Sie noch mal mit dem
Start des Basic-Laders an. Hat alles geklappt, so muß auf der Diskette ein Programm »DEUTSCH.COM« zu finden sein. Geben Sie jetzt »DEUTSCH EIN« ein. um das zu prüfen. Funktioniert es. so sind Sie fertig. »DEUTSCH. COM« ist jetzt ein Programm vom gleichen Typ wie »FORMATCOM«

oder »FILECOPY.COM« und Sie können es immer wieder nur durch die Eingabe des Namens starten. Die Dateien »LOADCOM«. »DEUTSCH. HEX« und den Basic-Lader brauchen Sie ab jetzt nicht mehr und Sie können alle drei ohne weiteres löschen.

Eine deutsche DIN-Tastatur

Zum Schluß noch ein paar Anwendungstips. Kopieren Sie die Datei »SETUP.COM« auf ihre Arbeitsdiskette und geben Sie dann »SETUP« ein. Beantworten Sie alle Fragen mit Ja — bis auf die Frage »Initial Command Buffer empty Is this correkt? Y/N_«. Hier geben Sie »N«. danach »deutsch t M« und »Enter« ein. Besonders wichtig ist dabei die Frage »Do you want to update your system-disk?« Hier muß auf jeden Fall mit Ja geantwortet werden, sonst war die ganze bisherige Prozedur umsonst. Ab jetzt wird bei jedem Neustart von CP/M der deutsche Zeichensatz gleich automatisch mitgestartet.

Wenn Sie auch gleich eine deutsche Tastaturbelegung haben wollen, so brauchen Sie im Kapitel »Keyboard Translations« nur mit »N« zu antworten und genau nach Anweisung vorgehen. Die Tastennummern sind exakt dieselben wie in Basic. Wichtig ist dabei vor allem, daß Sie auch die Kontroll-Ebene anpassen: der Wert in der dritten Ebene muß für die Zeichen §, A bis Z, Ä, Ö, Ü, ^ . _ immer um 64 niedriger als der in der zweiten Ebene sein, sonst kommen Sie bei manchen CP/M-An-wendungen in Schwierigkeiten. CTRL-§ muß also den Code 0 ergeben, CTRL-A den Wert 1, CTRL-B den Wert 2 bis zu CTRL-_ und so weiter. Wenn Sie diese CP/M-Voreinstellungen auch auf andere Disketten übernehmen wollen, so brauchen Sie nicht die ganze langwierige SETUP-Prozedur zu wiederholen. sondern kopieren ganz einfach mit dem Programm »BOOTGEN. COM« auf eine andere Diskette. Allerdings müssen Sie anschließend auch die Datei »DEUTSCH.COM« mitkopieren.

Helmut Tischler/hg , HappyComputer

★ PUBLISHER: Happy Computer
★ YEAR: 1985
★ CONFIG: CP/M
★ LANGUAGE:
★ LiCENCE: COMMERCIALE
★ COLLECTION: HAPPY COMPUTER 1985
★ AUTHOR: Helmut Tischler
 

★ AMSTRAD CPC ★ DOWNLOAD ★

File:
» Basic-Lader  fur  Deutscher  zeichensatz  unter  CPM    (Happy  Computer)    GERMANDATE: 2017-02-12
DL: 301
TYPE: PDF
SiZE: 655Ko
NOTE: Uploaded by hERMOL ; 2 pages/PDFlib v1.6

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

Lien(s):
» Applications » Graduate Software CP/M ROM v2
» Applications » Initiation au CP/M Plus (Amstrad Cent Pour Cent)
» Applications » CP/M Dump (CPC Magazin)
» Applications » Les Commandes Transitoires (Amstrad Magazine)
» Applications » Deutscher Zeichensatz unter CP/M 62 K mit vortex-RAMkarte SP 64-512 (CPC Magazin)
» Applications » Initiation à CP/M : Le CP/M sur CPC 6128 (Amstrad Magazine)
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 413 millisecondes et consultée 2350 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.