Komtek 1: Verbesserter Zeichengenerator Wer seinen Komtek 1 nach den im Hardware-Sonderheft Nov.85 beschriebenen Umbauten als relativ komfortable Schreibmaschine nutzt, kann sich eigentlich nur noch an den amerikanischen Sonderzeichen, die zudem auch noch falsch sind, anstelle der deutschen Umlaute auf dem Bildschirm stören. Dieser Mißstand wird nun behoben. Voraussetzung ist, daß man jemanden kennt, der ein 2732 eprommen kann. Bei der für den Komtek 1 wegen mangelnder Hardware-Unterlagen üblichen Wühlarbeit zum Durchschauen der Schaltung stellte sich die in Abb.1 wiedergegebene Beschal- tung des 2732-Zeichengenerator-EPROMs heraus. Weitere Erkenntnisse über die Or- ganisation (Zuordnung von EPROM-Adressen und -Daten zu Bildschirmpositionen) konnten durch Herausnehmen des EPROMs, Hochbiegen und An-Masse-Legen einzelner Pins und wieder Hineinstecken des EPROMs in den Sockel, und Interpretation der veränderten Bildschirmdarstellung erhalten werden. Letzte Unsicherheiten ließen sich durch Auslesen des Inhaltes des Zeichengerators mit einem EPROMer ausräumen (für diesen Dienst an der Digitaltechnik sei Arnulf Sopp herzlichst gedankt). Wie sich die verschiedenen Beobachtungen und die Untersuchung des Hexdumps aus dem EPROM zu den folgenden Vorstellungen zusammenfügen, möchte ich mir hier darzustellen ersparen (nicht nur, weil es wohl niemanden interessiert, sondern hauptsächlich, weil ich dazu keine Lust habe). Wichtig ist nur das Ergebnis, und das rechtfertigt den Schreibaufwand. Danach ist eine Druckposition für ein Zeichen auf dem Bildschirm in 7 waagerechte und 16 senkrechte Punkte aufgeteilt (bei TRS80 und GENIE 6x12). Der Inhalt einer waagerechten Dotreihe entspricht von links nach rechts den Bits D6 bis D0 im jeweiligen Byte im Zeichengenerator. Die EPROM-Adreßeingänge A0 bis A2 adressieren dabei eine von 8 Dotreihen (8 aufeinanderfolgende Bytes im EPROM) in entweder der oberen oder der unteren Hälfte einer Druckposition während durch den Adreßeingang A11 vorgegeben ist, welche Hälfte angesteuert wird. An die Adreßeingänge A3 bis A10 sind die Daten D0 bis D7 des Video-RAMs geführt, Ensprechend dem ASCII-Code 00-FF liegen also hintereinander in den unteren 2K des EPROM-Adreßbereichs 256 Gruppen von je 8 Bytes, die dem Bildschirminhalt der oberen Hälfte einer Druckposition entsprechen. Analog sind die Informationen für die untere Hälfte einer Druckposition mit einem Offset von 2048 Adressen in den oberen 2K des EPROMs abgelegt. Zur Darstellung von Zeichen mit ASCII-Codes bis 7FH wird dabei nur die obere Hälfte einer Druckposition genutzt. Die meisten Zeichen werden innerhalb einer 5x7-Matrix dargestellt. Die untere der 8 waagerechten und 2 seitliche senkrechte Dotreihen werden nicht genutzt. Nur bei Unterlängen wird auch die 8. waagerechte Reihe mitbenutzt. Da diese aber für eine echte Unterlänge nicht ausreicht, werden Zeichen wie "g" und "p" einfach hochgeschoben. Die unteren Hälften der Druckpositionen werden nur bei den Pixelgraphikzeichen (ASCII-Codes größer 7FH) benutzt. Da die Teilung der 16 wagerechten Dotzeilen durch 3 und die der 7 senkrechten durch 2 keine ganzzahligen Werte ergibt, mußte hingenommen werden, daß die Blockgraphik entsprechend ungleichmäßig aussieht. Die Blockgraphik war aber leztendlich nicht Gegenstand der Kritik sondern der Satz der Zeichen mit ASCII-Codes bis 7FH. Es ist nicht einzusehen, warum diese Zeichen nicht auch die untere Hälfte der Druckposition mitbenutzen sollen. Es muß nicht sein, daß ein Buchstabe an einem Graphikzeichen in der Zeile darüber festklebt. Dafür müssen nur alle Zeichen um 2 Dotzeilen in der Matrix nach unten geschoben werden, d.h. im EPROM müssen alle Bytes in eine um 2 höhere Adresse verschoben werden. Innerhalb der 8 Bytes für ein Zeichen wird das erste Byte in die Adresse des 3. Bytes, das 2. Byte in die Adresse des 4. Bytes u.s.w. verschoben. Die freigewordenen ersten beiden Bytes werden mit 00H aufgefüllt. Das 7. und 8. Byte werden aber nicht einfach um zwei Adressen verschoben, sondern um 2048-8 Adressen, damit sie nicht in die ersten beiden Bytes des nächsten Zeichens sondern in die oberen 2 Dotzeilen der unteren Hälfte der Druckposition des gleichen Zeichens gelangen. Diese Prozedur wird allerdings nur mit dem Adreßbereich 0-1K (und 2-3K) durchgeführt, weil die in den anderer 2K des EPROMs untergebrachten Informationen die der Blockgrahik-Zeichen sind. Damit sind die Zeichen zwar alle von der Zeile darüber abgerückt worden, hübscher sind sie dadurch noch nicht geworden. Deshalb müssen die Zeichen für die Umlaute, die Zeichen mit Unterlängen und alle sonstigen unschönen Gebilde neu gestaltet werden. Das ist aber eine enorme Arbeit, die zu verrichten bei Bestehen eines brauchbaren Zeichensatzes (z.B. der des GENIE) nicht ganz einzusehen ist. Der Zeichensatz im GENIE ist aber etwas anders organisiert. Erstens werden die Grafikzeichen nicht über den Zeichengenerator sondern per Hardware erzeugt, weshalb man dort mit einem 2716-EPROM auskommt. Zweitens wird ein Zeichen durch 16 aufeinanderfolgende Bytes im EPROM dargestellt, wovon nur die ersten 12 Bytes (entsprechend 12 Dotreihen pro Druckposition) benutzt werden. Und drittens ist die Zuordnung der Bits eines Bytes im Zeichengenerator zu den Dots einer Dotreihe genau umgekehrt, d.h. die niederwertigen Bits representieren die linken Dots in der Reihe, was beim Komtek ungekehrt ist. Da mir bekannt war, daß Arnulf Sopp schon einen verbesserten Zeichensatz für den GENIE erstellt hat, der alle Zeichen um 2 Dots herunterrückt und die Großbuchstaben Ä, Ö und Ü auch tatsächlich als Großbuchstaben erscheinen läßt, und ich nicht nur zu bequem bin sondern auch Respekt vor den Fähigkeiten anderer, die das bedeutend besser können, habe, schmarotzte ich einfach von Arnulfs Arbeit und bat ihn, mir seinen Zeichensatz in den des Komtek einzumassieren. Das ist ihm mit der beiliegenden eleganten Soppftware auch hervorragend gelungen. Nur einen Haken hat das ganze Projekt. Arnulfs Zeichensatz sieht für die ASCII- Codes 00-1F nicht die für den GENIE üblichen fernöstlichen Gebilde sondern die diesen Codes entsprechenden Hexzahlen vor. Die werden, wenn im GENIE eine ent- sprechende Änderung vorgenommem wird, dann auch im Bildschirm dargestellt, wenn eine Zahl zwischen 00 und 1F in den Bildwiederholseicher gepoked wird. Beim Komtek ist eine entsprechende Änderung nicht möglich, bzw. ich habe sie noch nicht herausgefunden. Deshalb erscheinen beim Arbeiten im Level-II-Basic, das anstelle der ASCII-Codes 40-5F die Codes 00-1F an den Bildwiederholspeicher ausgibt, dort anstelle der Großbuchstaben die Arnu1f'schen übereinander gestellten Hexzahlen auf dem Bildschirm. Im DOS und Disk-Basic ist dies nicht mehr der Fall. Um im Level-II-Basic auch erkennbare Zeichen auf dem Bildschirm zu haben, müßten deshalb anstelle der ansonsten sehr informativen Hexzahlen für die ASCII-Codes 00-1F lieber die Zeichen mit den ASCII-Codes 4O-5F verwendet werden. Für Bastler, die wegen häuiger Hardware-Eingriffe gelegentlich auf ihre Floppy-Laufwerke verzichten müssen und dann für Testzwecke auf Level-II-Basic angewiesen sind, kann das doch von Bedeutung sein. Helmut Bernhardt Und hier Arnufs Soppftwärechen 5200 0001 ORG 5200h 0002 5200 2100A0 0003 start LD HL,0a000h ;ab hier Komtek-Zeichensatz 5203 110080 0004 LD DE,8000h ;ab hier GENIE-Zeichensatz 5206 06B0 0005 LD B,80h ;128 Zeichen mit 16 Bytes 5208 C5 0006 loop1 PUSH BC ;Zähler retten 5209 0608 0007 LD B,8 ;Zähler 8 Bytes(1/2 Zeile) 520B CD2452 0008 loop2 CALL modify ;Komtek-Zeichensatz verändern 520E 10FB 0009 DJNZ loop2 ;8 von 16 Bytes 5210 01F807 0010 LD BC,07f8h ;untere Hälfte des Zeichensatz 5213 09 0011 ADD HL,BC ;Adresse untere Hälfte 5214 04 0012 INC B ;B <- Zähler 8 Bytes 5215 CD2452 0013 loop3 CALL modify ;untere Hälfte modifizieren 4218 10FB 0014 DJNZ loop3 ;8 Bytes der unteren Hälfte 521A B7 0015 OR A ;Cy löschen 521B 010008 0016 LD BC,0800h ;jetzt 2K tiefer 521E ED42 0017 SBC HL,BC ;neue Komtek-Adresse 5220 C1 0018 POP BC ;Zähler 128*16 5221 10E5 0019 DJNZ loop1 ;bis 128 Zeichen fertig 5223 C9 0020 RET ;ins Betriebssystem 0021 5224 C5 0022 modify PUSH BC ;Bytezähler retten 5225 0608 0023 LD B,8 ;8 Bit pro Byte 5227 1A 0024 LD A,(DE) ;GENIE-Byte 5228 07 0025 loop4 RLCA ;zur Spiegelung 5229 CB19 0026 RR C ;Byte rotieren 522B 10FB 0027 DJNZ loop4 ;bis ein Byte gespiegelt 522D 71 0028 LD (HL),C ;neues Komtek-Zeichen 522E 23 0029 INC HL ;nächste Komtek-Stelle 522F 13 0030 INC DE ;nächste GENIE-Stelle 5230 C1 0031 POP BC ;Bytezähler restaurieren 5231 C9 0032 RET ;ins Hauptprogramm 0033 5200 0034 END start ;dort Einsprung