Das Schneider CPC Systembuch

Die Abteilungen des Betriebssystems

Der Kernel - Software-Interrupts

Events

Nachdem nun die Der Kernel - Software-Interrupts: Interrupt-QuellenInterrupt-Quellen dees MAIN FIRMWARE JUMPBLOCK: KERNEL
Die Firmware des Schneider CPC: KERNEL
Kernel
beschrieben Datenbreite: Wordsworden sind, geht es zum Alle noch folgenden Anschlüsse fallen unter die Rubrik STEUER- oder auch CONTROLBUS:: INT - InterruptInterrupt selbst. Dafür muss man den BCEF: KL INIT EVENT: EventblockEventblock betrachten. Dieser Standard-Datenblock ist für die 'Reaktions-Seite' zuständig. Ist ein BCEF: KL INIT EVENT: EventblockEventblock erst einmal angestoßen ('gekickt'), so sieht man ihm nicht mehr an, woher der Tritt kam. Jeder BCEF: KL INIT EVENT: EventblockEventblock ist wie folgt aufgebaut (Achtung: Die Angaben im Die Firmware des Schneider CPCFirmware Manual hierzu stimmen nicht!):

    Der BCEF: KL INIT EVENT: EventblockEventblock:
    ---------------
    Datentypen: Bytes
Datenbreite: Bytes
Byte
0,1 --> Platz für den Hangelpointer in einer 'pending queue' Datentypen: Bytes
Datenbreite: Bytes
Byte
2 --> COUNT = Kick-Zähler und Steuerbyte Datentypen: Bytes
Datenbreite: Bytes
Byte
3 --> CLASS = Interrupt-Typ Datentypen: Bytes
Datenbreite: Bytes
Byte
4,5 --> ADDRESS = Adresse der Behandlungs-Routine Datentypen: Bytes
Datenbreite: Bytes
Byte
6 --> Erläuterung zu den Anschlüssen 40 bis 45: 42 - ROMEN (0)ROM = nur bei Bedarf: Benötigte Die Speicherkonfiguration im Schneider CPC: ROM-KonfigurationROM-Konfiguration. Datentypen: Bytes
Datenbreite: Bytes
Byte
7ff --> nur bei Bedarf: Variablen: lokale VariablenLokale Variablen für die Behandlungs-Routine.

Wird ein solcher BCEF: KL INIT EVENT: EventblockEventblock gekickt, so reiht ihn der MAIN FIRMWARE JUMPBLOCK: KERNEL
Die Firmware des Schneider CPC: KERNEL
Kernel
entsprechend seines Typs in eine von zwei möglichen 'abhängigen' Ketten, den sogenannten 'pending queues' ein (wenn er nicht bereits drin ist). Dafür müssen die beiden ersten Datentypen: Bytes
Datenbreite: Bytes
Bytes
bereitgestellt werden. (Davon gibt es zwei Ausnahmen, die weiter unten beschrieben sind.)

Gleichzeitig wird der Kick-Zähler erhöht. Dadurch können kurzzeitig mehr Interrupt-Anforderungen eingehen, als die Die ICs im Überblick: Die CPU Z80
Das Innenleben der CPC-Rechner: Die CPU Z80
Die Anschlussbelegungen der wichtigsten ICs im CPC: Die CPU Z80
CPU
abarbeiten kann. Die Anzahl der noch ausstehenden Kicks wird in diesem Datentypen: Bytes
Datenbreite: Bytes
Byte
gespeichert. Dieser Zahler geht aber nur bis +127. Negative Werte (der MAIN FIRMWARE JUMPBLOCK: KERNEL
Die Firmware des Schneider CPC: KERNEL
Kernel
selbst benutzt immer -64 = &Der Zeichensatz des Schneider CPC: &C0 = 192C0) bedeuten, dass dieser BCEF: KL INIT EVENT: EventblockEventblock ruhiggestellt ist, und nicht mehr angestoßen werden soll. Dieses Datentypen: Bytes
Datenbreite: Bytes
Byte
ist also nicht nur ein Zähler, es hat auch Steuerfunktionen.

In die Datentypen: Bytes
Datenbreite: Bytes
Bytes
4 bis 6 muss die Adresse der Behandlungs-Routine für den Software-Interrupt eingetragen werden. befindet sich diese Routine im zentralen RAM, so kann man auf die Angabe der Die Speicherkonfiguration im Schneider CPC: ROM-KonfigurationROM-Konfiguration verzichten. Liegt sie aber in einem Erläuterung zu den Anschlüssen 40 bis 45: 42 - ROMEN (0)ROM, wie das beim Basic-Interpreter der Fall ist, so muss man auch noch das letzte Datentypen: Bytes
Datenbreite: Bytes
Byte
angeben. Diese drei Datentypen: Bytes
Datenbreite: Bytes
Bytes
bilden dann zusammen die FAR ADDRESS für einen ROM-Konfiguration: RestartsRestart 3 (LOW MAIN FIRMWARE JUMPBLOCK: KERNEL
Die Firmware des Schneider CPC: KERNEL
KL
FAR Maschinencode über HIMEM: CALLCALL).

Datentypen: Bytes
Datenbreite: Bytes
Byte
3 ist der Interrupt-Typ. Hiermit werden drei verschiedene Daten des BCEF: KL INIT EVENT: EventblockEventblocks beeinflusst: Datenbreite: Bits
Port B - Input: &F5xx: Bit 0:
Port B - Input: &F5xx: Bit 4:
Port B - Input: &F5xx: Bit 5:
Port B - Input: &F5xx: Bit 6:
Port B - Input: &F5xx: Bit 7:
Port C - Output: &F6xx: Bit 4:
Port C - Output: &F6xx: Bit 5:
Bit
0 gibt an, ob die Adresse der Behandlungs-Routine mit oder ohne Angabe der Die Speicherkonfiguration im Schneider CPC: ROM-KonfigurationROM-Konfiguration erfolgt, Datenbreite: Bits
Port B - Input: &F5xx: Bit 0:
Port B - Input: &F5xx: Bit 4:
Port B - Input: &F5xx: Bit 5:
Port B - Input: &F5xx: Bit 6:
Port B - Input: &F5xx: Bit 7:
Port C - Output: &F6xx: Bit 4:
Port C - Output: &F6xx: Bit 5:
Bit
7 unterscheidet 'synchrone' und 'asynchrone' Der Kernel - Software-Interrupts: EventsEvents, Datenbreite: Bits
Port B - Input: &F5xx: Bit 0:
Port B - Input: &F5xx: Bit 4:
Port B - Input: &F5xx: Bit 5:
Port B - Input: &F5xx: Bit 6:
Port B - Input: &F5xx: Bit 7:
Port C - Output: &F6xx: Bit 4:
Port C - Output: &F6xx: Bit 5:
Bit
6 unterscheidet extrem dringende ('express') und 'normale' Unterbrechungen und die restlichen Datenbreite: Bits
Port B - Input: &F5xx: Bit 0:
Port B - Input: &F5xx: Bit 4:
Port B - Input: &F5xx: Bit 5:
Port B - Input: &F5xx: Bit 6:
Port B - Input: &F5xx: Bit 7:
Port C - Output: &F6xx: Bit 4:
Port C - Output: &F6xx: Bit 5:
Bits
bestimmen bei einem Der Kernel - Software-Interrupts: Synchrone Eventssynchronen Event dessen Dringlichkeit, die Priorität:

   Das Typ-Byte im Event-Block:
   --------------------------------
   Datenbreite: Bits
Port B - Input: &F5xx: Bit 0:
Port B - Input: &F5xx: Bit 4:
Port B - Input: &F5xx: Bit 5:
Port B - Input: &F5xx: Bit 6:
Port B - Input: &F5xx: Bit 7:
Port C - Output: &F6xx: Bit 4:
Port C - Output: &F6xx: Bit 5:
Bit
0 = 1 --> 'near address' (keine Die Speicherkonfiguration im Schneider CPC: ROM-KonfigurationROM-Konfiguration angegeben.) = 0 --> 'far address' (Die Speicherkonfiguration im Schneider CPC: ROM-KonfigurationROM-Konfiguration wie für Speicheraufteilung durch ein Vordergrund-Programm: RST 3
LOW KERNEL JUMPBLOCK: 0000 - RST 0: LOW RESET ENTRY
LOW KERNEL JUMPBLOCK: 0008 - RST 1: LOW LOW JUMP
LOW KERNEL JUMPBLOCK: 0010 - RST 2: LOW SIDE CALL
LOW KERNEL JUMPBLOCK: 0018 - RST 3: LOW FAR CALL
LOW KERNEL JUMPBLOCK: 0020 - RST 4: LOW RAM LAM
LOW KERNEL JUMPBLOCK: 0028 - RST 5: LOW FIRM JUMP
LOW KERNEL JUMPBLOCK: 0030 - RST 6: LOW USER RESTART
LOW KERNEL JUMPBLOCK: 0038 - RST 7: LOW INTERRUPT ENTRY
RST
3 angegeben.) Datenbreite: Bits
Port B - Input: &F5xx: Bit 0:
Port B - Input: &F5xx: Bit 4:
Port B - Input: &F5xx: Bit 5:
Port B - Input: &F5xx: Bit 6:
Port B - Input: &F5xx: Bit 7:
Port C - Output: &F6xx: Bit 4:
Port C - Output: &F6xx: Bit 5:
Bit
1-4 = --> Priorität (bei Der Kernel - Software-Interrupts: Synchrone Eventssynchronen Events) Datenbreite: Bits
Port B - Input: &F5xx: Bit 0:
Port B - Input: &F5xx: Bit 4:
Port B - Input: &F5xx: Bit 5:
Port B - Input: &F5xx: Bit 6:
Port B - Input: &F5xx: Bit 7:
Port C - Output: &F6xx: Bit 4:
Port C - Output: &F6xx: Bit 5:
Bit
5 = --> Muss auf 0 gesetzt werden Datenbreite: Bits
Port B - Input: &F5xx: Bit 0:
Port B - Input: &F5xx: Bit 4:
Port B - Input: &F5xx: Bit 5:
Port B - Input: &F5xx: Bit 6:
Port B - Input: &F5xx: Bit 7:
Port C - Output: &F6xx: Bit 4:
Port C - Output: &F6xx: Bit 5:
Bit
6 = 0 --> normales Der Kernel - Software-Interrupts: EventsEvent = 1 --> express Der Kernel - Software-Interrupts: EventsEvent Datenbreite: Bits
Port B - Input: &F5xx: Bit 0:
Port B - Input: &F5xx: Bit 4:
Port B - Input: &F5xx: Bit 5:
Port B - Input: &F5xx: Bit 6:
Port B - Input: &F5xx: Bit 7:
Port C - Output: &F6xx: Bit 4:
Port C - Output: &F6xx: Bit 5:
Bit
7 = 0 --> Der Kernel - Software-Interrupts: Synchrone Eventssynchrones Event = 1 --> asynchrones Der Kernel - Software-Interrupts: EventsEvent.

Das sieht alles ganz schön verwirrend aus; und das ist es wohl auch. Man muss also nicht gleich an seiner geistigen Leistungsfähigkeit zweifeln, wenn man den Event-Mechanismus nicht beim ersten Durchlesen versteht.

Valid HTML   Valid CSS