Der MPS 802 lernt deutsch
Der MPS 802 ist als zuverlässiger Drucker mit ansprechendem Schriftbild bekannt. Leider kennt er keine deutschen Umlaute. Unser kleines Programm ändert das: Der MPS 802 lernt deutsch.

Die Geschichte des MPS 802 ist interessant und abwechslungsreich wie kaum eine andere. Entstanden ist er aus dem CBM 4022/4023 der für die PET-Generation geschaffen wurde und noch einen parallelen IEC-Bus (IEEE 488) besaß. Daraus entstand der 1526 (mit serieller Schnittstelle), der mit immer neuen Gerüchten über seine Fähigkeiten und seine Fehler überraschte. Von einem zweiten Modus war die Rede, und sogar von einer vollen Grafikfähigkeit. Wie aber jeder weiß, kann sowohl der 1526 als auch der MPS 802 Grafiken nur im »Zitter-Rumpel-Verfahren« erzeugen. Soll heißen, seine Grafikfähigkeit beschränkt sich auf ein einziges Zeichen, das ständig umprogrammiert wird. Seit der Hannover-Messe 1984 nennt sich der 1526 nun MPS 802 (Bild 1), ist aber rein technisch gesehen unverändert geblieben. Was neu ist, ist die sogenannte Firmware, oder um es gleich beim richtigen Namen zu nennen, das Betriebssystem. Es ist müßig, die vielen Fehler der verschiedenen 1526-Versionen aufzuzählen, beim MPS 802 sind sie jedenfalls ausgemerzt. Deshalb ist es auch für jeden Besitzer des 1526 empfehlenswert, sein Kernal-ROM durch das des MPS 802 zu ersetzen, es funktioniert einwandfrei. Der Austausch ist ein einfaches Unterfangen, aber dazu später mehr. Schauen wir uns zunächst einmal die Hardware des MPS 802 an. Gesteuert wird das kleine Druckwunder durch einen zum 6510 softwarekompatiblen 6504-Prozessor. Außer dem 6504 befinden sich noch zwei 6532-RIOT (RAM Input/Output Timer) und eine 6522-VIA (Variable Interface Adapter) auf der Hauptplatine. Das Betriebssystem befindet sich in einem 8-KByte-EPROM vom Typ 2764, wie er überall im Handel erhältlich ist. Im einzelnen ist die Speicheraufteilung des MPS 802 in Bild 2 dargestellt.
$0000-$00FF | Zeropage |
$0100-$01FF | Prozessorstack |
$0200-$03FF | I/O-Bausteine |
$0400-$1FFF | Betriebssystem |
Genug der Theorie. Im praktischen Betrieb fällt bald schon das Fehlen der deutschen Umlaute schmerzlich auf. Dem kann abgeholfen werden. Nachstehend abgedrucktes Programm (Listing 1) verändert in der schon vom Hypra-Perfekt (Ausgabe 4/85) bekannten Overlay-Methode das Original-Betriebssystem. Dazu müssen wir allerdings erst einmal in den Besitz des Kernals kommen. Lösen Sie die vier Schrauben des Gehäuses und nehmen Sie (nach dem Farbband) vorsichtig das Gehäuseoberteil ab (Vorsicht! Garantieverlust bei neuen Geräten). Nachdem Sie sich gemerkt haben, wie das Verbindungskabel vom Deckel zur Hauptplatine eingesteckt war, können Sie auch dieses entfernen. Auf der linken, hinteren Seite des Druckers ist eine ebenfalls abschraubbare Verkleidung aus Blech angebracht — weg damit. Jetzt braucht nur noch der 2764-EPROM in der rechten hinteren Ecke der Platine (Bild 3) geortet und vorsichtig herausgehebelt werden. Die Besitzer eines EPROM-Programmiergerätes wissen jetzt sicherlich schon was kommt — das EPROM wird ausgelesen und abgespeichert. Im folgenden wird deshalb davon ausgegangen, daß der Inhalt des MPS 802-EPROMs von $6000 bis $7FFF im Speicher des C 64 steht.

Die Zeichenmatrizen, daß heißt die Informationen über das Aussehen der einzelnen Zeichen, stehen nun im Bereich von $6400 bis $69FF. Aber in welcher Form? Da der MPS 802 einen Druckkopf mit 8 Nadeln besitzt, besteht jedes Zeichen aus 8 mal 8 Punkten. Jedes Zeichen belegt also 8 Byte. Jedes Byte definiert eine Spalte des Zeichens, da die Nadeln im Druckkopf senkrecht angebracht sind. Ist ein Bit gesetzt, so wird die entsprechende Nadel beim Druck des Zeichens aktiviert. Steht das entsprechende Bit auf Null, wird natürlich auch kein Punkt gedruckt. Das Leerzeichen besteht beispielsweise aus acht mal Byte 0. Etwas deutlicher wird das Ganze, wenn wir uns einmal das Zeichen »A« genauer anschauen. Die Zeichenmatrix für das A steht von $6408 bis $640F.
Ein Monitor liefert uns für diesen Bereich die Werte:
3E 50 90 90 50 3E 00 00

Jede Hexadezimalzahl repräsentiert die Summe einer Spalte (Bild 4). Man erkennt, welcher Zusammenhang zwischen der Hexadezimalzahl (Bitmuster) und der gedruckten Matrix besteht. Das Programm aus Listing 1 verändert die vorhandene Zeichenmatrix so, daß es die deutschen Umlaute an Stelle einiger Grafikzeichen zusammen mit der deutschen Version von Vizawrite druckt. Außerdem werden die Steuercodes für Breitschrift von CHR$(1) auf CHR$(14) und die Rückstellung auf Normalschrift von CHR$(129) auf CHR$(16) geändert, was gebräuchlicher ist. Wer aber dennoch selber den Zeichensatz abändern möchte, findet die einzelnen Zeichensätze an folgenden Speicherstellen:
Von $6400-$6407 steht der Klammeraffe. Darauf folgen die Großbuchstaben von A—Z ($6408— $34DF). Ab $34E0 kommen die Sonder- und Grafikzeichen. Die Kleinbuchstaben beginnen bei $6808 (mit dem kleinen a). Leider hat der Drucker kein RAM, mit dem man eine Veränderung des Zeichensatzes ausprobieren könnte. Beim Entwerfen des eigenen Zeichensatzes ist ferner auf folgendes zu achten: Der Drucker führt nach dem Einschalten einen Selbsttest durch. Dabei wird auch das ROM geprüft, indem die Prüfsumme über den Bereich $6400 bis $7FFF ermittelt wird. Listing 2 dient in diesem Fall dazu, die Prüfsumme eines bereits veränderten, im Bereich von $6000 bis $7FFF stehenden ROMs anzupassen. Diese Anpassung ist natürlich nur dann notwendig, wenn eigene Veränderungen vorgenommen wurden.
Die noch verbleibenden Arbeiten sind schnell durchgeführt. Mit einem EPROM-Programmiergerät wird ein 2764-EPROM mit dem Inhalt der Speicherstellen $6000 bis $7000 gebrannt. Das neue Betriebssystem wird dann anstelle des alten in den Drucker eingesteckt (Kerbe auf Kerbe). Ob alles programmgemäß abgelaufen ist, läßt sich am einfachsten mit dem Selbsttest feststellen. Sollten Sie nun unter den vielen Zeichen tatsächlich die deutschen Umlaute finden, dann dürfen Sie sich ruhig ein kleines Päuschen genehmigen, denn Sie haben nun etwas Einzigartiges: Den MPS 802 in deutscher Version.
(Ernst Schöberl/Arnd Wängler/gk)10 poke56,96:poke55,0:clr 20 print"{clr}{down}{down}{down}mps-802-rom fuer vizawrite-deutsch":print:print 30 print "altes rom vorher in $6000-$7fff ablegen":print:print 80 print"lesen der data-zeilen":print:print 100 t=0 110 t=t+1:read a:ifa=0then240 120 read b: rem anzahl der bytes 130 read p1: rem pruefsumme 140 p2=0:print"block ";t;" "; 150 fori=atoa-1+b 160 readd:pokei,d:p2=p2+d 170 nexti 180 ifp2<>p1then210 190 print" ok" 200 goto110 210 print"pruefsumme falsch: ";p2;" statt ";p1:print 220 geta$:ifa$=""then220 230 goto110 240 print:print"fertig!":end 1000 rem **** block 1 **** 1010 data25600,8,609 1011 data0,88,165,165,165,26,0,0 1020 rem **** block 2 **** 1021 data25816,24,1852 1022 data190,80,144,144,80,190,0,0,188,66,66,66,66,188,0,0,188,2,2,2,2,188 1023 data0,0 1030 rem **** block 3 **** 1040 data 25920,8,254 1041 data56,68,130,0,0,0,0,0 1050 rem **** block 4 **** 1060 data26840,40,1897 1061 data4,170,42,170,28,2,0,0,28,162,34,162,28,0,0,0,60,130,2,132,62,0,0 1062 data0,63,64,146,146,146,108,0,0,1,1,1,1,1,1,1,1 1070 rem **** block 5 **** 1080 data26936,8,1024 1081 data128,128,128,128,128,128,128,128 1100 rem **** block 6 **** 1110 data26966,151,8055 1111 data0,255,0,0,0,255,16,16,16,16,0,0,0,0,15,15,15,15,0,0,0,240,16,16,16 1112 data16,16,16,16,31,0,0,0,0,3,3,3,3,3,3,3,3,0,0,0,31,16,16,16,16,16,16 1113 data16,240,16,16,16,16,16,16,16,31,16,16,16,16,16,16,16,255,0,0,0,0,255 1114 data0,0,0,0,0,0,0,255,255,0,0,0,0,0,0,0,0,0,0,0,0,255,255,192,192,192 1115 data192,192,192,192,192,224,224,224,224,224,224,224,224,7,7,7,7,7,7,7 1116 data7,30,4,8,16,32,64,0,0,15,15,15,15,0,0,0,0,0,0,0,0,240,240,240,240 1117 data16,16,16,240,0 1130 rem **** block 7 **** ;checksum 1140 data32763,1,107 1141 data107 10000 data0
10 poke56,96:poke55,0:clr 20 print"mps-rom in $6000-$7fff" 30 fori=12*4096toi+26:reada:pokei,a:nexti 40 sys12*4096 60 b=peek(32763):c=peek(253) 70 d=228-c:b=b+d:ifb<0thenb=b+256 75 ifb>255thenb=b-255 80 poke32763,b:print"checksum angepasst!":end 1000 data 169,0,160,128,133,251,132,252,168,162,28,24,198,252,113,251,200,208 1010 data251,202,208,246,105,0,133,253,96