Magic Disk 64

home to index to text: MD9309-UTILITIES-MINI_TASK-SYSTEM.txt
            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)

Valid HTML 4.0 Transitional Valid CSS!