DER MONITOR

 

Der OS-Monitor ist ein Programm im ROM, das die Einschalt- und SYSTEM-RESET-Sequenz des Gerätes bearbeitet. Im Bezug auf ihre Funktion sind Einschalt- und SYSTEM-RESET-Sequenz identisch. In Anhang IV befindet sich ein Flussdiagramm der Einschalt- und SYSTEM-RESET-Routinen.

 

Die Einschalt-Routine (auch als Kaltstart-Routine bezeichnet) ist auf zwei Arten ansprechbar: durch Einschalten des Computers oder einen Sprung nach COLDSV($E477). COLDSV ist der

System-Routinen-Vektor zur POWER-UP (Einschalten)-Routine. Wichtige Punkte beim Einschalten sind:

 

 

1. Der gesamte Speicher, ausgenommen die Adressen $0000 bis $000F, wird gelöscht.

 

2. Disketten- und Cassetten-BOOT werden versucht. Das Flag BOOT?($0009) signalisiert den Erfolg oder Misserfolg des BOOTs. Bei einem erfolgreichen Cassetten-BOOT ist Bit 0=1 bei einem erfolgreichen Disketten-BOOT Bit 1=1.

 

3. COLDST($0244) ist ein Flag, das dem Monitor mitteilt, ob ein POWER-UP oder ein SYSTEM-RESET vorliegt. COLDST=0 bedeutet SYSTEM-RESET, COLDST ungleich 0 bedeutet POWER-UP. Eine interessante Verwendung dieses Flags wäre das Setzen auf einen Wert ungleich Null, während ein geBOOTetes Programm ausgeführt wird. Dieses hat zur Folge, dass ein SYSTEM-RESET zu einem POWER-UP wird. Diese Technik erhöht den Schutz des Programms, da der Benutzer keine Kontrolle über den Computer erlangen kann, während es läuft.

 

Das Drücken der RESET-Taste verursacht einen SYSTEM-RESET (auch als Warmstart bezeichnet). Wichtige Punkte beim SYSTEM-RESET sind:

 

 

1. Die RAM-Vektoren des OS werden während des SYSTEM-RESETs und während des Einschaltens vom ROM übertragen. Möchte der Benutzer einen Vektor ändern, so müssen einige Vorkehrungen getroffen werden, damit SYSTEM-RESET entsprechend bearbeitet werden kann. Siehe Kapitel 9 für die Behandlung das SYSTEM-RESETs.

 

2. MEMLO, MEMTOP, APPMHI, RAMSIZ und RAMTOP werden beim SYSTEM-RESET zurückgesetzt. Werden diese Zeiger geändert, um Speicherplatz für Assembler-Routinen in BASIC freizumachen, so müssen ebenfalls einige Vorkehrungen getroffen werden, damit SYSTEM-RESET entsprechend bearbeitet werden kann. Abbildung 8.10 ist ein Beispiel hierfür.

 

 

DIE SYSTEMVARIABLEN

 

Die Systemvariablen enthalten viele für den Benutzer interessante Informationen. Mit Assembler-Routinen oder POKE- und PEEK-Befehlen kann direkt auf diese Adressen zugegriffen werden.

 

Die Systemvariablen liegen auf den RAM-Seiten 0 bis 4 ($0000 bis $03FF). Sie enthalten System-Flags, I/O-Puffer, I/O-Paramter usw. Der Programmierer kann einige dieser Speicherstellen benutzen, um Funktionen anzuwenden, die nicht durch das OS oder ein Programm (z.B. BASIC) bereitgestellt werden. Abbildung 8.11 zeigt einige dieser Elemente:

 

 

 

Speicher-Zeiger

 

Das OS benutzt 5 Speicherstellen, um den Benutzer- und Bildschirm-Speicher zu überwachen: MEMLO, MEMTOP, APPMHI, RAMTOP und RAMSIZ. Ihre Zusammenhänge werden in einer einfachen Speicherübersicht in Abbildung 8.12 dargestellt.

 

MEMLO ist eine 2-Byte Speicherstelle, die das OS verwendet, um anzuzeigen, wo ein Anwendungs-Programm beginnen kann. Wird MEMLO vorsichtig benutzt, so kann es zum Reservieren von Speicherplatz für kleine Assembler-Routinen in BASIC verwendet werden. Der BASIC-Interpreter benutzt den MEMLO-Zeiger um festzulegen, wo ein Programm anfangen kann (siehe Kapitel 7 für die Struktur von BASIC-Programmen). Soll der MEMLO-Zeiger auf eine höhere Adresse gesetzt werden, so muß dieses geschehen, bevor das BASIC-Modul gestartet wird. MEMLO muß außerdem sehr vorsichtig verwendet werden, da diese Speicherstelle beim Einschalten und beim SYSTEM-RESET wieder zurückgesetzt wird.

 

Wird von einer Diskette gebootet, so kann die AUTORUN.SYS-Möglichkeit benutzt werden, um MEMLO auf einen festgelegten Wert zu setzen. Da das DOS den Zeiger auch bei einem SYSTEM-RESET über den DOSINI-Vektor zurücksetzt, ist es notwendig diesen zu ändern. DOSINI enthält die Adresse des Initialisierungs-Programms für das DOS. Es wird durch den Monitor als ein Teil der Initialisierung des Systems aufgerufen. Der Inhalt von DOSINI muß in eine 2-Byte-Adresse einer JSR-Anweisung übertragen werden, um ein Teil des POWER-UPs zu werden. DOSINI wird dann auf die Adresse der JSR-Instruktion für das Initialisierungs-Programm gesetzt. MEMLO enthält einen festgelegten Wert. Bei einem SYSTEM-RESET wird das neue Initialisierungs-Programm aufgerufen, wobei dessen erste Instruktion JSR OLDDOSINI, wiederum das DOS initialisiert. Das neue Init-Programm setzt MEMLO auf den festqelegten Wert und springt zur alten Init-Sequenz zurück (RTS). Abbildung 8.10 ist hierfür ein Beispiel.

 

Die oben beschriebene Technik kann ebenso für MEMTOP (der Zeiger für das obere RAM-Ende) verwendet werden. Durch Verringern des MEMTOP-Wertes kann Speicherplatz für Assembler-Routinen reserviert werden. Allerdings ergibt sich bei der Verwendung von MEMTOP anstelle von MEMLO ein Problem. MEMTOP ändert sich mit der Größe des freien RAMs und dem Grafik-Modus des Bildschirms. Dieses macht es schwierig seinen Wert zu bestimmen. Aus diesem Grunde müßen die Assembler-Routinen frei verschiebbar sein.

 

APPMHI ist eine Speicherstelle, die die Adresse enthält, welche wiederum die niedrigste Adresse angibt, an die das Bildschirm-RAM gelegt werden kann. Diese Variable wird gesetzt, um Programme oder Daten vor dem ‹berschreiben durch den Display-Handler zu schützen.

 

RAMSIZ kann genau wie MEMTOP zum Sichern von Speicherplatz für kleine Assembler-Routinen benutzt werden. Der Vorteil von RAMSIZ gegenüber MEMTOP liegt darin, daß der reservierte Speicherbereich hinter dem Bildschirm-RAM liegt, der durch MEMTOP gesicherte Speicherbereich liegt unter dem Bildschirmbereich. Letzterer kann sich durch ƒndern des Grafik-Modus ausdehnen oder zusammenziehen.