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

