La commande USR

 

 

Pour lancer un programme machine en Basic, il faut utiliser la commande USR.

Cette commande attend au moins un paramètre en entrée: l'adresse où se trouve le code.

Exemple: un code machine est chargé à l'adresse 1536. Pour le lancer:

Y=USR(1536)

En sortie, Y reçoit la valeur stockée dans $D4 et $D5...

On peut de plus passer n paramètres à la fonction:

Y=USR(1536,128)

ou Y=USR(1536,128,24)

...

 

Au niveau du code machine:

La fonction USR passe des informations sur la pile:

- L'adresse de retour (pour rendre la main au basic)

- Les paramètres de n à 0 (sur 16 bits)

- Le nombre de paramètres (sur 8 bits)

Tous ces paramètres sont stockés dans la pile.

Dans le code machine, pour connaître le nombre de paramètres passés, il faut faire un premier PLA

L'accumulateur contient maintenant le nombre de paramètres.

Puis, si des paramètres sont présents (l'accumulateur est différent de 0), il faut de nouveau faire des PLA pour les récupérer:

La lecture des données dans la pile va alors retourner le paramètre 1, puis le 2, ... jusqu'au n ième paramètre.

Image non trouvée !Il faut faire deux PLA par paramètres (car les paramètres sont sur 16 bits !):

Le premier PLA va charger la partie haute du paramètre dans l'accumulateur

Le second PLA va charger le partie basse du paramètre dans l'accumulateur

 

Enfin, pour rendre la main au programme Basic, il faut que notre code machine se termine par un RTS. Le RTS récupérant automatiquement l'adresse sur la pile, il faut bien entendu s'assurer que votre pointeur de pile soit bien positionné sur l'adresse de retour. Il faut donc bien récupérer tous les paramètres mis sur la pile avant de rendre la main au programme BASIC !

Exemple le plus simple:

10 Y=USR(1536)

Le code machine sera donc:

Récupérer le nombre de paramètre (qui est ici = 0)

PLA

Le code machine

RTS