###   Projekte und Informationen rund um den KC85   ### 

ZAS - Version 1.1

von Mario Leubner

Für alle Anhänger von ZAS habe ich eine Weiterentwicklung vorgenommen, die nachfolgend beschrieben werden soll:

  • Teilweise wurde beklagt, daß der Druckertreiber unter ZAS nicht richtig arbeitet. Da dies nur nach einem Warmstart mit dem CAOS-Menüwort 'QUIT' auftreten kann, wird jetzt der Drucker- und Koppeltreiber bei deiser Bedienhandlung neu initialisiert. (CALL 200H und CALL 380H)
  • Die Funktion zum Löschen bis Bildschirmende (Steuercode 14H) funktionierte leider noch nicht richtig, am rechten BS-Rand blieben 2 Zeichen stehen. Der Fehler ist jetzt behoben.
  • Für alle, die nicht ständig mit ZAS arbeiten wollen, gibt es jetzt die Option /OFF beim Aufruf. Das Kommando "ZAS /OFF" testet das Vorhandensein des Original-D004-EPROM und lädt bei erfolgreichem Test die alte Steuerschleife aus dem EPROM. Mit Original-EPROM ist dabei die Version 2.1 gemeint, von anderen EPROM's ist kein Inhalt bekannt.
  • Das Laden von ZAS verändert den bereits eingestellten Zeichensatz nicht mehr.
  • Die Routinen zum Zugriff auf das RAM-Floppy wurden effizienter programmiert, wodurch ein noch schnellerer Zugriff erreicht werden konnte.
  • Wegen geplanter Erweiterungen ist der ohnehin bisher noch nicht (?) genutzte IBM-Zeichensatz im 40-Zeichenmodus nur noch mit CAOS4.3 verfügbar. Der gesamte Adreßbereich von 400H bis 2000H ist für ZAS reserviert, siehe dazu auch Diskussion in den letzten KC-News!

Beschreibung der Televideo-Emulation für KC-MicroDOS

TVI912.ZAS ist eines ZAS-kompatibler Terminaltreiber für den CAOS-Adreßbereich ab 400h. Ebenso wie alle anderen ZAS-Versionen kann TVI912.ZAS mit MSYSG2.COM auf der Systemdiskette installiert werden oder mit LADE.COM nachgeladen werden. TVI912.ZAS ist der erste Versuch einer Televideo-Emulation auf dem KC85/4.

Zu beachten ist jedoch, daß bei aktiver Televideo-Emulation ein nochmaliges Laden von Treibern nicht möglich ist, da die KC-spezifischen Routinen nicht mehr zur Verfügung stehen!

Ist während der Televideo-Emulation noch ein anderer Treiber im Grundgerät erforderlich, so ist MicroDOS mit einer KC-üblichen Steuerschleife zu starten, danach die Treiber und zum Schluß TVI912 aktivieren. Eine INITIAL.SUB-Datei könnte folgenden Inhalt haben:

; Start MicroDOS mit INITIAL.SUB-Datei
B:
KEYLOAD POWER.KEY
;lädt F-Tasten
LADE LQ100.LST
;lädt Druckertreiber
DRUCK
;spezielle Hardcopy-Routine
LADE TVI912.ZAS
;lädt Televideo-Emulation
TVIPROG
;Startet Programm

TVI912.ZAS emuliert Televideo-Terminals mit einem Funktionsumfang, der mindestens Televideo 912 oder 920 entsprechen müßte. Eine genaue Kenntnis, welche Funktionen bei welchem Televideo-Standard vorliegen müssen, habe ich leider nicht.

Was kann TVI912 und was kann es nicht? Es gibt mit TVI912.ZAS keinen direkten Zugriff auf den Speicher des KC-Grundgerätes mehr (Bytes lesen/schreiben, UP's aufrufen...), keine Grafikfunktionen (Linien, Punkte, Kreise...) und keinen 40-Zeichenmodus. Dafür werden einige neue Funktionen unterstützt.

Zeichenausgabe erfolgt im erweiterten ASCII-Zeichensatz, 20H bis 7EH für die normalen Zeichen und 80H bis FFH für den erweiterten IBM-Grafikzeichensatz. Inwieweit Televideo die IBM-Grafikzeichen unterstützt, ist mir ebenfalls nicht bekannt.

In der folgenden Übersicht sind alle Funktionen genau erklärt:

Beep ^G 07h
Ausgabe eines kurzen Tones. Die Syntax der Televideo-Funktion SetSound (ESC-ä) ist mir leider nicht bekannt. Eine Einbindung dürfte jedoch keine Probleme bereiten.
 
CursorLeft ^H 08h
Cursor bewegt sich um eine Position nach links. Befindet sich der Cursor bereits am Zeilenanfang, so bewegt er sich zum rechten Rand der vorigen Zeile. Befindet er sich in der linken oberen Ecke findet keine Cursorbewegung statt (der Code wird ignoriert).
 
HorizontalTab ^I 09h
Vorwärtsbewegen des Cursors bis zur nächsten Tabulatorposition. Tabulatoren befinden sich auf jeder 8. Spalte. Steht der Cursor bereits auf oder hinter dem letzten Tabulator einer Zeile, bewegt er sich zum Anfang der nächsten Zeile, wobei unter Umständen der Bildschirminhalt um eine Zeile nach oben scrollt.
 
LineFeed ^J 0ah
Abwärtsbewegen des Cursors um eine Zeile. Befindet er sich bereits in der letzten Zeile, so scrollt der Bildinhalt eine Zeile nach oben und der Cursor befindet sich am Anfang der letzten Bildschirmzeile.
 
CursorUp ^K 0bh
Cursor bewegt sich um eine Zeile nach oben. Befindet er sich bereits in der obersten Zeile, wird der Code ignoriert.
 
CursorRight ^L 0ch
Bewegt Cursor um eine Position nach rechts. Überschreitet er dabei den rechten Bildschirmrand, beginnt er die nächste Zeile von vorne, wobei gescrollt wird, falls er in der letzten Zeile stand.
 
CarrigeReturn ^M 0dh
Cursor bewegt sich bis zum Anfang der Zeile zurück, in welcher er sich befindet. Der Zeileninhalt bleibt unverändert.
 
CursorDown ^V 16h
Cursor bewegt sich eine Zeile nach unten. Entspricht dem LF-Code, wobei allerdings nicht gescrollt wird. Befindet sich der Cursor in der letzten Zeile, wird der Befehl ignoriert.
 
ClearScr ^Z 1ah
Bildschirm löschen, Cursor befindet sich anschließend in der linken oberen Ecke.
 
EscapeCodes ^Ä 1bh
Verzweigt zu den 'richtigen' Funktionen.
 
Scroll ^Ö 1ch
Bildschirm scrollt um eine Zeile nach oben, wenn die unterste Zeile überschritten wurde.
 
Page ^Ü 1dh
Bildschirm scrollt nicht, wenn die unterste Zeile überschritten wurde. Der Cursor wird stattdessen wieder in die linke obere Position gesetzt ohne den Bildschirm zu Löschen.
 
Home ^^ 1eh
Cursor in linke obere Ecke positionieren.
 
BackSpace DEL 7fh
Obwohl in meiner Beschreibung der Televideo-Steuerzeichen nicht enthalten, habe ich diesen Befehl beibehalten. Der Cursor bewegt sich dabei um eine Position nach links und es wird ein Leerzeichen an dieser Stelle ausgegeben. Befindet sich der Cursor bereits am Zeilenanfang, so bewegt er sich zum rechten Rand der vorigen Zeile. Befindet er sich in der linken oberen Ecke wird der Code ignoriert.
 
SetBright ESC ( 1bh 28h
Umschalten von halber auf normale Leuchtstärke, ist auf dem KC85/4 nicht realisierbar. Einzige Möglichkeit wäre die konsequente Nutzung des HIRES-Modus. Dann könnte für halbe und normale Leuchtstärke je eine andere Farbe gewählt werden. Nachteilig an dieser Methode wäre jedoch, daß alle Bildschirmausgaben (einschließlich Scrolling) beide IRM-Ebenen beschreiben müßten, was eine Verdopplung der Zeitdauer bei allen Anzeigen zur Folge hat.
 
SetDim ESC ) 1bh 29h
Umschalten von normaler auf halbe Leuchtstärke - nicht implementiert, siehe SetBright.
 
ClearScr ESC * 1bh 2ah
ESC + 1bh 2bh
ESC , 1bh 2ch
ESC : 1bh 3ah
ESC ; 1bh 3bh
Bildschirmlöschen, siehe auch ^Z. Warum diese Funktion so viele Male definiert ist, kann ich nicht sagen. Vermutlich benutzt jede Televideo-Version seinen eigenen Code - um kompatibel zu bleiben sind dann alle anderen Codes ebenfalls enthalten.
 
CursorAttr ESC . n 1bh 2eh nnh
Setzt die Cursorattribute. Der mit n anzugebende Parameter hat folgende Bedeutung:

'0' = schaltet den Cursor ab
'1' = blinkender Block als Cursor
'2' = stehender Block als Cursor
'3' = blinkender Stichcursor
'4' = stehender Strichcursor
 
SetCursorPos ESC = y x 1bh 3dh yyh xxh
Cursor frei positionieren. Die Parameter y (Zeilen 0-23) und x (Spalte 0-79) müssen mit einem Offset von 20h (32 dezimal) angegeben werden.
 
ScrPeek ESC ? 1bh 3fh
Abfrage der augenblicklichen Cursorposition. Über die Art der Übergabe der Parameter bin ich mir noch nicht im Klaren, so daß die Funktion noch nicht enthalten ist.
 
LineInsert ESC E 1bh 45h
Alle Zeichen ab der Cursor-Zeile abwärts (diese eingeschlossen) werden um eine Zeile nach unten verschoben. In der Zeile, in der sich der Cursor befindet, wird eine Leerzeile eingeschoben. Der Cursor befindet sich anschließend am Anfang der Leerzeile.
 
SetAttributes ESC G p 1bh Gh pph
Setzen der Video-Attribute. Alle folgenden Bildschirmausgaben werden auf diese eingestellten Werte zurückgreifen. Für jede Funktion ist ein Bit vorgesehen - ist das Bit gesetzt, wird die Funktion aktiviert. Die Attribute können auch kombiniert werden.

Format:
Bit 0 Blank (jedes Zeichen wird als Leerzeichen ausgegeben)
Bit 1 Blink (auf dem KC nicht realisiert)
Bit 2 Invers (Pixelmuster wird invertiert)
Bit 3 Underline (Unterste Pixelzeile des 10*4 Zeichenfeldes wird gesetzt)

Sinnvolle Kombinationen sind:
ESC G 00 Normalanzeige
ESC G 02 Keine Anzeige (z.B. für Paßworteingaben)
ESC G 04 Inversdarstellung
ESC G 08 Unterstreichen ein
ESC G 0c Unterstreichen und Inversdarstellung
 
BackTab ESC I 1bh 49h
Bewegt den Cursor rückwärts bis zur nächsten Tabulator-Position. Befindet sich der Cursor am Zeilenanfang, wird er auf den letzten Tabulator der vorigen Zeile gesetzt. Befindet er sich in der Home-Position wird der Befehl ignoriert.
 
CharInsert ESC Q 1bh 51h
An der augenblicklichen Cursor-Position wird ein Leerzeichen eingefügt. Alle rechts davon befindlichen Zeichen werden um eine Stelle nach rechts verschoben, das Zeichen auf der letzten Position der Zeile geht dabei verloren. Der Cursor befindet sich anschließend auf dem erzeugten Leerzeichen.
 
LineDelete ESC R 1bh 52h
Der Befehl löscht die aktuelle Cursor-Zeile und rückt alle weiteren Zeilen von unten auf. Der Cursor befindet sich am Anfang der gelöschten bzw. der ersten nachgerückten Zeile.
 
EraseEndLine ESC T 1bh 54h
ESC t 1bh 74h
Die Zeile wird ab der Cursorposition - einschließlich dieser - bis zum Ende gelöscht. Der restliche Bildinhalt und die Cursorposition bleiben unverändert.
 
CharDelete ESC W 1bh 57h
Das Zeichen an der augenblicklichen Cursor-Position wird gelöscht. Alle rechts davon befindlichen Zeichen der Zeile rücken um eine Stelle nach links. Die Position des Cursors bleibt unverändert.
 
EraseEndScreen ESC Y 1bh 59h
ESC y 1bh 79h
Der Bildschirm wird ab der Cursor-Position - einschließlich dieser - bis zur unteren rechten Ecke gelöscht. Die Cursor-Position ändert sich nicht.
 
Keylist ESC Ä d 1bh 5bh ddh
Diese Routine aus der KC-Steuerschleife leicht abgeändert und gestattet weiterhin die Verwendung der Funktion KEYLIST des CCP-Kommandos '2'. Der Parameter 'd' ist ein Dummy, unabhängig von dessen Wert wird nur die Funktion KEYLIST erreicht.
 
EXIT ESC Ö 1bh 5ch
Diese Routine aus der KC-Steuerschleife ist vorerst noch enthalten und ermöglicht weiterhin die Funktion EXIT des CCP-Kommandos '0'.
 
Revers ESC b 1bh 62h
Umschalten des gesamten Bildschirms auf Revers-Darstellung, also dunkle Schriftzeichen auf hellem Grund. Bewirkt beim KC85/4 eine Einfärbung des gesamten Bildschirms mit der Farbe Schwarz auf Türkis.
 
Normal ESC d 1bh 64h
Umschalten des gesamten Bildschirms auf normale Darstellung von hellen Schriftzeichen auf dunklem Grund. Bewirkt beim KC85/4 die Standardeinstellung weiß auf blau.
 
FunctionKey ESC e f 1bh 65h ffh
Diese Routine aus der KC-Steuerschleife ist vorerst noch enthalten und ermöglicht weiterhin die Funktion KEY des CCP-Kommandos '3'.
 
SetNational ESC z n 1bh 7ah nnh
Auswahl eines Zeichensatzes zur Sonderzeichendarstellung. Man kann unter 8 Zeichensätzen wählen. 'n' enthält Werte von '0' bis '7', die in dieser Reihenfolge folgenden Zeichensätzen entsprechen: USA, Frankreich, Deutschland, England, Dänemark, Schweden, Italien und Spanien. Beim Booten ist automatisch der deutsche Zeichensatz eingestellt.
 
SetSound ESC ä ???
Syntax unbekannt - nicht implementiert.

Spezielle Hinweise zur Nutzung am KC

  • Die Tastaturtabelle entspricht dem Computermodus. COMPUMOD.COM und TYPEMOD.COM sind nicht verwendbar.
  • Einige Tasten in der Control-Ebene wurden in der Funktion geringfügig verändert: F1 + '3' löscht den Bildschirm F1 + '6' keine Funktion F1 + '9' wechselt den nationalen Zeichensatz 0...7
  • Die Speicherzellen KTABAD, BSSTAT, ESCTAB und VERSION werden soweit dies möglich ist aktuell gehalten. Bit 1 von BSSTAT wird nur bei deutschem Zeichensatz gesetzt. Als Version wird 0.1 gemeldet. ESCTAB enthält die Adresse von ESC-A, daraus kann wie gewohnt das Ende der Steuerschleife berechnet werden.
  • Mit dem Kommando '0' gelangt man zum CAOS, das Menüwort 'QUIT' führt von dort wieder zu MicroDOS und der TVI-Emulation.
  • Das Kommando '1' löscht nicht mehr den Bildschirm, da der Code 0ch nur den Cursor nach rechts bewegt. (F1 + '3' verwenden)