80 Zeichen/Zeile

Ch. Schiewe hat in der mp 6/1990 eine Schaltung vorgestellt, mit der der Z9001 80 Zeichen in jeder Zeile darstellen kann.

Das Bildschirmformat 24×80 hat sich als Standard für CP/M in der Computertechnik durchgesetzt. Es ermöglicht u.a. die Anwendung von leistungsfähigen Textverarbeitungsprogrammen (zum Beispiel Wordstar).

Der Umbau des Z9001 ist recht einfach. Benötigt werden lediglich vier zusätzliche Schaltkreise und natürlich zusätzliche Bildwiederholspeicher-RAMs.

Damit in der gleichen Zeiteinheit die doppelte Anzahl von Zeichen aus dem Bildwiederholspeicher ausgelesen werden kann, ist als eine Verdopplung der Grundtaktfrequenz erforderlich. Der Bildwiederholspeicher EC00-EFFF wird doppelt ausgeführt, über ein Umschaltsignal (OUT CS1 bzw. OUT CS2) werden die beiden Speicherebenen angesprochen. Speicherebene 1 enthält die Zeichen der Spalten 0,2,4,.. Speicherebene 2 enthält die Zeichen der Spalten 1,3,5,… Ein weiteres Umschaltsignal erlaubt das Umschalten zwischen originalem 40-Zeichen-Modus (dann ist nur Speicherebene 1 aktiv), und dem 80-Zeichen-Modus.

Ein neuer CRT-Treiber CRT80 übernimmt unter CP/M die Ansteuerung der Hardware.

:!: Von U.Zander kommt eine kombinierte Hardware, die diesen 80-Zeichen-Modus und die KRT-Grafik auf einer Platine vereint! → http://www.sax.de/~zander/z9001/ex/80z.html

:!: Wird der Farbspeicher E800-EBFF nicht auch doppelt ausgeführt, gelten die Farbattribute immer für 2 nebeneinanderliegende Zeichen (d.h. für beide Speicherebenen).

Der CRT-Treiber wird unter CPM mit CRT82 geladen. (die originale Version heißt CRT80, U. Zander hat seine Version CRT81 genannt, deshalb hier CRT82). CRT82 wurde von mir gegenüber der originalen Version auf die Hardware nach U. Zander angepasst (andere Port-Adressen) und erweitert (andere Umlautcodierung, zusätzliche ESc-Kommandos).

Zur Nutzung des Treibers wird ein 64K-RAM-Modul zwingend benötigt. Der Treiber selbst kopiert sich in den Shadow-RAM des 64K-Moduls (7000h-73FFh).

spezielle Funktionen:

^O statt der Klammern werden Umlaute ausgebenen (EPSON-kompatible Belegung der Zeichen)
^N Zurückschalten auf Klammernausgabe

ESC-Funktionen kompatibel zu CP/A (z.B. PC1715):

; der Treiber realisiert ein SCP kompatibles Terminal
; - Realisierung der SCP1715-Steuerzeichen 1b 5e xx (Feldattribut) und 1b 5f xx (Spezialzeichen)
;   Andere ESC-Folgen führen i.a. auf '^' (unzulaessig),
;   ausser Feldattribute invers und hell (Reaktion wie Steuerz. 84..87)
; - Umlaut-Umkodierung fuer deutschen Zeichensatz wie SCP1715-Steuerzeichen 0Eh und 0Fh
;   d.h. Umlaute werden nach Umschalten auf Deutsch auf den Zeichen {|}[\]~ ausgegeben.
;	00h	;nop
;	01h	;home
;	02h	;(auch 82h) cursor an
;	03h	;(auch 83h) cursor aus
;	04h	;(auch 84h) normal, nicht inv.	grün auf schwarz
;	05h	;(auch 85h) normal,       inv.	schwarz auf grün
;	06h	;(auch 86h) hell  , nicht inv.	gelb auf schwarz
;		(nur  87h) hell  ,       inv.
;	07h	;bell (akustisches zeichen)
;	08h	;cursor zurueck
;	0ah	;LF
;	0bh	;cursor hoch (nur CRT82)
;	0ch	;bs loeschen, cursor links oben
;	0dh	;CR
;	0eh	;umschalten auf 2. Zeichensatz
;	0fh	;umschalten auf 1. Zeichensatz
;	14h	;rest bs loeschen
;	15h	;cursor vorwaerts
;	16h	;rest der zeile loeschen
;	18h	;zeile loeschen, cursor an zeilanf.
;	1ah	;eine zeile hoch
;	1bh	;escape
;	1b zeile+80h spalte+80h		Kursor posit. SCP
;	1b zeile+00h spalte+00h		geht auch bei CP/A
;	1b 5e xx	Feldattribut setzen
;		mit xx= 01urggbh
;			  u		unterstreichen,
;			   r		invers (* wird unterstützt),
;			    gg		Zeichengenerator-Umschaltung,
;			      b		blinken,
;			       h	heller (* wird unterstützt)
;	1b 5f xx	Spezialzeichen setzen
;		mit xx= 01ssssbh
;			  ssss		Zeichencode (1100 Sonderfkt)
;			      b		blinken des Sonderzeichens
;			       h	heller des Sonderzeichens
;	1ch	;Farbbefehl
;    	1c 40h+Farbe 			Randfarbe
;    	1c 10h+Farbe 			Hintergrundfarbe
;    	1c 20h+Farbe 			Vordergrundfarbe
;		+80h				blinkend
; 		0 schwarz
; 		1 rot
; 		2 grün
; 		3 gelb
; 		4 blau
; 		5 purpur (violett)
; 		6 cyan (hellblau)
; 		7 weiss
;	7fh	;delete
;	87h	;(nicht 07h) hell  ,      inv.

Beispiel: Ausgabe der farbigen Startmeldung (s.o. Bild):

	db 	0Ch			; cls
	db	ESC,27h			; Vordergrund weiss
	db	0Fh			; deutscher ZS
	db	ESC,14h,"    80 Zeichentreiber f}r "	; Hintergrund blau
	db	ESC,023h+80h,"KC87"	; blinkend, Vordergrund gelb
	db	ESC,27h," installiert "	; Vordergrund weiss
	db	ESC,20h,ESC,11h		; Vordergrund scharz, Hintergrund rot
	db	" von Chr. Schiewe am 27.12.1989 !    ",7,7,7
	db	ESC,17h,0Dh,0Ah," Farben : "	; Hintergrund weiss
	db	ESC,11h,"          "	; Hintergrund rot
	db	ESC,12h,"          "	; Hintergrund grün
	db	ESC,13h,"          "	; Hintergrund gelb
	db	ESC,14h,"          "	; Hintergrund blau
	db	ESC,15h,"          "	; Hintergrund purpur
	db	ESC,16h,"          "	; Hintergrund cyan
	db	ESC,17h,"          "	; Hintergrund weiss
	db	ESC,10h,ESC,22h		; Hintergrund scharz, Vordergrund grün
	db	0Dh,0Ah,0Dh,0Ah		;
	db 	"^O -> deutscher Zeichensatz: { } | [ ] \\ ~",0Dh,0Ah
	db 	0Eh,"^N -> normaler  Zeichensatz: { } | [ ] \\ ~",0Dh,0Ah,"$"

Für eine gut lesbare Darstellung der nun halb so breiten Zeichen und natürlich für Umlaute ist ein neuer Zeichensatz sinnvoll. Hier empfiehlt sich der IBM-CGA-Zeichensatz, wie er in der mp vorgestellt wurde.

CGA-Zeichensatz

Unter CP/M-80-Zeichen werden wohl keine Z9001-Grafik-Programme zum Einsatz kommen, die die Grafikzeichen des Z9001 nutzen. Damit kann der Zeichensatz für die 80-Zeichen-Hardware komplett IBM-kompatibel gelassen werden; incl. aller Umlaute, Sonderzeichen, Rahmenzeichen etc. Alle CP/M-Programme von anderen Rechnern, die den gleichen Zeichensatz nutzen, wie z.B. PC1715, laufen damit unverändert.

In Wordstar können dadurch gleichzeitig Umlaute und die Klammern verwendet werden!
Dokumente, die die EPSON-Kodierung für Umlaute nutzen, können durch Umschalten auf Umlautdarstellung mit ^O ebenfalls lesbar gemacht werden.

Port Bedeutung
BB Zeichensatz umschalten (Z9001 ↔ CGA)
BC 40-Zeichen-Modus an (Z9001)
BD 80-Zeichen-Modus an
BE Speicherebene 1 aktivieren
BF Speicherebene 2 aktivieren

Durch Ausgabe eines beliebigen Wertes auf den jeweiligen Port wird die Funktion aktiviert.