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 beiden 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 Programme 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 dabei 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 aufgerufen wird,' eingeklinkt' . Ein so
eingebundender Task läuft dann immer zyklisch, also in regelmäßigen Zeitabstä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 Assemblerbefehl " BRK" ausgeführt wird. Auf
diese Weise können Sie sich auf einfache Weise einen Assembler-Debugger
schreiben.
Der Wert " ADR" des Task-Befehls muß die
Startadresse des Programms enthalten, das aufgerufen werden soll. Demnach können Sie lediglich Assembler-Programme
als Tasks einbinden ( oder evtl. kompilierte 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 Ihnen 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 Startadresse des dazugehörigen Programms angezeigt.
4)"< KILL" Dieser Befehl schaltet die MTS-Basicerweiterung ab. Nach Deaktivieren
der Erweiterung, können Sie sie jederzeit mit " SYS36864" wieder reaktivieren.
HINWEISE
* Sie können generell beliebig viele
Tasks des gleichen Typs verwenden ( sofern es insgesamt nicht mehr als 84 sind) . In dem Fall, daß es mehrere
Tasks gleichen Typs gibt, so werden
Sie der Reihe nach hintereinander aufgerufen. 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 angezeigt wird ( selbst wenn Sie nicht ausgeführt werden) . War das MTS vorher
schon einmal aktiv, wurde es aber zwischenzeitig abund wieder eingeschaltet, 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 entfernt ( die Befehle werden dann nicht
mehr erkannt), jedoch sind die initialisierten Tasks immer noch aktiv und
laufen weiterhin. Wer dann sichergehen
möchte und sie abschalten will, der
sollte das Programm " MTS-OFF" von dieser MD laden ( absolut, mit ",8,1") und
mittels SYS37888( für Assemblerprogrammierer " JSR $9400") aufrufen. Es
setzt die Interrupt-Vektoren, sowie
die Timerwerte wieder in den Normalzustand zurück und schaltet die laufenden 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 Timerwert ggf. mit Hilfe des "< TIMER"- Befehls auf 64 zurücksetzt.
* Zuletzt noch ein paar technische Worte: das MTS wurde mit dem Programm" B-E- E"(=" Basic-Erweiterung- Editor") von der Magic-Disk, Ausgabe 5/92, erstellt, und kann mit diesem Programm
auch noch erweitert werden ( hierzu
bitte die Version " MINI-TASK- SYS.$9" verwenden. Desweiteren sollte angemerkt werden, daß bei der Aktivierung
das Ende des BASIC-Speichers nach
$8 FFF ( dez.36863) verschoben wird, so
daß für Basic-Programme 4 KB 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 definierten Variablen gelöscht werden!
* Die Speicherbelegung des MTS ist wiefolgt:
$9000-$93FF MTS $9400-$9423 MTS-OFF (wenn geladen, sonst unbenutzt) $9424-$9EFF unbenutzt $9F00-$9FFF Speicher für Task-Liste (ub)