BDOS, BIOS und der ganze Rest ...
Beim Betriebssystem CP/M ist der hardwareabhängige Teil, also das BIOS, relativ klein und überschaubar und ließ sich leicht auf eine neue Hardware abändern. DR hat übrigens nie ein komplettes BIOS mit ausgeliefert, sondern sozusagen nur ein »Beispiel-BIOS«, das der Hersteller dann selbst auf seine Computer umprogrammieren mußte. Bei der Joyce wurde diese Aufgabe von den Locomotive-Codern übernommen. Wer mit einem Disassembler einige Forschungen anstellt, wird erkennen, daß sich die Leute bei Locomotive die Aufgabe leicht gemacht hatten große Teile des CPC6128-BIOS wurden einfach kopiert. Dazu zählen z.B. all die Farbroutinen für den Bildschirm! Mir ist jedenfalls nicht bekannt, daß Amstrad auch für die Joyce jemals einen Farbmonitor geplant hatte. Vielleicht ist dies auch der Grund dafür, weshalb sich Amstrad und Locomotive bis dato weigern, die Quelltexte des BIOS herauszurücken. Selbst bei Commodore konnten die BIOS-Sourcen für den C128 bezogen werden. Übrigens, bei LocoScript liegt genau dieselbe Struktur vor, nur gibt es hier ein einziges Anwenderprogramm, das mit den CP/M-Teilen fix zusammengebunden wurde. Zwischen den oben genannten Ebenen gibt es »genormte« Schnittstellen: Wer einmal in die technische Beschreibung des Prozessors »Z80A« geschaut hat, wird wissen, daß unser Mikroprozessor mit der Peripherie eigentlich nur über sog. »Ports« kommuniziert. Die fortgeschrittenen Basic-Coder unter uns haben vielleicht schon davon Gebrauch gemacht, wenn Sie spezielle OUT-Befehle für Bildschirmeffekte verwendet haben. Dabei werden allerdings die Ebenen BDOS und BIOS übergangen. Normalerweise soll nur das BIOS die speziellen Portbefehle verwenden, wenn die Anwenderprogramme auf jeden CP/M-Rechner laufen sollen. Wenn ein Anwenderprogramm Funktionen des Betriebssystems (z. B. von einer Datei lesen) braucht, dann ruft es normalerweise das BDOS auf: An der Adresse 0005H steht im Arbeitsspeicher ein Sprungbefehl, der in das Betriebssystem führt. Für alle BDOS-Funktionen gelten die gleichen Konventionen:
Als CP/M Plus entworfen wurde, machte man auch ein Zugeständnis an diejenigen, denen man es nie recht machen kann. Speziell für diese Zielgruppe wurde RSX (= Resident System eXtension) zur Verfügung gestellt. Mit einer solchen RSX kann man z.B. eine bestimmte BDOS-Funktion »umbauen«. Wer sich z. B. eine Sprachausgabe gebastelt hat und die ganz normal mit einer BDOS-Funktion ansprechen will, kann das dann mit einer (selbst programmierten) RSX erreichen. Eine solche RSX-Routine »drängelt« sich dann vor die jeweilige BDOS-Routine. Wer wissen will, wie das im Detail gemacht wird, kann z. B. in meinen »Menübaukasten für Turbo Pascal» schauen, dort habe ich so etwas eingesetzt. An sich sind RSXen eine feine Sache, es gibt eigentlich nur einen Nachteil, sie brauchen Speicher auf Kosten der TPA (= Transient Program Area). Genervt werden sich manche von euch fragen: TPA - was ist das nun wieder? Nun, um diese Frage zu beantworten, müssen wir uns ein wenig mit der Organisation des Arbeitsspeichers beschäftigen: Unser Prozessor Z80A besitzt sechzehn Adreßleitungen, kann also nur einen Speicherbereich bis 2^16-1 = 65535 Bytes = 64 KB ansprechen. Nun besitzt aber selbst die kleinste Joyce bereits stolze 256 KB Speicher, und die können ohne Probleme gelesen und beschrieben werden. Wenn ihr nun einen frisch gebackenen Informatiker fragt, wie das der 8-Bit-Prozessor das schafft, dann wird er gerade noch etwas von »bank switching« murmeln, bevor er sich wieder in seine MB-großen Gefilde zurückzieht ... Was ist bei der Joyce eine »Bank« oder eine »Speicherbank«? Der Begriff »Speicherbank« wurde bereits bei den ersten Großrechnern analog zum Terminus »Datenbank« eingeführt. Nur füllten dort die Speicherbänke gleich einen ganzen Schrank; der erste Großrechner, auf dem ich codete, war zwölf Meter lang, und besaß gerade mal 64 KB Kernspeicher. Und trotzdem lief darauf die gesamte Fertigungsplanung eines Werkes mit über 3.000 Beschäftigten. Aber früher wurde eben noch sorgfältiger programmiert... Wenn wir schon bei neuen Begriffen sind, führen wir doch gleich einen weiteren ein (aber dann ist Schluß!): den »Speicherblock«. Bei der Joyce umfaßt ein Speicherblock 16 KB, und vier Speicherblöcke bilden eine Speicherbank, i. e. eine Speicherbank ist gerade 64 KB groß, kann also von unserem Prozesspr Z80A problemlos adressiert werden. Die Speicherblöcke werden nun mit Null beginnend durchnumeriert: unsere kleinste Joyce mit 256 KB hat also genau 16 Speicherblöcke 0..15. Es gibt nun spezielle Hardwarebefehle, mit denen wir beliebige vier Speicherblöcke zu einer Speicherbank »zusammenschalten« können. Von dieser Möglichkeit macht auch das Betriebssystem CP/M Plus reichlich Gebrauch. Ja, bestimmte Speicherbänke sind vom System permanent belegt. Bei der Version 1.4 gilt etwa folgende Einteilung (bei 1.8H oder 1.15 wurden die Bereiche teilweise vertauscht!): Block 0: u. a. Einsprungspunkte für BIOS- und XBIOS-Routinen. Block 1: u. a. Bildschirmroutinen und den unteren Teil des Bildschirmspeichers. Block 2: u. a. oberen Teil des Bildschirmspeichers und die Zeichenmatrix. Block 3: u. a. Routinen zur Ansteuerung der Floppy-Laufwerke. Blöcke 4, 5 und 6: stehen den Anwenderprogrammen zur Verfügung, die sog. TPA. Block 7: u. a. Einsprungspunkte für BDOS- und BIOS-Routinen. Der untere Teil steht für die TPA und für RSXe zur Verfügung. Block 8: u. a. CCP und Pufferbereiche für Drucker und Floppy. Blöcke 9ff: hier ist die RAM-Floppy untergebracht. Block 9 enthält das Inhaltsverzeichnis, dann folgen die jeweiligen Daten. Standardmäßig schaltet CP/M Plus diese Blöcke zu folgenden Bänken zusammen: Bank 0: Sie besteht aus den Blöcken 0, 1, 3 und 7; diese Bank ist immer dann aktiviert, wenn eine Systemfunktion aktiv ist. Bei der Joyce gibt es noch eine Besonderheit: bei einer Bildschirmausgabe wird der Block 3 durch Block 2 ersetzt, manche sprechen dann von der »erweiterten Bank 0«. Bank 1: Sie besteht aus den Blöcken 4, 5, 6 und 7; immer wenn ein Anwenderprogramm werkelt, dann ist diese Bank eingeschaltet. Bank 2: hier wird jeweils der zweite Block (also 1 oder 5) durch Block 8 ersetzt. Dies ist der Fall, wenn der CCP ein vom Anwender eingegebenes Kommando verarbeitet. Bänke 3ff: an die Stelle des Blockes 8 bei der Bank 2 tritt hier der Block aus der Ram-Floppy. Diese Bänke liegen also bei jedem Zugriff auf die Ram-Floppy vor. Wer dieses System aufmerksam verfolgt hat, wird feststellen, daß jede Bank im oberen Teil den Block 7 enthält; dieser Block ist die sog. »Common Area« (auwei, schon wieder ein neuer Begriff!). Jeder, der in seinem Obstgarten schon Bäume ausgeästet hat, wird wissen, wozu das gut ist. So wie ihr euch wohl kaum auf einen Ast setzt, den ihr gerade absägt, braucht auch das System einen Ruheplatz, von dem es zwischen den verschiedenen Bänken hin- und herschalten kann. Andernfalls zieht es sich beim Umschalten selbst den Boden, sprich gespeichertes Programm unter den Füßen hinweg ...
DangSoft
|