Mini-Task-System Interrupts - leichtgemacht ----------------------------------------
Bei dem Mini-Task-System (im Folgenden "MTS"), handelt es sich um eine kleine Basic-Erweiterung, mit der Sie bis zu 84 kleine Assemblerprogramme gleichzeitig ablaufen lassen können. Das Programm liegt auf der Rückseite dieser MD in zwei Versionen vor: Das File "MINI-TASK-SYSTEM" kann normal mit ",8" geladen und mittels 'RUN' gestartet werden. Hieraufhin ist die MTS- Basicerweitung aktiv. Das zweite File, namens "MINI-TASK-SYS.$9" wird absolut, also mit ",8,1" geladen. Die Basic- Erweiterung wird hierbei mit SYS36864 ($9000) gestartet. Egal welche der bei- den Versionen Sie benutzen - nach Akti- vierung stehen Ihnen die vier folgenden Basic-Befehle zusätzlich zur Verfügung: 1) "<TASK,X,Y,ADR" Hiermit installieren Sie einen neuen Task. Der Parameter "X" gibt dabei die Nummer des Tasks an, den Sie verwenden möchten. Hier sind Werte zwischen 0 und 83 erlaubt. "Y" steht für die Art des Tasks. Da das MTS die einzelnen Program- me per Interrupt aufruft, steht dieser Wert für den Interrupt, der für diese Routine benutzt werden soll. Folgede Werte sind erlaubt: 0: Task abschalten. Die Adresse ist da- bei unwichtig (muß aber angegeben werden). 1: Task soll im IRQ laufen. Hierbei wird er in den normalen Systeminterrupt, der ca. 60 Mal in der Sekunde aufge- rufen wird, 'eingeklinkt'. Ein so eingebundender Task läuft dann immer zyklisch, also in regelmäßigen Zei- tabständen, ab. 2: Task soll im NMI laufen. Der NMI ist ein besonderer Interrupt, der immer ausgelöst wird, wenn die 'RESTORE'- Taste gedrückt wird. Sie können so ganz einfach z.B. eine Hilfsseite anzeigen lassen, wenn diese Taste gedrückt wird (die Abfrage der Taste entfällt). 3: Task ist ein BRK-Interrupt. Er wird immer dann ausgelöst, wenn der Assem- blerbefehl "BRK" ausgeführt wird. Auf diese Weise können Sie sich auf ein- fache Weise einen Assembler-Debugger schreiben. Der Wert "ADR" des Task-Befehls muß die Startadresse des Programms enthalten, das aufgerufen werden soll. Demnach kön- nen Sie lediglich Assembler-Programme als Tasks einbinden (oder evtl. kompi- lierte BASIC-Programme). 2) "<TIMER,X" Dieser Befehl ändert das High-Byte des Timer-Werts, der den IRQ steuert. Sie können dadurch die Geschwindigkeit aller Tasks, die vom Typ 1 sind, ändern. Zulässig sind Werte zwischen 0 und 255. Je kleiner der Wert, desto schneller die IRQ-Tasks, aber auch desto langsamer das Hauptprogramm. Desweiteren sollten Sie keine zu kleinen Werte benutzen, da Ih- nen sonst der Rechner abstürzen kann. Wie klein der Wert nicht werden darf, hängt von der Anzahl und Dauer der Tasks ab, die aufgerufen werden sollen. Als Richtwert sollte der Wert jedoch nie kleinerals 10 sein. Um den Normalwert wiederherzustellen, müssen Sie für "X" den Wert 64 angeben. 3) "<LIST" Dieser Befehl listet alle vorhandenen Tasks auf dem Bildschirm auf. Hierbei wird pro Zeile zunächst die Tasknummer, der TYP (IRQ,NMI,BRK), sowie die Starta- dresse des dazugehörigen Programms ange- zeigt. 4) "<KILL" Dieser Befehl schaltet die MTS- Basicerweiterung ab. Nach Deaktivieren der Erweiterung, können Sie sie jeder- zeit mit "SYS36864" wieder reaktivieren. HINWEISE * Sie können generell beliebig viele Tasks des gleichen Typs verwenden (so- fern es insgesamt nicht mehr als 84 sind). In dem Fall, daß es mehrere Tasks gleichen Typs gibt, so werden Sie der Reihe nach hintereinander auf- gerufen. Haben Sie also die Tasks 1, 10 und 20 als IRQ-Tasks definiert, so werden Sie in dieser Reihenfolge auch ausgeführt. Möchten Sie einen nun vierten IRQ-Task nach Task 10 und vor Task 20 aufrufen lassen, so sollten Sie ihn mit einer Nummer zwischen 11 und 19 versehen. * Leider hat der "<LIST"-Befehl einen kleinen Fehler: Wird das MTS nämlich zum ersten Mal gestartet, so kann es passieren, daß, durch Speichermüll eine Reihe von unsinigen Tasks ange- zeigt wird (selbst wenn Sie nicht aus- geführt werden). War das MTS vorher schon einmal aktiv, wurde es aber zwi- schenzeitig ab- und wieder eingeschal- tet, so zeigt der "<LIST"-Befehl immer noch die zuvor installierten Tasks an (obwohl sie unter Umständen ebenfalls nicht mehr ausgeführt werden). Zur Sicherheit sollten Sie jedesmal, wenn Sie das MTS aktivieren die Taskliste mittels folgender Schleife löschen:
10 FOR I=0 TO 83 20 <TASK,I,0,0 30 NEXT
* Auch der "<KILL"-Befehl ist leider fehlerhaft. Wird er aufgerufen, so wird die BASIC-Erweiterung zwar ent- fernt (die Befehle werden dann nicht mehr erkannt), jedoch sind die initia- lisierten Tasks immer noch aktiv und laufen weiterhin. Wer dann sichergehen möchte und sie abschalten will, der sollte das Programm "MTS-OFF" von die- ser MD laden (absolut, mit ",8,1") und mittels SYS37888 (für Assemblerpro- grammierer "JSR $9400") aufrufen. Es setzt die Interrupt-Vektoren, sowie die Timerwerte wieder in den Normalzu- stand zurück und schaltet die laufen- den Tasks somit gänzlich ab. Anders geht es auch, indem man die oben schon erwähnte Schleife zum Löschen der Task-Liste verwendet, und den Timer- wert ggf. mit Hilfe des "<TIMER"- Befehls auf 64 zurücksetzt. * Zuletzt noch ein paar technische Wor- te: das MTS wurde mit dem Programm "B-E-E" (="Basic-Erweiterung-Editor") von der Magic-Disk, Ausgabe 5/92, er- stellt, und kann mit diesem Programm auch noch erweitert werden (hierzu bitte die Version "MINI-TASK-SYS.$9" verwenden. Desweiteren sollte ange- merkt werden, daß bei der Aktivierung das Ende des BASIC-Speichers nach $8FFF (dez. 36863) verschoben wird, so daß für Basic-Programme 4KB weniger zur Verfügung stehen. Die Erweiterung sollte deshalb IMMER ganz am Anfang, bzw. noch vor Start, des BASIC- Programms aufgerufen werden, da durch die Verschiebung alle bisher definier- ten Variablen gelöscht werden! * Die Speicherbelegung des MTS ist wie- folgt:
$9000-$93FF MTS $9400-$9423 MTS-OFF (wenn geladen, sonst unbenutzt) $9424-$9EFF unbenutzt $9F00-$9FFF Speicher für Task-Liste (ub)