Les fonctions GEMDOS, BIOS et XBIOS

 

 

 

Vous trouverez ici la liste des fonctions:

- Du GEMDOS

- DU BIOS

- DU XBIOS

 

 

Pour appeler ces fonctions:

 

- En GFA BASIC:

On utilisera les fonctions

  • GEMDOS(n°fonction[, ou ; paramètre1[, ou ; paramètre 2[, ou ; ...]]])

  • BIOS(n°fonction[, ou ; paramètre1[, ou ; paramètre 2[, ou ; ...]]])

  • XBIOS(n°fonction[, ou ; paramètre1[, ou ; paramètre 2[, ou ; ...]]])

  • ou le nom de la fonction GFA BASIC équivalente.

Vous utiliserez la commande void ou ~ dans le cas où vous n'attendez pas de paramètres de sortie après l'exécution d'une fonction GEMDOS, BIOS ou XBIOS.

Vous utiliserez une variable de type integer (nomvar%) pour récupérer le code en sortie.

Vous utiliserez l: pour indiquer un paramètre LONG (mot long), w: pour un paramètre en word (mot).

 

 

- En assembleur:

Vous passerez toutes les informations par la pile, dans le sens inverse des paramètres attendus par la fonction. Normal, ainsi, la fonction va les relire dans le bon sens (La pile est LIFO ! dernier entré, premier sortie...). Vous récupèrez l'information ou un code erreur éventuel dans le registre D0.L

Le GEMDOS est déclenché par TRAP #1

Le BIOS par TRAP #13

Enfin le XBIOS par TRAP #14

Ne pas oublier de corriger le pointeur de pile à la fin de l'appel !

Image non trouvée ! ces fonctions utilisent les registres: Certains registres (D0-D2 et A0-A2) peuvent alors être modifiés aux retours de ces fonctions...

Exemple d'utilisation d'une fonction BIOS en assembleur:
Pour envoyer un caractère sur un périphérique, vous utilisez la fonction du bios:

03 Bconout

Envoyer un caractère sur un périphérique.

VOID Bconout (int device, int char);

En entrée:
Word: Le handle du périphérique.
Word: Le caractère à envoyer.

En sortie: Rien

Vous passez les différents paramètres sur la pile. Mais attention, comme indiqué ci-dessus : la fonction doit d'abord récupérer le handle de périphérique puis le caractète à envoyer. Donc passer ces paramètres à l'envers…pour que le BIOS puisse les relire à l'endroit !

D'où le code:

MOVE.W #'A', -(SP) ; Le caractère A
MOVE.W #0, -(SP); Sur l'imprimante…

MOVE.W #3 ; Fonction Bconout

TRAP #13 ; Appel au BIOS

L'ennui, c'est que la pile est chargée de données après l'appel qui ne servent plus. Il faut donc impérativement la corriger (risque de plantage sinon) !

Comment: C'est simple, il suffit de compter le nombre d'octets que placés sur la pile.
Ici 3 words = 6 octets.

Donc, vous corrigee le pointeur de pile par :
ADDQ.L #6, SP

(Pour rappel : Un mot long (.L) = 4 octets, 1 mot (.W) = 2 octets).
Si vous ne comprenez pas cela, il vous faut impérativement revoir vos notions d'assembleur !

 

 

- En C:

On notera que j'ai mis les appels, ou structure en C. Cependant, je ne peux plus vérifier tout cela, mes disquettes étant foutues…Il se peut donc que des erreurs se soient sournoisement glissées dans la doc.