En fait, il faut savoir ce que c'est qu'on appelle les ROM_CALLs.
Ce sont des appels à des fonctions du système (AMS). Ces fonctions sont stockées quelque part dans la ROM (la mémoire flash, dont une partie constitue la mémoire archive), d'où le nom, ROM_CALL. Ensuite, pour pouvoir accéder à ces fontions, il faut connaître leur adresse, et faire un jsr vers cette adresse. Jusque là, pas de pb ? D'une version d'AMS à une autre, ces adresses peuvent changer (normal, entre deux versions, il y a des corrections de bugs, des optimisations, etc.... donc les fonctions ne sont plus forcément exactement au même endroit), donc AMS fournit un tableau qui contient les adresses de ces fonctions. Chaque fonction est associée à un numéro, et son adresse se trouve dans le tableau à la case correspondant à son numéro (normal).
Maintenant, il faut connaître l'adresse de ce tableau en question pour pouvoir accéder au contenu de ses cases. Cette adresse est (heureusement pour nous) donnée à l'adresse $C8.
Il faut donc charger l'adresse de la table :
movea.l $C8,a0 ; charge l'adresse contenue à l'adresse $C8 dans a0
Ensuite, il faut lire la case n, correspondant au numéro du rom_call qui nous intéresse :
movea.l n*4(a0),a0 ; charge l'adresse contenue à l'adresse a0 + n*4 dans a0
On a multiplié par 4 car, comme l'a expliqué Nu, le tableau contient des données de 4 octets.
On a maintenant l'adresse de notre rom_call dans a0, on peut l'appeler après avoir déposé les arguments nécessaires sur la pile :
jsr (a0) ; poursuit le programme vers la sous-routine à l'adresse contenue dans a0
C'est fini
Est-ce que tu connais le C ?
Tu connais quoi d'autre comme langage de programmation ?