|
||||||||||||||||||||||||||||||||||||||||||||||||||||
|
AMOS est un langage extensible : on peut facilement ajouter de nouvelles instructions aux 600 déjà présentes. Il suffit de respecter quelques règles simples dans la construction du programme. Pour assembler une extension, vous devez récupérer le fichier "EQC.S" se trouvant sur la disquette "Extras", dans le dossier "Extensions". Ce fichier contient la définition de toutes les variables système de l'AMOS. Vous devez l'inclure dans votre programme. Bien que ce ne soit pas indispensable, je vous conseille d'écrire du code relogeable, pour deux raisons :
Au démarrage, AMOS explore la liste des extensions contenue dans le fichier AMOS1_2.Env, et charge tous les fichiers cités à l'aide de la fonction AmigaDOS LoadSeg(). Une extension est donc un programme normal, pouvant contenir plusieurs segments. Immédiatement après le chargement, AMOS effectue un JSR à la première adresse du premier segment. Une extension doit débuter impérativement par la routine d'initialisation à froid (ou "Cold Start"). AMOS transmet plusieurs paramètres à l'extension :
Initialisation à chaud (Warm Start) Cette routine est appelée au cours de l'initialisation de l'écran, lors d'un RUN ou d'un DEFAULT. L'extension peut ici remettre a zéro toutes ses variables internes (si nécessaire). Routine de fin (Quit) Cette routine est appelée lors d'un retour au système. Elle doit faire un ménage complet, et ne laisser en mémoire aucune trace du passage de l'extension. La table des instructions Dans cette table sont codées toutes les nouvelles instructions et fonctions qu'ajoute l'extension. Cette table confient aussi les pointeurs sur les routines de traitement. La table doit débuter par :
Suivent ensuite les instructions et fonctions. En premier, un pointeur relatif sur la routine de traitement, par rapport au début de la table (généralement baptisée Tk). Si c'est une instruction :
Si c'est une fonction :
Suit le nom de l'instruction en lettres minuscules, la dernière lettre étant signalée par l'addition de 128 (bit 7 à 1) :
Un point d'exclamation au début du nom sert de marqueur sur ce nom. Un nom vide ($80 seul) indique a l'AMOS de rechercher le marqueur précédent. Voir plus loin pour comprendre l'utilisation de ce système. Il faut maintenant donner a l'AMOS toutes les indications nécessaires pour le test de la syntaxe : Le type de l'instruction :
![]() ![]() Traitement d'une instruction Lors de l'interprétation, AMOS appelle votre routine. Les paramètres sont poussés dans la pile (A3), en ordre inverse. Votre routine doit dépiler tous les paramètres demandés (sous peine de plantage !). Vous ne devez pas modifier les registres A4, A5 et A6. A5 pointe sur la zone de données du BASIC, l'extension a donc un accès direct à tout l'AMOS (voir à ce sujet le fichier EQU.S). Traitement d'une fonction Le déroulement est pratiquement identique à celui d'une instruction. La valeur retournée doit être poussée en -(a3). La table d'adresses Lors du démarrage de l'extension, AMOS fournit une donnée importante en A0 : la table d'adresses du BASIC. Cette table contient des sauts à d'importantes routines d'AMOS. Pour y accéder, il suffit de faire :
Voici une rapide vue d'ensemble des fonctions les plus intéressantes. Table + $04 C'est une routine de traitement des erreurs normales. Cette routine provoque une erreur. Vous devez lui transmettre en D0 le numéro de l'erreur souhaitée. Tous les numéros se trouvent dans le "Handy Index" de l'AMOS. Cette fonction ne revient jamais, inutile de faire un JSR. Paramètres d'entrée :
Les valeurs contenues dans les registres A4-A5-A6 doivent être identiques à celles fournies lors de l'appel de l'instruction. La pile A3 est restaurée par le système lors d'un appel d'erreur : vous pouvez donc tester les erreurs lors du dépilement des paramètres (très utile lorsqu'il y en a beaucoup !) sans avoir à vous en préoccuper. Table + $08 C'est une routine de traitement des erreurs spécifiques. Cette routine vous permet d'avoir vos propres messages d'erreurs. Paramètres d'entrée :
Exemple d'appel :
Table + $0C C'est une routine qui trouve l'adresse d'une banque. Petite routine utile si vous désirez récupérer des données dans une banque de mémoire. Paramètres d'appel :
Table + 10 C'est une routine de "tests". AMOS appelle cette routine avant tous les branchements et boucles. C'est elle qui provoque le rafraîchissement des BOB, sprites et écrans, qui teste le Control-C, appelle les menus, etc. Vous devez appeller cette routine régulièrement si votre extension garde la main pendant plus de 1/50e de seconde. Elle ne modifie aucun registre à part D0 et A0 et ne nécessite aucun paramètre d'appel. Table + $14 C'est une routine "Wait". Attend un certain nombre de balayages écran tout en appelant la routine de tests. Paramètres d'appel :
Adresse d'un écran. Trouve les adresses d'une structure écran AMOS. Cette structure contient toute la définition interne de l'écran : position, adresses des bitmaps, etc. Paramètres d'appel :
Table + $1C Adresse ou banque mémoire ? Un certain nombre de fonctions AMOS vous permettent de représenter l'adresse de début d'une banque mémoire par le simple numéro de cette banque. Exemple : Bload "Essai.Bin",10 et Bload "Essai.Bin",Start(10) sont deux instructions équivalentes. La routine numéro $1C fait cette opération pour vous. Elle dépile automatiquement le paramètre de la pile (a3). Paramètre d'entrée :
Effacement de banque mémoire. Paramètre d'entrée :
Routine pour demander un espace de chaîne. Cette routine n'est accessible qu'à partir de la version 1.23 (disponible maintenant !). Son but est de réserver un espace dans la zone des variables pour retourner une chaîne de caractères. Elle gère automatiquement la "garbage collection" (ou ramassage des miettes). Paramètre d'entrée :
![]() ![]()
|