Pl2 BIOS.DOC
Jump to navigation
Jump to search
--------------------
CHAPITRE NR° 6
LES FONCTIONS DU
BIOS et de l'XBIOS
--------------------
*** LES FONCTIONS DU BIOS ***
-----------------------------
- Toutes les remarques pr‚c‚dentes conscernant les fonctions du GEMDOS
sont encore valables pour les fonctions du BIOS:
.Initialisation indispensable (SETBLOCK)
.Mode de transmission des paramètres par le pile système.
.Retour de certaines valeurs dans certains registres.
Le nr° de TRAP qui correspond aux fonctions du BIOS est: TRAP #13
- Je vais maintenant enum‚rer et commenter les fonctions du BIOS qui sont
utiles ou int‚ressantes.(tout comme pour les fonctions du GEMDOS...)
$04 (RWABS),MOT=unit‚ de disquette,MOT=nr°secteur d‚but,MOT=nombre de sec-
--- teurs à lire ou à ‚crire,L-M=adresse d'un tampon,MOT=mode
RWABS permet d'‚crire ou lire des secteurs sur disquette.
Les paramètres à passer sont:
1°:Le nr° de l'unit‚ de disquette conscern‚e:
0=Drive A,1=Drive B,2=Disque dur
2°:Le nr° du secteur ou RWABS doit d‚buter l'op‚ration
3°:Le nombre de secteurs à lire ou à ‚crire
4°:L'adresse du tampon de donn‚es à lire ou à ‚crire selon le cas.
La taille d'un secteur est de 512 octets.
5°:Le mode d'action de RWABS:
0=lecture des secteurs
1=‚criture des secteurs
2=lecture (ne tient pas compte d'un changement de disquette lors de
l'op‚ration)
3=‚criture (ne tient pas compte d'un changement de disquette lors de
l'op‚ration)
RWABS retourne dans d0 une valeur nulle si tout est OK, ou un code
d'erreur n‚gatif dont la valeur peut ètre:
-1=plantage
-2=lecteur non prêt
-3=ordre inconnu
-4=erreur CRC
-5=ordre incorrect
-6=piste non trouv‚e
-7=bootsector endommag‚
-8=secteur non trouv‚
-10=erreur d'‚criture
-11=erreur de lecture
-13=disquette prot‚g‚e en ‚criture
-14=disquette chang‚e pendant la lecture ou l'‚criture
-15=p‚riph‚rique inconnu
-16=v‚rification d'un secteur mal ‚crit
-17=pas de disquette
MOVE #0,-(SP) ;DRIVE A
MOVE #0,-(SP) ;d‚but au secteur 0
MOVE #10,-(SP) ;10 secteurs
PEA tampon ;adresse des donn‚es
MOVE #1,-(SP) ;‚criture
MOVE #4,-(SP)
TRAP #13
ADDA.L #14,SP
DATA
tampon DS.B 5120 ; les donn‚es à ‚crire sur les 10 secteurs
; 10 secteurs=512*10 octets
$05 (SETEXEC),L-M=valeur du nouveau vecteur,MOT=nr° du vecteur à changer
---
SETEXEC permet de changer la valeur d'un vecteur d'exeption.
(J'expliquerais en d‚tail dans un chapitre sur les VECTEURS D'EXEPTION)
PEA nouveau ;nouvelle adresse
MOVE #10,-(SP) ;10=instruction ill‚gale
MOVE #5,-(SP)
TRAP #13
ADDA.L #8,SP
$09 (MEDIACH),MOT=nr° du drive
---
MEDIACH permet de savoir si une disquette a ‚t‚ sortie ou introduite dans
le lecteur de disquette dont on sp‚cifie le nr°. (0=Drive A,1=Drive B...)
Cette fonction marche seulement si la disquette n'est PAS prot‚g‚e en
‚criture...
D0 retourne avec:
0 si la disquette a ‚t‚ maintenue.
1 si la disquette a des chances d'avoir ‚t‚ chang‚e (incertain).
2 si la disquette a ‚t‚ chang‚e.
MEDIACH oppère un test depuis le d‚but de l'execution du programme et Ã
intervalles r‚guliers.
(Regardez la lumi‚re du LED rouge du lecteur de disquette clignoter très
faiblement à intervalles r‚guliers quand le lecteur est au repos...)
CHANGED MACRO $\1 ;MACRO à 1 paramètre (MEDIACH)
MOVE \1,-(SP) ;\1=nr° du drive à tester
MOVE #9,-(SP)
TRAP #13
ADDQ.L #4,SP ;retour dans d0
ENDM
Exemple d'utilisation:
CHANGED #1 ;la disquette du drive A a-t-elle ‚t‚
;chang‚e?
$0A (DRVMAP),pas de paramètre
---
Cette fonction retourne dans d0 les diff‚rents lecteurs de disquettes
connect‚s.
Le bit nr°X de d0 est actif quand le drive nr°X est disponible.
(0=Drive A,1=Drive B...)
NBD MACRO
MOVE #$A,-(SP)
TRAP #13
ADDQ.L #2,SP
ENDM
Exemple d'utilisation:
NDB
si d0.B retourne %00001001,les lecteurs A et D sont disponibles.
(On peut tester les bits de d0 avec BTST #X par exp. pour savoir si un
lecteur X est disponible...)
$0B (GETSHIFT),MOT=-1
---
GETSHIFT permet d'obtenir l'‚tat de certaines touches qui peuvent pas
être d‚tect‚es par les autres fonctions d'attente de touche.
Il faut passer à GETSHIFT un mot=-1 par l'interm‚diaire de la pile
système pour obtenir dans d0.B un octet dont les bits ont la signi-
fication suivante:
nr° du bit: Signification
0 :Shift de droite
1 :Shift de gauche
2 :Control
3 :Alternate
4 :Caps Lock
5 :Clr/Home (ou touche droite de la souris)
6 :Insert (ou touche gauche de la souris)
Si le bit est actif,la touche correspondante est activ‚e.
GETSHIFT MACRO $\1 ;MACRO a 1 paramètre
MOVE \1,-(SP) ;\1=-1 pour l'‚tat des touches
MOVE #$B,-(SP)
TRAP #13
ADDQ.L #4,SP
ENDM
Exemple d'utilisation:
test GETSHIFT
BTST #2,D0 ;a-t-on enfonc‚ la touche Control ?
BEQ test ;si Bit=0:Z=1=non=retest
*** LES FONCTIONS DU XBIOS ***
------------------------------
- Toutes les remarques pr‚c‚dentes conscernant les fonctions du BIOS
sont encore valables pour les fonctions du XBIOS:
.Initialisation indispensable (SETBLOCK)
.Mode de transmission des paramètres par le pile système.
.Retour de certaines valeurs dans certains registres.
Le nr° de TRAP qui correspond aux fonctions du BIOS est: TRAP #14
- Je vais maintenant enum‚rer et commenter les fonctions du XBIOS qui
sont utiles ou int‚ressantes.(tout comme pour les fonctions du BIOS...)
$02 (PHYSBASE),pas de paramètre
---
PHYSBASE donne dans a0 le d‚but de la m‚moire RAM ‚cran physique.
PHYSBASE MACRO
MOVE #2,-(SP)
TRAP #14
ADDQ.L #2,SP
ENDM
$03 (LOGBASE),pas de paramètre
---
LOGBASE donne dans a0 le d‚but de la m‚moire RAM ‚cran logique.
LOGBASE MACRO
MOVE #3,-(SP)
TRAP #14
ADDQ.L #2,SP
ENDM
Pour les fonctions PHYSBASE et LOGBASE, je vous donnerais tous les d‚tails
d'utilisation et de fonctionnement dans un programme exemple qui se sert
de ces 2 fonctions.
$04 (GETREZ),pas de paramètre
---
GETREZ permet d'obtenir dans d0 la r‚solution actuelle de l'‚cran.
0=Basse r‚solution (320*200 pixels en 16 couleurs)
1=Moyenne r‚solution (640*200 pixels en 4 couleurs)
2=Haute r‚solution (640*400 pixels en monochrome)
GETREZ MACRO
MOVE #4,-(SP)
TRAP #14
ADDQ.L #2,SP
ENDM
$05 (SETSCREEN),MOT=r‚solution,L-M=physbase,L-M=logbase
---
SETSCREEN permet de modifier la r‚solution de l'‚cran,l'adresse de la
physbase et l'adresse de la logbase.
Si un de ces paramètre ne doit pas ètre modifi‚, il faut passer le
paramètre -1 à la fonction.
SETSCREEN MACRO $\1,$\2,$\3 ;MACRO à 3 paramètres
MOVE \1,-(SP) ;\1=REZ
MOVE \2,-(SP) ;\2=PHYSBASE
MOVE \3,-(SP) ;\3=LOGBASE
MOVE #5,-(SP)
TRAP #14
ADDA.L #12,SP
ENDM
Exemple d'utilisation:
SETSCREEN #1,#-1,#-1
On passe en moyenne r‚solution.
ATTENTION, passer en r‚solution inf‚rieure (par exp. de Moyenne r‚solution
en Basse r‚solution) ne permet que de disposer du nombre maximum de coul-
eurs du mode d'appel.(dans notre exp.,4 couleurs en Basse r‚solution...)
$06 (SETPALETTE),L-M=adresse de la nouvelle palette
---
SETPALETTE permet de changer les couleurs de la palette actuelle avec les
couleurs qui se trouvent à l'adresse point‚e par l'adresse paramètre.
Les valeurs qui d‚finissent les diff‚rentes couleurs doivent ètres des
MOTS et il doit y en avoir 16.
Le 1° mot d‚finit la couleur 0,le 2° mot la couleur 1 etc..
PALETTE MACRO $\1 ;MACRO à 1 paramètre
PEA \1 ;\1=adresse de la nouvelle palette.
MOVE #$6,-(SP)
TRAP #14
ADDQ.L #6,SP
ENDM
Exemple d'utilisation:
PALETTE couleurs
DATA
couleurs DC.W $000,$077,$070,$700,$234,$123,$700,$444
DC.W $444,$000,$777,$700,$070,$007,$050,$777
NB:Pour d‚finir aisement une couleur on utilise le mode h‚xad‚cimal:
-- Le chiffre des centaines repr‚sente la quantit‚ de Rouge (de 0 à 7)
Le chiffre des dixaines repr‚sente la quantit‚ de Vert (de 0 à 7)
Le chiffre des unit‚s repr‚sente la quantit‚ de Bleu (de 0 à 7)
Ainsi: $000=couleur noire
$777=couleur blanche
$700=couleur Rouge vif
$070=couleur Vert clair ...
$07 (SETCOLOR),MOT=nouvelle couleur,MOT=nr° de la couleur (0 à 15) Ã
--- changer.
SETCOLOR permet de ne changer qu'une couleur dont on fournit le nr° (de 0
à 15).
Il faut d'abord fournir à SETCOLOR la valeur que devra prendra la couleur
à changer.
COLOR MACRO $\1,$\2 ;MACRO à 2 paramètres.
MOVE \1,-(SP) ;\1=valeur à prendre
MOVE \2,-(SP) ;\2=nr° de la couleur à changer
MOVE #7,-(SP)
TRAP #14
ADDQ.L #6,SP
ENDM
Exemple d'utilisation:
COLOR #$777,#1
La couleur nr°1 sera blanche ($777)
$08 (FLOPRD),MOT=nombre de secteurs (1 à 9),MOT=face,MOT=nr° piste (0-79
--- ou 0-40),MOT=nr° du 1° secteur à lire (1-9),MOT=Drive,MOT=0,
L-M=adresse du tampon pour d‚poser les donn‚es.
FLOPRD permet de lire des secteurs sur disquette et d‚pose les donn‚es
lues dans un tampon.
Les paramètres à passer sont:
1°:Le nombre de secteurs à lire à la suite dans une piste (de 1 à 9)
2°:La face du disk conscern‚e (0=face A,1=face B pour les doubles faces)
3°:Le nr° de la piste à lire (0 à 79 ou 0 à 40 suivant le formatage)
4°:Le nr° du 1° secteur à lire (de 1 à 9)
5°:Le nr° du Drive conscern‚ (1=A,2=B...)
6°:Un mot=0
7°:L'adresse d'un tampon ou les donn‚es seront d‚pos‚es, d'une taille de
(512 octets )*( le nombre de secteurs lus )
Le tampon doit ètre situ‚ à une adresse PAIRE.
D0 retourne avec une valeur nulle si tout est OK ou avec les codes
d'erreur n‚gatifs de RWABS.
Pour obtenir quelquechose de valable il faudra bien sur là aussi mettre
cette fonction dans une boucle et faire varier les paramètres qui doivent
être chang‚s (nr° secteur...)
$0A (FLOPFMT),MOT=VIRGIN,L-M=$87654321,MOT=INTERLEAVE,MOT=face,MOT=nr° de
--- la piste,MOT=nombre de secteurs par piste,MOT=nr° Drive,MOT=
0,L-M=adresse d'un tampon d'au moins 8 KO
FLOPFMT permet de formater une disquette, il suffit de passer les para-
mètres suivants à la fonction:
1°:Le VIRGIN (c'est la valeur qui sera ‚crite au cours du formatage)
normalement,ce MOT=$E5E5
2°:Un L-M=$87654321
3°:L'INTERLEAVE qui d‚termine l'ordre dans lequel les secteurs sont ‚crits
Normalement ce MOT=1
4°:La face de la disquette à formater (0 ou ‚ventuellement 1 pour les D.F)
5°:Le nr° de la piste à formater (0 à 79)
6°:Le nombre de secteurs par piste (normalement 9)
7°:Le nr° du Drive conscern‚ (0=A,1=B...)
8°:Un MOT=0
9°:L'adresse d'un tampon d'au moins 8 KO pour un formatage avec 9 secteurs
par piste...
Le tampon doit être situ‚ à une adresse PAIRE.
D0 revient avec la valeur 0 si tout est OK ou avec un code d'erreur
n‚gatif.
$11 (RANDOM),pas de paramètre
---
RANDOM donne un nombre al‚atoir dans d0.L.
Les Bits 24 Ã 31 seront toujours nuls dans d0.
RANDOM MACRO
MOVE #$11,-(SP)
TRAP #14
ADDQ.L #2,SP
ENDM
NB:Pour Obtenir un nombre al‚atoire compris entre 2 valeurs, on peut par
-- exemple appeller RANDOM et faire un ' AND.L #max,d0 ' puis un 'ADD.L
#min,d0 ' si (max+min) est la valeur maximale et min la valeur mini-
male voulue.
Le nombre ainsi obtenu sera <=(max+min) et sera >=min.
C'est bien plus rapide que de faire plusieurs tests,plusieurs appels Ã
la fonction RANDOM et des branchements conditionnels...
$14 (SCRDMP),pas de paramètre
---
SCRDMP permet de faire une HARDCOPY de l'‚cran actuel sur imprimante.
NB:Ceci s'obtient aussi en pressant [Alternate]+[Help] ...
--
HARDCOPY MACRO
MOVE #$14,-(SP)
TRAP #14
ADDQ.L #2,SP
ENDM
$16 (SETTIME),L-M=heure et date
---
SETTIME permet de modifier l'heure ET la date de l'horloge du bureau GEM.
Le L-M paramètre a la configuration suivante:
bits 0- 4:secondes/2
bits 5-10:minutes
bits 11-15:heures
bits 16-20:jour
bits 21-24:moi
bits 25-31:(ann‚e-1980)
SETTIME MACRO $\1 ;MACRO à 1 paramètre
MOVE.L \1,-(SP) ;\1=heure+date
MOVE #$16,-(SP)
TRAP #14
ADDQ.L #6,SP
ENDM
Exemple d'utilisation:
SETTIME #%00010000001000010001000000100001
bits 0- 4:%00001*2=2 secondes
bits 5-10:%000001=1 minutes
bits 11-15:%00010=2 heures
bits 16-20:%00001=1 jour
bits 21-24:%0001=janvier
bits 25-31:%0001000=8+1980=1988
$17 (GETTIME),pas de paramètre
---
GETTIME retourne dans d0.L l'heure et la date selon le format pr‚c‚dent.
GETTIME MACRO
MOVE #$17,-(SP)
TRAP #14
ADDQ.L #2,SP
ENDM
$1A (JDSINT),MOT=nr° de l'interruption
---
JDSINT permet de bloquer l'interruption du MFP 68901 dont on indique
le nr°.
Nous utiliserons cette fonction dans le chapitre conscernant les
interruptions.
$1F (XBTIMER),L-M=adresse de la routine,MOT=registre DATA,MOT=registre
--- CONTROL,MOT=timer (A=0,B=1,C=2,D=3)
XBTIMER permet d'installer un programme sous interruption dans le TIMER
dont on a indiqu‚ le nr°.
Il suffit de passer les valeurs des registres DATA et CONTROL ainsi que
l'adresse du programme à la fonction.
Nous utiliserons XBTIMER quand nous parlerons des programmes sous inter-
ruption,patience...
$20 (DOSOUND),L-M=adresse des donn‚es
---
DOSOUND permet de jouer un son dont les donn‚es qui le d‚finissent sont
point‚e par l'adresse pass‚e en paramètre dans le pile système.
La meilleur manière d'utiliser DOSOUND est de cr‚er ses sons avec PRO
SOUND DESIGNER (Edit‚ par TRIANGLE SOFTWARE):
Il possède un ‚diteur qui sauve les sons cr‚es dans un fichier utilisa-
ble en assembleur (donn‚es DC.B).
Pour illustrer les capacit‚s de DOSOUND, vous trouverez un programme
nomm‚ SON.PRG (listing=SON.L) sur la disquette.
$23 (KEY RATE),MOT=r‚p‚tition,MOT=retard
---
KEY RATE permet de controler la r‚p‚tition des touches du clavier, le
paramètre 'r‚p‚tition' indique le temps qui s'‚coule entre 2 r‚p‚titions
de la touche, le paramètre 'retard' indique le temps qui s'‚coule avant
la mise en route de la r‚p‚tition.
Les paramètre 'r‚p‚tition' et 'retard' sont exprim‚s sous forme de
multiples de 20 ms.
Si un des 2 paramètres vaut -1, il n'est pas modifi‚ et d0 retourne les
valeurs actuelles du retard et de la r‚p‚tition sous cette forme:
Octet de poids faible de d0.W=r‚p‚tition
Octet de poids fort de d0.W=retard
KEYRATE MACRO $\1,$\2 ;MACRO à 2 paramètres
MOVE \1,-(SP) ;\1=r‚p‚tition
MOVE \2,-(SP) ;\2=retard
MOVE #$23,-(SP)
TRAP #14
ADDQ.L #6,SP
ENDM
$25 (VSYNC),pas de paramètre
---
VSYNC permet de synchroniser certaines ‚ditions graphiques en attendant
la prochaine interruption de trame.
VSYNC diminue le clignotement de l'‚cran dans certains cas o— la gestion
de l'‚cran est très charg‚e...
VSYNC MACRO
MOVE #$25,-(SP)
TRAP #14
ADDQ.L #2,SP
ENDM
$26 (SUPEXEC),L-M=adresse de la routine à executer en mode SUPERviseur
---
SUPEXEC permet l'execution d'une routine en mode superviseur, il suffit
de passer l'adresse de cette routine à SUPEXEC et de terminer la routine
par RTS.
Exemple:
PEA ici ;SUPEXEC 'ici'
MOVE #$26,-(SP)
TRAP #14
ADDQ.L #6,SP
TERM ;appel de la macro TERM du gemdos
ici ANDI.W #%1111111,SR ;necessite le MODE SUPERVISEUR
RTS
-----------------
Voilà pour ce qui est des fonctions du BIOS et de l'XBIOS, maintenant je
vous conseille très fortement de bien regarder le fichier MACROS.L qui
contient les diff‚rentes macros que nous avons cr‚‚ au cours de ces deux
derniers chapitres.
Au besoin, notez vous sur une fiche le nom des diff‚rentes MACROS et
leur utilit‚.
Quand vous vous sentirez prêts plongez dans les exercices, creusez vous
bien la tête pour chaque ‚xo., passez-y un jour ou deux s'il le faut,
ce n'est que par un travail individuel que vous pourrez progresser.
Ces exercices ne comportent pas de difficult‚s pour ceux qui connaissent
bien les instructions du 68000 et qui ont bien compris comment utiliser
les fonctions du GEMDOS,BIOS,XBIOS...
Utilisez le plus possible les MACROS que nous avons cr‚es, elle ne sont
pas là pour rien...
Si vous êtes sur que votre listing est juste et que malgr‚ tout il plante,
vous ne pourrez que vous en prendre à vous même.
Il suffit d'une minuscule petite erreur (qui passe souvent inaper‡ue),
comme mettre un L-M Ã la place d'un MOT ou faire une erreur dans les
modes d'adressage pour qu'un listing apparement correct plante à l'‚xecu-
tion. (Bien que l'assembleur ne vous indique pas qu'il y a une erreur, il
est incapable de d‚couvrir ces erreurs là : il ne d‚tecte que les erreurs
grossières et les erreurs de syntaxe.)
Il faudra alors aller à la chasse au BUG et ce n'est que si vous rentrez
bredouille, après 10 heures d'intense concentration que la correction du
listing vous sera vraiment utile.
Sachez bien qu'il n'y a pas plus minutieux et plus m‚ticuleux qu'un bon
programmeur en assembleur:il ne laissera par le moindre octet trainer
dans son listing, et il est souvent plus fier de la perfection de son
listing que du r‚sultat...
BONNE CHANCE ...
PIECHOCKI Laurent
8,impasse Bellevue exercices dans:EXOS_2.DOC
57980 TENTELING ----------
Back to ASM_Tutorial