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.