back : next : inhalt =
 
 

8 *** Verzeichnis der Beispielprograme

Die Beispiele wurden mit dem GST-Macro-Assembler assembliert und erprobt mit den Roms JS, MGG, MF und MINERVA 1.82.
Im Verzeichnis ist eine Kurzbeschreibung angegeben.

Alle auf Discette beigefügten programe und Tabellen, ohne die erläuternden Texte, sind frei verwendbar. Nutzung beliebiger Art und Weitergabe sind gestattet, sofern dies ohne geforderte oder erbettelte Gegenleistung geschieht.
 

8.1 ** Inhalt

  Die Beispielprograme werden ständig überarbeitet und ergänzt.
In wesentlich erweiterter Form sind sie auch in der IO2-Sammlung enthalten.
 

8.2 ** Kurzbeschreibung der programe

 

8.2.1.1 "MDVtest_prg" Basic-program

mit den Proceduren:  

8.2.1.2 "MDV_bin", "MDV_asm"

 
Enthält codiert die Funktionen von MDV_START und MDV_STOP. Erklärungen im Assemblertext. Nicht aus Basic aufrufbar.
 

8.2.2 "MCLONE" , "MCLONE_asm"

Nach Adrian Dickens' "The Self Cloning Program" {1}.

Erprobt mit/ohne TK2, mit/ohne PIF, alles in JS, MGG, MF, MINERVA 1.82. Dabei ist nur nach Aktivierung aus einem PIF-Menu Vorsicht geboten, wenn die Jobs gelöscht oder zum Button gemacht werden sollen. Offensichtlich sind hier dessen Grenzen erreicht.
Nach Aufruf mit EXEC "MCLONE" werden ausgehend von der Bildmitte kleine Blöcke von 4x3 Punkten Größe zu verschie-denfarbigen Linien zusammengefügt. Dies erledigt für jede Linie ein eigener Job. Dabei besteht er nur aus dem Header und einer Sprunganweisung in den einmal eingerichteten programblock. Bei Erreichen des Bildrandes, auch bei einem anderen Fehler, gibt der jeweilige Job sich selbst die Priorität Null und inaktiviert sich so. Ist keiner der Jobs mehr tätig, beendet sich das gesamte program selbst, nachdem es alle anderen seines Zweiges aufgelöst hat.

Solch ein Job, der außer den notwendigsten spezifischen Daten ohne ein program im eigenen Codebereich betrieben werden kann, heißt beim QL "Clone".  Das Verfahren des "Cloning" wird anhand dieses Beispiels dargestellt. Gleichzeitig werden die Vorteile reentrant augebauter programe deutlich, denn nur diese lassen auch in solch extremer Form die Mehrfachnutzung zu.
Der Job kann in beiden Farbmodi des QL betrieben werden (MODE 4, MODE 8), wobei die Farbwirkung in MODE 8 natürlich vielfältiger ist. Wegen der nur schwer erkennbaren Beendigung schließt sich ein Piepton an, womit zugleich ein Muster der Aktivierung des Tongenerators vorliegt.

Hinweis:
Gelegentlich startet das program, ohne sichtbare Linien zu zeichen, es beendet sich u.U. auch sehr schnell wieder. Das ist kein Fehler. Bedingt durch die Abfrage einer Zufallszahl sind die Ergebnisse unterschiedlich. Mitunter werden auch weit über 100 Jobs eingerichtet.
 

8.2.3 "ASO_bin", "ASO_asm"

Neben der Parameterübergabe und der Nutzung eines Vorgabewertes, wenn diese fehlt oder ungültig war, ist in erster Linie hier ein Beispiel für Aufbau, Aktivierung und Stillegen einer Interrupt-Routine gegeben. Während deren Abarbeitung bleiben alle Interrupts eingeschaltet. Dies soll vermeiden, daß das System bei einem Fehler jeglichem weiteren Zugriff entzogen wird. Darum ist besonderes Kriterium die kürzest mögliche Laufzeit, womit zugleich der verschachtelte Aufruf derselben Routine auszuschließen ist. Bedingt durch die memoryung der Timervariablen und des Linkblocks ist der Code nicht Rom-tauglich.
   

8.2.4 "DFV_bin", "DFV_asm"

Ausführliche Beschreibung der Vorgehens findet sich im Assemblertext. Insbesondere die Typ-Einteilung der Variablen wird hier gezeigt:  

8.2.5 "STAK_bin", "STAK_asm"

STAK{_nn} ist der Name eines Device mit optionaler Angabe seiner bufferlänge als Zahl nach dem Unterstrich. Die Zahl gibt die Anzahl memorybarer f.p.-Zahlen an. Die Datenablage ist als Stack organisiert, d.h., die zuletzt abgelieferte Zahl ist die zuerst Lesbare. Setzen des Typen erlaubt auch andere Datenformate. Das Beispiel gibt einige Basic-Befehle an, die für Standardformate des Basic gelten (f.p. und Integer). Genaueres steht im Assemblertext.
Die Rückgabe der Funktionen kann immer auch zur Prüfung eines Kanals herangezogen werden. ERR.NJ kommt zurück, wenn er nicht zum Stack-Device gehört. Besonders ST_DEPTH ist geeignet, da weder zusätzliche Parameter ausgewertet werden, noch eine Veränderung in den Daten erfolgt.  


top : back : next : content 

= (count)