Les fonctions du XBIOS
Les fonctions du BIOS sont appelables grâce à l'instruction TRAP #13 en assembleur ou par la fonction BIOS en GFABASIC.
Certaines de ces fonctions utilisent des handles pour les périphériques. Voici la liste des handles utilisables:
Handle N° |
Périphérique associé: |
0 |
PRT: Imprimante |
1 |
AUX: RS232 |
2 |
CON: Ecran |
3 |
MIDI: … |
4 |
IKBD: Clavier |
D'autres fonctions accèdent aux unités de disques. Ces unités de disques sont différenciées les unes des autres par un numéro et non pas par une lettre comme on peut le voir sur le bureau par exemple.
La correspondance est alors la suivante:
Le lecteur A: à pour valeur 0
Le lecteur B: à pour valeur 1
Le lecteur C: à pour valeur 2
Et ainsi de suite.
A noter (ou pour rappel):
Si physiquement, il n'y a qu'un lecteur de disquette, le système va créer un lecteur A: mais aussi un lecteur logique B: (pour faciliter les copies de fichiers par exemple) qui utilisera lui aussi le lecteur présent physiquement. Lors d'un accès à un de ces deux lecteurs logiques, il y aura éventuellement affichage d'un message demandant de changer la disquette A du lecteur par la B ou inversement (cf. code erreur BIOS n° -17).
Et ceci m'amène justement à parler des différents codes erreurs du BIOS:
Code |
Définition |
Libellé |
0 |
E_OK |
Tout est OK |
-1 |
ERROR |
Erreur |
-2 |
EDRVNR |
Lecteur de disquette non prêt |
-3 |
EUNCMD |
Commande inconnue |
-4 |
E_CRC |
Erreur de CRC |
-5 |
EBADRQ |
Mauvaise requète |
-6 |
E_SEEK |
Erreur durant le déplacement des têtes |
-7 |
EMEDIA |
Média inconnu |
-8 |
ESECNF |
Secteur non trouvé |
-9 |
EPAPER |
Plus de papier |
-10 |
EWRITF |
Erreur en écriture |
-11 |
EREADF |
Erreur en lecture |
-12 |
? |
? |
-13 |
EWRPRO |
Média protégé en écriture |
-14 |
E_CHNG |
Détection d'un changement de média |
-15 |
EUNDEV |
Périphérique inconnu |
-16 |
EBADSF |
Erreur durant le formatage |
-17 |
EOTHER |
Insérez un autre disque |
Liste des fonctions du BIOS:
00 Initmous
Initialisation du gestionnaire de la souris
En entrée:
word contient le type d'action
Valeur |
Désignation |
0 |
Désactivation souris |
1 |
Activation de la souris en mode relatif |
2 |
Activation de la souris en mode absolu |
3 |
Inutilisé |
4 |
Activation de la souris en mode clavier |
long pointeur vers un bloc de paramètre défini comme suit:
1 octet indiquant que la souris est en 0 en haut (1) ou en bas (0)
1 octet pour définir le mode de fonctionnement des boutons de la souris
1 octet définissant le facteur de xparam
1 octet définissant le facteur de yparam
D'autres octets peuvent compléter ce bloc en fonction du mode choisi
long pointeur sur une routine lancée par la fonction rapport de souris (MOUSE REPORT) du processeur clavier.
01 Ssbrk
Réserve un certain nombre d'octets en haut de mémoire. Cette fonction est prévue pour être appelée avant l'initialisation du DOS.
En entrée:
word contient le nombre d'octets à réserver.
En sortie:
D0.L contient l'adresse à partir de laquelle les octets sont réservés.
02 Phybase
Indique l'adresse physique de la mémoire écran
En sortie:
D0.L adresse physique de la mémoire écran
03 Logbase
Indique l'adresse logique de la mémoire écran
En sortie:
D0.L adresse logique de la mémoire écran
04 Getrez
Indique le mode de résolution
En sortie:
D0.L contient 0 pour basse, 1 pour moyenne et 2 pour haute résolution
05 Setscreen
Positionne les paramètres de l'écran. Les valeurs négatifs ne changeant pas la valeur actuelle du paramètre correspondant.
En entrée:
long pour l'adresse logique
long pour l'adresse physique
word pour le mode résolution (0,1 ou 2)
06 Setpalette
Permet de modifier les couleurs de la palette du ST
En entrée:
long pointeur sur une zone de 16 mots de 16 bits qui définissent les 16 couleurs
07 Setcolor
Permet de modifier la couleur d'un registre de couleur
En entrée:
word numéro du registre de couleur à affecter
word définit la couleur de ce registre
En sortie:
D0.W contient l'ancienne couleur
08 Floprd
Lecture d'un ou plusieurs secteurs de l'unité de disquette
En entrée:
long adresse du tampon qui recevra le résultat de la lecture. ATTENTION, le tampon devra être suffisement grand et bien sûr commencer sur une adresse pair !
long inutilisé
word numéro d'unité (0 ou 1)
word numéro du premier secteur à lire
word n° de la piste ou commence la lecture
word n° de la face (0 ou 1)
word Nombre de secteur à lire
En sortie:
D0.L contient un compte rendu d'erreur ou 0 si l'opération est réussie.
09 Flopwr
Ecriture d'un ou plusieurs secteur de l'unité de disquette
En entrée:
long adresse du tampon quicontiendra les données à écrire. ATTENTION, le tampon devra être suffisement grand et bien sûr commencer sur une adresse pair !
long inutilisé
word numéro d'unité (0 ou 1)
word numéro du premier secteur à écrire
word n° de la piste ou commence l'écriture
word n° de la face (0 ou 1)
word Nombre de secteur à écrire
En sortie:
D0.L contient un compte rendu d'erreur ou 0 si l'opération est réussie.
Remarque:
Si on écrit sur le secteur BOOT, le système détectera un changement de média après invocation de RWABS ou MEDIACH
0A Flopfmt
Formatage d’une disquette
En entrée :
Long pointeur vers un tampon d’au moins 8 k
Long inutilisés
Word numéro du lecteur (0 pour A : et 1 pour B J
Word Nombre de secteur par piste
Word Numéro de piste (0 à 79)
Word Numéro de face (0 ou 1)
Word Facteur d’entrelacement (Normalement 1)
Long nombre magic $87654321
Word Valeur qui sera ecrite dans chaque octet de chaque secteur formaté (Habituellement E5E5)
En sortie :
D0.L contient 0 si l’opération est réussie et un code d’erreur dans le cas contraire. Le tampon contiendra une liste non trié des secteurs défectueux.
Le formatage implique un changement de média après invocation de RWABS ou MEDIACH
0B Inutilisée !
0C Midiws
Ecriture d’une chaîne de caractères sur le port MIDI
En entrée :
Word contient le nombre de caractères à écrire moins un.
Long pointeur sur la chaîne de caractères
0D MFPOINT
Positionne un vecteur d'interruption interne (0 à 15) du MFP à une adresse précise
En entrée:
word pour indiquer le n° du vecteur
long adresse à positionner pour ce vecteur
0E IOREC
Donne un pointeur sur un spécificateur de tampon d'un périphérique d'entrée.
En entrée:
word qui contient le numéro de périphérique (0 pour RS232, 1 pour le clavier et 2 pour le MIDI)
En sortie:
Le spécificateur de tampon dont la structure est la suivante:
long adresse du tampon
word taille du tampon
word index de début (prochaine position du traitement)
word index de fin (qui peut être identique à index de début
si la tampon est vide)
word marqueur de niveau inférieur (autorisation de poursuite de transmission
ou XON)
word marqueur de niveau supérieur (inhibition de poursuite de transmission
ou XOFF)
Si le périphérique est le RS232, un descritpteur de tampon de sortie (ayant la même structure que le tampon d'entrée) va suivre le descripteur de tampon d'entrée.
0F RSCONF
Configurer le port RS232
En entrée:
word Vitesse de transmission suivant les valeurs suivantes:
0 = 19200 1 = 9600 2 = 4800 3 = 3600
4 = 2400 5 = 2000 6 = 1800 7 = 1200
8 = 600 9 = 300 A = 200 B = 150
C = 134 D = 110 E = 75 F = 50
word mode de contrôle du flux
0 pas de contrôle
1 XON/XOFF
2 RTS/CTS
3 XON/XOFF et RTS/CTS
word valeur du regsitre UCR du MFP
word valeur du regsitre RSR du MFP
word valeur du regsitre TSR du MFP
word valeur du regsitre SCR du MFP
10 KEYTBL
Positionne les pointeurs vers les tables de transcodage du clavier.
En entrée:
long pointent vers la table de transcodage des touches normales, les 4 suivants
vers la table de transcodage des touches utilisées avec les touches
shift et les 4 derniers
vers la table de transcodage des touches lorsque CAPS LOCK est positionnée.
En sortie:
D0.L l'adresse d'une table qui contient les adresses successives des trois pointeurs. Chaque table ayant une longueur de 128 octets.
11 RANDOM
Retourne un nombre pseudo-aléatoire
En entrée: Rien
En sortie: D0.L contient un nombre aléatoire sur 24 bits. L'octet
le plus significatif vaut 0.
12 PROTOBT
Construction d'une image du secteur BOOT.
En entrée:
long : Adresse d'un tampon de 512 octets (Taille d'un secteur Boot)
long : Doit contenir un numéro de série. En principe il doit
être unique, car il s'agit du seul moyen pour le ST de détecter
un changement de disque. Si plusieur boot ont le même n° de série,
alors le système ne détectera pas un éventuellement changement
d'où des risques de mélange de données lors de la maj
sur le disque !
word : Type du disque
ou -1 si le type ne doit pas être modifié
Valeur | désignation |
0 | 40 pistes, simple face |
1 | 40 pistes, double face |
2 | 80 pistes, simple face |
3 | 80 pistes, double face |
-1 | Le type ne doit pas être changé |
word : Sémaphore d'exécution:Indique si le secteur boot doit être exécutable (1) ou non (0)
En sortie: rien
13 FLOPVER
Permet de vérifier 1 ou plusieurs secteurs du disque
En entrée comme en sortie, les paramètres sont identiques à la fonction 8
14 SCRDMP
Impression de l'écran
En entrée: rien
En sortie: rien
15 CURSCONF
Permet de lire ou de modifier les attributs du curseur
En entrée:
word -1 pour lire, une autre valeur indiquant la nouvelle vitesse de clignotement. (vitesse basé sur la vitesse du balayage vertical)
word attributs du curseur:
Valeur | Désignation |
-1 | Ne rien faire |
0 | Curseur Clignotant |
1 | Curseur fixe |
2 | Curseur inhibé |
En sortie: D0.L : Le poid fort contient la valeur de la vitesse clignotante lue ou l'ancienne si maj.
Le poid faible contient l'attribut du curseur lu ou l'ancienne valeur si maj.
16 SETTIME
Positionne la date et l'heure. Bon l'intérêt sur un ST n'est pas des plus important, puisqu'il n'y a pas de batterie pour garder cette date et cette heure lorsque vous éteignez votre machine...
long qui contient la date sur les 16 bits de poids fort et l'heure sur les 16 bits de poids faible.
En sortie : rien
17 GETTIME
Lecture de la date et de l'heure...même remarque que la fonction précédente...
En entrée: rien
En sortie: D0.L contient la date sur les 16 bits de poids fort et l'heure sur les 16 bits de poids faible.
18 BIOSKEYS
Repositionner les valeurs initiales de transcodage du clavier
En entrée: rien
En sortie: rien
19 IKBDWS
Ecriture d'une chaîne de caractères vers le crontôleur intelligent du clavier.
En entrée:
word qui contient le nombre de d'octets à écrire
long qui contient l'adresse de la chaîne à transmettre.
En sortie: rien
1A JDISINT
Permet d'empêcher une interruption.
En entrée:
word qui est le numéro de l'interruption à empêcher.
En sortie: rien
1B JENABINT
Autoriser l'interruption désignée.
En entrée:
word qui est le numéro de l'interruption à activer.
En sortie: rien
1C GIACCASS
Lecture ou écriture d'un registre du générateur sonore
En entrée:
byte qui sera la donnée à écrire
word pour le numéro de registre à lire ou écrire.
le bit 7 de ce
mot devant être à 0 pour une lecture, à 1 pour une écriture.
En sortie:
D0.L contient la donnée lue si l'opération demandée est une lecture !