zurück : weiter : inhalt =
 
 

4 *** Programme

Wie schon angedeutet, kann der QL mit vier Arten von Code-Programmen betrieben werden. Sie sollen nun einzeln beschrieben werden.
 

4.1 ** Betriebssystem

Die hier möglichen Erweiterungen sind vornehmlich in Gestalt der überaus vielseitigen Device-Handler formulierbar. Andere irgendwo fest verankerte Teile können natürlich auch Code erhalten, der als Bestandteil des Betriebssystems verwendbar ist. Im Einzelnen soll hier aber nur auf die dafür vorgesehenen Anschlußstellen des Qdos eingegangen werden. Dies sind die verketteten Listen der Devices und der Things. Neben der Unterstützung durch das "Thing"-System, dem ein eigenes Kapitel gewidmet wurde, sei darum auf die ausführlichen Angaben zu den Handlern verwiesen.
 

4.2 ** Interrupt-Betreuung

Grundsätzlich gilt das Folgende:

Neben der Bearbeitung irgendeiner Aufgabe durch ein laufendes Programm kann dies auch dem tatsächlichen Bedarf gemäß geschehen. Der betreffende Aufruf wird asynchron durch das jeweilige Gerät der Peripherie ausgelöst. Im Processor ist das in Form einer Flag verzeichnet und die Ausführung wird erfolgen, wann immer das Programm zu der geforderten Aktion bereit ist.

Die Interrupt-Technik ist ein Hilfsmittel, den Ablauf von Programmen auf äußere Vorgänge zu synchronisieren. Auch das "Ticken" einer "Uhr" kann solch ein Vorgang sein, vor allem, wenn ein zeitliches Maß eingebracht werden soll: Ein "tick" (20 ms) als Zeiteinheit für den "timer". Dies kann für die Steuerung mehrerer ineinandergeschachtelter Programme besonders sinnvoll sein.

Der Interrupt wird direkt durch ein Signal von außen an den Processor gesendet. Besonders die Controller, das sind Mikro-Computer mit der gesamten zum eigentlichen Betrieb nötigen Hardware in demselben Bauteil, sind dafür mit mehreren Eingängen ausgestattet, die von verschiedenen Signalquellen beschickt werden können. Diese Interruptbearbeitung ist besonders schnell und für zeitlich genau und prompt zu steuernde Vorgänge auch unbedingt erforderlich. In einem Computer, der mehr einer Art "Schreibtischdienst" vorbehalten ist, ist solcher Aufwand kaum nötig. Darum finden wir dergleichen im QL auch nur an den Eingängen für serielle Daten von ser1 RxD und ser2 TxD beim Coprocessor.

Ein Abfrage-Interrupt (polled interrupt) ist eine für die Hardwareseite besonders vereinfachte und softwareseitig leicht standardisierbare Behandlung der verschiedenartigen Bearbeitungsanforderungen. Durch "Befragung" aller Teile (scanning - Abtasten der Reihe nach), die womöglich zu bedienen sind, werden Art, Ursache und erforderliche Aktion bei einer Unterbrechung ermittelt.

Dabei gibt es im Wesentlichen zwei Kathegorien:

Das "polling" ermittelt den Interrupt-Auslöser. Mehrere Hardware-Geräte können zu beliebiger Zeit auf einer allen gemeinsamen Leitung an den Processor eine Anforderung (interrupt request) senden. Es ist die eigentliche Quelle zunächst daraus nicht bestimmbar. Eine Möglichkeit ist dann, die Urheber dieser Anforderung durch Befragen der Sender der Reihe nach zu ermitteln. Aus Zeitgründen können die "Antworten" auch schon vor der Interrupt-Auslösung in ein Register gebracht worden sein. Dies muß dann nur noch gelesen werden.

Bei der anderen Kathegorie signalisiert der Interrupt selbst nur den Ablauf einer im allgemeinen hardwareseitig fest eingestellten Zeiteinheit. Dieser "timer interrupt" sichert die regelmäßige Überwachung gewisser Bedingungen, die etwa in einem Register ein gesetztes Bit erzeugen. Position und Zustand eines solchen Signal-Bits (flag bit) geben dann an, welcher Teil Hardware oder auch Software einer besonderen Behandlung bedarf. Wie oben beschrieben, könnte dies auch durch "Umfrage" bei allen dafür möglichen Sendern geklärt werden. Ohne besondere Markierung lassen sich regelmäßige Aufrufe abarbeiten.

"Sender" kann hier jedes Stück Hardware sein, was irgendwie mit dem Rechner in Verbindung steht, aber auch ein Programm, wenn durch dieses entweder im ersten Fall ein Interrupt ausgelöst oder im zweiten Fall eines der Flag-Bits gesetzt werden kann.

Alle Interrupts sind für den Ablauf der Jobs im QL von besonderer Bedeutung. Darum finden sich nähere Angaben dazu auch in der allgemeinen Beschreibung der Jobs und der besonderen Verhältnisse dort. Die vom Betriebssystem des QL verarbeiteten Interrupts erfolgen stets "auto vectored" im Level 2 des Processors. Die verschieden bezeichneten Interrupt-Arten sind dabei rein softwaremäßig dargestellt. Sie werden durch "polling" in der unten angegebenen Rangordnung abgefragt. Für die drei frei definierbaren Interruptarten gibt es je eine verkettete Liste, aus der die Routinen der Reihe nach ausgewählt werden.

Zunächst nach Maßgabe des Hardwareregisters $18021, dann weiter der Reihe nach, erfolgt die Verzweigung auf eine dieser Kathegorien:
 
gap interrupt Microdrive-Steuerung 
interface interrupt Datenübertragung
transmit interrupt serielle Übertragungswege
external interrupt Signal von außen
polled interrupt laufend abgefragte Bedingung
scheduler interrupt polled unter weiteren Bedingungen
Die ersten drei Arten sind fest installiert, programmiert sind sie nicht nutzbar, können durch Maskierung jedoch unterbunden werden (s. Tabellen).

Die anderen Interruptaufrufe sind in verketteten Listen der Systemvariablen verzeichnet, wo sie durch die jeweiligen Manager-Traps (Trap #1) eingefügt werden. Der erste Posten der Verkettung enthält am Listenende Null, sonst die Adresse der nächsten Link-Position. Es folgt die Einsprungadresse der Interruptroutine.

Register:

Beim Einsprung steht in A6 die Basis der Systemvariablen.
A3 zeigt auf die gedachte Basisadresse des Linkblocks einer Handlerdefintion.
A6 und A7 müssen mit dem Eingangswert zurückgegeben werden.
Alle anderen Register sind frei verwendbar.
Aus den Aufrufen ist immer nur mit RTS zurückzukehren.

HINWEIS:
Bei MGG und vermutlich auch allen anderen Original-ROMs - was nicht weiter untersucht wurde - muß außerdem A5 geschützt werden!
 

Interrupt von außen - "external interrupt"

in SV.I2LIST auf $38(sb)
A3 zeigt auf die QDOS-Link-Position der Interruptroutine.
Ein Peripheriegerät löst eine Unterbrechung beim Processor aus. Nachdem Qdos in der Liste von SV.I2LIST den richtigen Aufruf gefunden hat, wird der Aufruf die Auslösebedingung löschen und die eigentliche Aufgabe ausführen. Hilfe bei der Suche leisten etwa die in den Tabellen der einzelnen Device-Handler abgelegten Daten.

Dieser Interruptaufruf kann aus beliebiger Umgebung heraus immer auch "atomic" Operationen unterbrechen!

Timer- oder 50/60Hz-Interrupt - "polled task" - Aufruf nach Abfrage

in SV.PLIST auf $3C(sb)
A3 zeigt 8 Bytes vor die QDOS-Link-Position der Interruptroutine.
Hier wird die zugehörige Liste in regelmäßigen Intervallen (20 ms, nur bei U.S.-Geräten 16 2/3 ms) auf eine Bedienungsanforderung durchsucht.

"atomic" Operationen werden unterbrochen. Diese Aufrufart sollte kurzen und besonders zeitkritischen Programmen vorbehalten bleiben. Hardware, die selbst den Processor nicht unterbrechen kann, kann turnusmäßig überwacht und der Bearbeitung zugeführt werden. Geeignete Kontrolle vorausgesetzt lassen sich größere Programme zeitlich verschachtelt stückweise abarbeiten. Was zu diesem spezialisierten "polled" Interrupt führt:

Scheduler - "scheduled task" - geordnete Programme

in SV.SHLST auf $40(sb)
A3 zeigt 16 Bytes vor die QDOS-Link-Position der Interruptroutine.
Der Aufruf erfolgt "polled" mit geringster Priorität. Hier gibt es eine immer wieder erneuerte und bei Bedarf ergänzte Warteliste, die ringförmig abgefragt wird. Nach Maßgabe der Gesamtbelastung des Systems teilt dann der eigentliche Scheduler als der "Programm-Koordinator" den Nutzer-Programmen Rechnerzeit zu. Bei der Job-Verwaltung sorgt er zugleich durch Sichern und Wiederherstellen der Processorregister und Anpassung gewisser Hilfsdaten für gleichbleibend geordnete Zustände. D3 enthält die Anzahl der beim Polling versäumten Aufrufe.

Diese Aufrufe können Operationen, die als "atomic" gelten, nicht unterbrechen.
Nur hier darf auch Speicher zugewiesen werden.
 

4.3 ** Tasks

In Sinne der zuvor gegebenen Definitionen sind Tasks durch Interrupt ausgelöste selbständige Programme. Zeitkritsche Aufgaben lassen sich bei der Interruptstruktur des QL nur aus einem Externen Interrupt steuern, eingeschränkt auch "polled".

Speicherzuweisungen dürfen von hieraus nicht erfolgen.

Etwa könnte "polled" eine Art Stoppuhr installiert werden. Bei geringster Belastung an Rechnerzeit ist das Abschalten der Bildschirmausgabe abhängig von der Tastaturbenutzung zur Schonung des Sichtgerätes eine gelegentlich recht nützliche Anwendung. Beispiele dazu im Programmteil.
 



oben : zurück : weiter : inhalt

= (count)