CAOS3.1 - CAOS4.2 und deren Kompatibilität

von Mario Leubner

Ich habe jetzt die vollständigen Quelltexte der Betriebssysteme CAOS3.1, CAOS4.1, CAOS4.2 und CAOS4.3 (ohne den BASIC-ROM) vorliegen. Interessenten können sich gern bei mir melden und die Quelltexte beziehen.

Als Betriebssystemorganisator möchte ich an dieser Stelle mal ein paar Hinweise für alle Programmierer geben, die Assemblerprogramme für das Betriebssystem CAOS schreiben. Hintergrund war die Tatsache, daß Programme, die angeblich auf dem KC85/3 und dem KC85/4 lauffähig sein sollten, dann doch auf beiden Rechnern unterschiedliche Reaktionen erzeugen.

Nicht zuletzt sind auch Programme von mir davon betroffen. Hauptproblem war immer wieder, daß jeder meist nur einen Rechnertyp zur Verfügung hat auf dem er sein Programm getestet hat und die Unterschiede nirgends zu erfahren waren. Dabei ist es bei Kenntnis und Beachtung der Besonderheiten möglich, Programme zu schreiben, die auf dem KC85/3 und dem KC85/4 laufen.

Der Unterschied in der Hardware, vor allem im IRM-Aufbau der beiden Rechner dürfte eigentlich bekannt sein, ich möchte aber trotzdem damit beginnen:

Der KC85/3 besitzt einen RAM0, IRM, BASIC-ROM und CAOS-ROME. Der IRM ist in Pixel-RAM (8000H-A7FFH), COLOR-RAM (A800H-B1FFH) und VIDEO-RAM (B200H-B6FFH) unterteilt, ab B700H folgen die System-Arbeitszellen. Der Bereich von BA00H bis BFFFH ist frei nutzbar. Häufig stehen dort z.B. Treiberprogramme für Drucker oder Diskette. Alle Speicherbereiche sind normalerweise zugeschalten.

Beim KC85/4 kommt ein RAM4, RAM8 in 2 Ebenen, IRM in 4 Ebenen und der CAOS-ROMC hinzu. Der entscheidende Hardwareunterschied ist natürlich der völlig andere IRM-Aufbau des KC85/4. Für den Pixel- und Color-RAM sind zwei identische RAM-Ebenen (8000H-A7FFH) vorhanden. Dazu kommt noch, daß zwei unabhängige Bilder zur Verfügung stehen und ein HIRES-Modus eingestellt werden kann.

Der VIDEO-RAM liegt von B200H-B6FFH für Bild-0 und von AD00H-B1FFH für Bild-1. Im Bereich A800 bis ACFFH liegen weitere Arbeitszellen, z. B. die Init-Tabellen für die V.24-Software. Zugeschalten sind normalerweise der RAM0, RAM4, eine RAM8-Ebene, der IRM und der CAOS-ROME. Der BASIC-ROM und der CAOS-ROMC wird nur bei Bedarf eingeblendet. Um auf den RAM8 zugreifen zu können, muß der IRM ausgeschaltet werden.

Programme, die auf beiden Rechnern laufen sollen, dürfen den IRM nicht direkt beschreiben, oder zumindest rechnerabhängig verzweigen. Aber es gibt noch weitere Unterschiede, die beachtet werden sollten:

Programmstart über Menüworte

Beim KC85/3 ist der BASIC-ROM in der Regel eingeblendet. Soll im Bereich ab C000H z.B. ein RAM-Modul eingeblendet werden, ist der BASIC-ROM vorher abzuschalten. Den Menüworten werden die Argumente ARG1 in HL, ARG2 in DE und ARG3 in BC übergeben. Nur beim KC85/4 wird ARGN in Register A übergeben, wird dies beim KC85/3 benötigt, ist der Befehl LD A,(ARGN) zu schreiben.

IX-Arbeitsbereich

IX+1
KC85/3 - intern von der Kassettenroutine benutzt.
KC85/4 - Merker für Ausgabeport 84H.
IX+4
KC85/3 - intern von der Kassettenroutine benutzt.
KC85/4 - Merker für Ausgabeport 86H
IX+7
KC85/3 - Bit 5 und 6 sind RESET-Schutzbits, die bei einem Abbruch mit der RESET-Taste den gesamten RAM löschen.
KC85/4 - systemintern benutzt.

Interrupttabelle

Beim KC85/4 ist auf 01E2H bereits eine Interruptroutine für SIO- Interrupt eingetragen. Die für den Anwender freien Arbeitszellen sind nur noch von 01D4H bis 01E2H.

IRM-Arbeitszellen

B7B0H
Unterprogrammtabelle SUTAB
Beim KC85/4 4 Byte länger, da für V.24-Software zwei neue Unterprogramme eingeführt wurden.
B7B2H
"Tabelle des Stammcodes für das Bildschirmprogramm"
Mit dieser Definition in den Systemhandbüchern der KC85/3 und KC85/4 kann wohl niemand etwas anfangen. Es ist auch besser man läßt die Werte dieser Speicherzelle unverändert, denn es gibt grundlegende Unterschiede!
KC85/3 - Die Tabelle besteht aus 18 Bytes, die die definierten BS- Steuerzeichen enthalten. Die zugehörige Sprungtabelle steht im ROM und kann nicht verändert werden.
KC85/4 - Tabelle mit 32 Sprungadressen für die BS-Steuerzeichen für die Codes 00H bis 1FH.
B7CBH
Beim KC85/4 steht dort die Anfangsadresse des Video-RAM.
Programme, die auf beiden Rechnertypen laufen sollen, dürfen weder diese Speicherzelle benutzen noch B200H fest annehmen. Das UP DABR (32H) ist dazu da, die korrekte VRAM-Adresse zu erfragen.
B7DDH-B7E8H
Die Arbeitszellen, der V.24- und ESC-Programme sind nur beim KC85/4 vorhanden.
B7E9H-B7EFH
erst ab CAOS4.3 verfügbar, siehe dazu CAOS43.TXW.
B7F0H-B7FFH
reserviert für Maus-Software ab CAOS4.?

BS-Steuerzeichen

16H
CAPS-Funktion beim KC85/3 über BS-Steuerzeichen erreichbar, wirkt deshalb nur in der KDB-Routine. Beim KC85/4 wird CAPS bereits vom Tastatur-Interrupt behandelt und ist deshalb in der CRT-Routine nicht definiert.
18H
Der KC85/3 unterstützt die Funktion "Cursor zum Zeilenende" nur in BASIC.
1BH
ESC-Funktion erst bei KC85/4 unterstützt. Der KC85/3 ignoriert die ESC-Ausgabe, Zeichen nach ESC werden ausgegeben. Die Tastenkombination Shift-STOP erzeugt den STOP-Code 13H.

CAOS-Unterprogramme

INLIN 17H
CAOS3.1 - kehrt immer mit CY=1 zurück.
CAOS4.2 - kehrt immer mit CY=0 zurück.
CAOS4.3 - übergibt mit CY=1 den Abbruch durch die BRK-Taste.

Dies sollte jedoch nur für Programme angewandt werden, die nicht auf dem KC85/3 laufen sollen.
ZSUCH 1DH
CAOS3.1 - es werden nur vollständige Menüworte gefunden.
CAOS4.2 - stimmt Vergleichskette mit den Anfangsbuchstaben eines Menüwortes überein, wird dies ebenfalls gefunden.
CAOS4.3 - enthält die Vergleichskette Kleinbuchstaben werden auch Menüworte gefunden, die Großbuchstaben enthalten, jedoch nicht umgekehrt.
CUCP 25H
CAOS3.1 - Block-Cursor 8*8 Bit, bei CAPS zweifarbig.
CAOS4.2 - immer Block-Cursor 8*8 Bit.
CAOS4.3 - Block- bzw. Strich-Cursor, jenachdem ob sich auf der Cursorposition ein Zeichen befindet. Form des Block-Cursors über B7EEH wählbar.
MODU 26H
CAOS3.1 - interne Module 0-2 definiert. Das Modulsteuerbyte wird in Register E (statt wie im Handbuch angegeben in D!) zurückgegeben.
CAOS4.2 - interne Module 0-4 definiert. Modulsteuerbyte wird in Register D zurückgegeben.
CAOS4.3 - interne Module 0-5 definiert. Modulsteuerbyte wird in Register D zurückgegeben.
MODIFY 2EH
CAOS3.1 - automatischer Abbruch, wenn Adr. C000H erreicht wird.
CAOS4.x - keine Einschränkungen.
PADR 34H
CAOS3.1 - PA: HL = Pixeladresse, DE = Farbadresse
CAOS4.x - PA: HL = Pixel- und Farbadresse, DE unverändert

Über dieses Unterprogramm läßt sich in Programmen feststellen, ob ein KC85/3 oder ein KC85/4 vorliegt:
LD D,1
LD HL,0
CALL 0F003H
DB 34H
DEC D
JR Z,KC4 ;-> KC85/4, da D unverändert
DISPLAY 3BH
CAOS3.1 - PE: HL = Anfangsadr., DE = Endadr., C = Zeilenzahl.
Beim Übergang in den MODIFY-Modus ist die Einschränkung (siehe UP 2EH) zu beachten.
CAOS4.x - PE: HL = Anfangsadr., E = Zeilenzahl, C = Zeichen pro Zeile.
WININ 3CH
CAOS3.1 - PA: CY=0 bei Fehler in den Eingangsparametern.
Die Fensterfarbe wird weiß/blau eingestellt, WEND zeigt auf die Scroll-Routine.
CAOS4.x - PA: CY=1 bei Fehler in den Eingangsparametern.

Die Fensterfarbe und WEND-Adresse bleiben so, wie die aktuellen Werte in den IRM-Speicherzellen.
WINAK 3DH
CAOS3.1 - PA: CY=0 bei Fehler in den Eingangsparametern.
CAOS4.x - PA: CY=1 bei Fehler in den Eingangsparametern.
LINE 3EH
CAOS3.1 - VR: AF, BC, DE, HL
CAOS4.x - VR: AF, BC, DE, HL, AF', BC', DE', HL'
CIRCLE 3FH
CAOS3.1 - VR: AF, BC, DE, HL
CAOS4.x - VR: AF, BC, DE, HL, AF', BC', DE', HL'
CSTBT 42H
CAOS3.1 - negiert nur Bit 3 des BS-Steuerbytes, keine Zeichenausgabe!
CAOS4.x - Zeichenausgabe des Zeichens im Register A mit Negation von Bit 3 des BS-Steuerbytes. Bei Rückkehr ist das Bit 3 wieder zurückgestellt.

Für Programme, die auf beiden Rechnertypen laufen sollen, empfehle ich folgende Programmierung, um Steuerzeichensymbole darzustellen:
LD A,zeichen
PUSH HL
LD HL,0B7A2H
SET 3,M
CALL 0F003H
DB 24H ;OCHR
RES 3,M
POP HL
MENU 46H
CAOS3.1 - PE: HL = Beginn Suchbereich, BC = Suchlänge
CAOS4.x - Suche immer ab C000H mit Länge = 0 (bis BFFFH)

Um bei beiden Rechnern das selbe Ergebnis zu bekommen:
LD HL,0C000H
LD BC,0
CALL 0F003H
DB 46H
V24OUT 47H
CAOS3.1 - nicht vorhanden.
V24DUP 48H
CAOS3.1 - nicht vorhanden.