Das Schneider CPC Systembuch

Die Abteilungen des Betriebssystems

Der Kernel - Software-Interrupts

Normal-asynchrone Events

Alle anderen, die 'normalen' asynchronen Der Kernel - Software-Interrupts: EventsEvents reiht der MAIN FIRMWARE JUMPBLOCK: KERNEL
Die Firmware des Schneider CPC: KERNEL
Kernel
zunächst einmal in die 'asynchronous pending queue' ein. Ist die Behandlung des Hardware-Interrupts beendet, so lässt der MAIN FIRMWARE JUMPBLOCK: KERNEL
Die Firmware des Schneider CPC: KERNEL
Kernel
Alle noch folgenden Anschlüsse fallen unter die Rubrik STEUER- oder auch CONTROLBUS:: INT - InterruptInterrupts wieder zu und ruft erst jetzt alle Einträge in dieser Warteliste auf, bevor er dann endgültig zum Hauptprogramm zurückkehrt.

Weil nun Alle noch folgenden Anschlüsse fallen unter die Rubrik STEUER- oder auch CONTROLBUS:: INT - InterruptInterrupts wieder zugelassen, und auch die normalen Register-Verhältnisse in der 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
wieder hergestellt sind, können die Behandlungs-Routinen für asynchrone, normale Der Kernel - Software-Interrupts: EventsEvents zumindest alle ROM-Konfiguration: RestartsRestarts benutzen, (fast) solange dauern, wie sie wollen und auch einige, re-entrant-fähige Grundlagen: UnterprogrammeUnterprogramme des Betriebsystems aufrufen. Die meisten Routinen des Betriebssystems bleiben aber auch weiterhin verboten.

Speziell Ereignisse, die während der Austastluecke bei der Bilddarstellung ausgeführt werden sollen, wird man wohl als asynchrone Der Kernel - Software-Interrupts: EventsEvents programmieren müssen. Dabei wird man oft sogar nur mit express asynchroner Behandlung zurecht-kommen.

Wird ein normales, asynchrones Der Kernel - Software-Interrupts: EventsEvent aber nicht vom Interrupt-Pfad aus gekickt, sondern durch irgendeine andere Routine, während Alle noch folgenden Anschlüsse fallen unter die Rubrik STEUER- oder auch CONTROLBUS:: INT - InterruptInterrupts zugelassen sind (via &KERNEL: BCF2: KL EVENTBCF2 KL EVENT), so wird die zugehörige Behandlungs-Routine sofort aufgerufen, ohne den BCEF: KL INIT EVENT: EventblockEventblock erst in die 'asynchronous pending queue' einzureihen. Für die praktische Anwendung ist aber die Frage, ob ein Der Kernel - Software-Interrupts: EventsEvent nun vorher in diese Trees: ListenListe eingetragen wird oder nicht ziemlich unwichtig, da man davon normalerweise nichts mitbekommt.

Das folgende Beispiel zeigt, wie man einen regelmäßigen Alle noch folgenden Anschlüsse fallen unter die Rubrik STEUER- oder auch CONTROLBUS:: INT - InterruptInterrupt programmiert, der mit jedem 'fast ticker' express-asynchron aufgerufen werden soll:

 ; Einhängen eines Der Kernel - Software-Interrupts: Express-asynchrone Eventsexpress-asynchronen Events
 ; mit Near Address auf dem Fast Ticker:
 ; -------------------------------------------
         ....
         LD   HL,FBLOCK    ; Zeiger auf 'fast ticker Die Speicherkonfiguration im Schneider CPC: Blockblock'
         Maschinencode über HIMEM: CALLCALL #BCE3        ; KERNEL: BCE3: KL ADD FAST TICKERKL ADD FAST TICKER aufrufen
         ....
 ;
 ; Der 'fast ticker Die Speicherkonfiguration im Schneider CPC: Blockblock':
 ;
 FBLOCK: DEFW #0000        ; Platz für Kettungspointer in 'fast ticker Datenspeicherung und Datenstrukturen: Chainschain'
         DEFW #0000        ; Platz für Kettungspointer in 'pending queue'
         DEFB #00          ; Count auf 0 gesetzt
         DEFB %11000001    ; asynchron, express, near address
         DEFW ROUTIN       ; Adresse der Behandlungs-Routine
 ;
 ROUTIN: ....              ; Behandlungs-Routine

Der 'fast ticker Die Speicherkonfiguration im Schneider CPC: Blockblock' besteht aus dem Platz für den Kettungspointer in der 'fast ticker Datenspeicherung und Datenstrukturen: Chainschain' und einem BCEF: KL INIT EVENT: EventblockEventblock. Der fängt mit zwei reservierten Datentypen: Bytes
Datenbreite: Bytes
Bytes
für den Kettungspointer in der 'asynchronous pending queue' an. Da es sich aber um ein express asynchrones Der Kernel - Software-Interrupts: EventsEvent handelt, bei dem die Routine immer sofort aufgerufen wird, wird dieser Platz nicht beansprucht. Trotzdem muss er bereitgestellt werden.

Genauso verhält es sich mit dem Datentypen: Bytes
Datenbreite: Bytes
Byte
für den Count: Der Zahlerstand wird nie erhöht werden, weil während der Event-Behandlung Alle noch folgenden Anschlüsse fallen unter die Rubrik STEUER- oder auch CONTROLBUS:: INT - InterruptInterrupts weiterhin verboten sind. Würde man hier allerdings einen Wert ungleich Real: NullNull eintragen, würde die Routine nie aufgerufen, weil der MAIN FIRMWARE JUMPBLOCK: KERNEL
Die Firmware des Schneider CPC: KERNEL
Kernel
dann davon ausginge, dass es sich um ein normal asynchrones Der Kernel - Software-Interrupts: EventsEvent handelt, das bereits in der 'asynchronous pending queue' eingetragen IST! Der MAIN FIRMWARE JUMPBLOCK: KERNEL
Die Firmware des Schneider CPC: KERNEL
Kernel
würde in diesem Fall nur den Zähler erhöhen (maximal bis 127).

Valid HTML   Valid CSS