Pl2 BIOS.DOC/fr: Difference between revisions
Jump to navigation
Jump to search
No edit summary |
Olivier.jan (talk | contribs) mNo edit summary |
||
(4 intermediate revisions by 2 users not shown) | |||
Line 1: | Line 1: | ||
+ | {{Languages|Pl2 BIOS.DOC}} |
||
<pre> |
<pre> |
||
Line 16: | Line 17: | ||
----------------------------- |
----------------------------- |
||
− | - Toutes les remarques |
+ | - Toutes les remarques précédentes conscernant les fonctions du GEMDOS |
sont encore valables pour les fonctions du BIOS: |
sont encore valables pour les fonctions du BIOS: |
||
Line 26: | Line 27: | ||
− | - Je vais maintenant |
+ | - Je vais maintenant enumérer et commenter les fonctions du BIOS qui sont |
− | utiles ou |
+ | utiles ou intéressantes.(tout comme pour les fonctions du GEMDOS...) |
Line 33: | Line 34: | ||
− | $04 (RWABS),MOT= |
+ | $04 (RWABS),MOT=unité de disquette,MOT=nr°secteur début,MOT=nombre de sec- |
− | --- teurs à lire ou à |
+ | --- teurs à lire ou à écrire,L-M=adresse d'un tampon,MOT=mode |
− | RWABS permet d' |
+ | RWABS permet d'écrire ou lire des secteurs sur disquette. |
Les paramètres à passer sont: |
Les paramètres à passer sont: |
||
− | 1°:Le nr° de l' |
+ | 1°:Le nr° de l'unité de disquette conscernée: |
0=Drive A,1=Drive B,2=Disque dur |
0=Drive A,1=Drive B,2=Disque dur |
||
− | 2°:Le nr° du secteur ou RWABS doit |
+ | 2°:Le nr° du secteur ou RWABS doit débuter l'opération |
− | 3°:Le nombre de secteurs à lire ou à |
+ | 3°:Le nombre de secteurs à lire ou à écrire |
− | 4°:L'adresse du tampon de |
+ | 4°:L'adresse du tampon de données à lire ou à écrire selon le cas. |
La taille d'un secteur est de 512 octets. |
La taille d'un secteur est de 512 octets. |
||
5°:Le mode d'action de RWABS: |
5°:Le mode d'action de RWABS: |
||
0=lecture des secteurs |
0=lecture des secteurs |
||
− | 1= |
+ | 1=écriture des secteurs |
2=lecture (ne tient pas compte d'un changement de disquette lors de |
2=lecture (ne tient pas compte d'un changement de disquette lors de |
||
− | l' |
+ | l'opération) |
− | 3= |
+ | 3=écriture (ne tient pas compte d'un changement de disquette lors de |
− | l' |
+ | l'opération) |
RWABS retourne dans d0 une valeur nulle si tout est OK, ou un code |
RWABS retourne dans d0 une valeur nulle si tout est OK, ou un code |
||
− | d'erreur |
+ | d'erreur négatif dont la valeur peut ètre: |
-1=plantage |
-1=plantage |
||
Line 62: | Line 63: | ||
-4=erreur CRC |
-4=erreur CRC |
||
-5=ordre incorrect |
-5=ordre incorrect |
||
− | -6=piste non |
+ | -6=piste non trouvée |
− | -7=bootsector |
+ | -7=bootsector endommagé |
− | -8=secteur non |
+ | -8=secteur non trouvé |
− | -10=erreur d' |
+ | -10=erreur d'écriture |
-11=erreur de lecture |
-11=erreur de lecture |
||
− | -13=disquette |
+ | -13=disquette protégée en écriture |
− | -14=disquette |
+ | -14=disquette changée pendant la lecture ou l'écriture |
− | -15= |
+ | -15=périphérique inconnu |
− | -16= |
+ | -16=vérification d'un secteur mal écrit |
-17=pas de disquette |
-17=pas de disquette |
||
MOVE #0,-(SP) ;DRIVE A |
MOVE #0,-(SP) ;DRIVE A |
||
− | MOVE #0,-(SP) ; |
+ | MOVE #0,-(SP) ;début au secteur 0 |
MOVE #10,-(SP) ;10 secteurs |
MOVE #10,-(SP) ;10 secteurs |
||
− | PEA tampon ;adresse des |
+ | PEA tampon ;adresse des données |
− | MOVE #1,-(SP) ; |
+ | MOVE #1,-(SP) ;écriture |
MOVE #4,-(SP) |
MOVE #4,-(SP) |
||
TRAP #13 |
TRAP #13 |
||
Line 84: | Line 85: | ||
DATA |
DATA |
||
− | tampon DS.B 5120 ; les |
+ | tampon DS.B 5120 ; les données à écrire sur les 10 secteurs |
; 10 secteurs=512*10 octets |
; 10 secteurs=512*10 octets |
||
Line 91: | Line 92: | ||
--- |
--- |
||
SETEXEC permet de changer la valeur d'un vecteur d'exeption. |
SETEXEC permet de changer la valeur d'un vecteur d'exeption. |
||
− | (J'expliquerais en |
+ | (J'expliquerais en détail dans un chapitre sur les VECTEURS D'EXEPTION) |
PEA nouveau ;nouvelle adresse |
PEA nouveau ;nouvelle adresse |
||
− | MOVE #10,-(SP) ;10=instruction |
+ | MOVE #10,-(SP) ;10=instruction illégale |
MOVE #5,-(SP) |
MOVE #5,-(SP) |
||
TRAP #13 |
TRAP #13 |
||
Line 101: | Line 102: | ||
$09 (MEDIACH),MOT=nr° du drive |
$09 (MEDIACH),MOT=nr° du drive |
||
--- |
--- |
||
− | MEDIACH permet de savoir si une disquette a |
+ | MEDIACH permet de savoir si une disquette a été sortie ou introduite dans |
− | le lecteur de disquette dont on |
+ | 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 |
+ | Cette fonction marche seulement si la disquette n'est PAS protégée en |
− | + | écriture... |
|
D0 retourne avec: |
D0 retourne avec: |
||
− | 0 si la disquette a |
+ | 0 si la disquette a été maintenue. |
− | 1 si la disquette a des chances d'avoir |
+ | 1 si la disquette a des chances d'avoir été changée (incertain). |
− | 2 si la disquette a |
+ | 2 si la disquette a été changée. |
− | MEDIACH oppère un test depuis le |
+ | MEDIACH oppère un test depuis le début de l'execution du programme et à |
− | intervalles |
+ | intervalles réguliers. |
− | (Regardez la |
+ | (Regardez la lumiére du LED rouge du lecteur de disquette clignoter très |
− | faiblement à intervalles |
+ | faiblement à intervalles réguliers quand le lecteur est au repos...) |
CHANGED MACRO $\1 ;MACRO à 1 paramètre (MEDIACH) |
CHANGED MACRO $\1 ;MACRO à 1 paramètre (MEDIACH) |
||
Line 126: | Line 127: | ||
Exemple d'utilisation: |
Exemple d'utilisation: |
||
− | CHANGED #1 ;la disquette du drive A a-t-elle |
+ | CHANGED #1 ;la disquette du drive A a-t-elle été |
− | ; |
+ | ;changée? |
$0A (DRVMAP),pas de paramètre |
$0A (DRVMAP),pas de paramètre |
||
--- |
--- |
||
− | Cette fonction retourne dans d0 les |
+ | Cette fonction retourne dans d0 les différents lecteurs de disquettes |
+ | connectés. |
||
− | connect‚s. |
||
Le bit nr°X de d0 est actif quand le drive nr°X est disponible. |
Le bit nr°X de d0 est actif quand le drive nr°X est disponible. |
||
(0=Drive A,1=Drive B...) |
(0=Drive A,1=Drive B...) |
||
Line 154: | Line 155: | ||
$0B (GETSHIFT),MOT=-1 |
$0B (GETSHIFT),MOT=-1 |
||
--- |
--- |
||
− | GETSHIFT permet d'obtenir l' |
+ | GETSHIFT permet d'obtenir l'état de certaines touches qui peuvent pas |
− | être |
+ | être détectées par les autres fonctions d'attente de touche. |
− | Il faut passer à GETSHIFT un mot=-1 par l' |
+ | 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- |
système pour obtenir dans d0.B un octet dont les bits ont la signi- |
||
fication suivante: |
fication suivante: |
||
Line 171: | Line 172: | ||
6 :Insert (ou touche gauche de la souris) |
6 :Insert (ou touche gauche de la souris) |
||
− | Si le bit est actif,la touche correspondante est |
+ | Si le bit est actif,la touche correspondante est activée. |
GETSHIFT MACRO $\1 ;MACRO a 1 paramètre |
GETSHIFT MACRO $\1 ;MACRO a 1 paramètre |
||
− | MOVE \1,-(SP) ;\1=-1 pour l' |
+ | MOVE \1,-(SP) ;\1=-1 pour l'état des touches |
MOVE #$B,-(SP) |
MOVE #$B,-(SP) |
||
TRAP #13 |
TRAP #13 |
||
Line 183: | Line 184: | ||
test GETSHIFT |
test GETSHIFT |
||
− | BTST #2,D0 ;a-t-on |
+ | BTST #2,D0 ;a-t-on enfoncé la touche Control ? |
BEQ test ;si Bit=0:Z=1=non=retest |
BEQ test ;si Bit=0:Z=1=non=retest |
||
Line 192: | Line 193: | ||
------------------------------ |
------------------------------ |
||
− | - Toutes les remarques |
+ | - Toutes les remarques précédentes conscernant les fonctions du BIOS |
sont encore valables pour les fonctions du XBIOS: |
sont encore valables pour les fonctions du XBIOS: |
||
Line 202: | Line 203: | ||
− | - Je vais maintenant |
+ | - Je vais maintenant enumérer et commenter les fonctions du XBIOS qui |
− | sont utiles ou |
+ | sont utiles ou intéressantes.(tout comme pour les fonctions du BIOS...) |
$02 (PHYSBASE),pas de paramètre |
$02 (PHYSBASE),pas de paramètre |
||
--- |
--- |
||
− | PHYSBASE donne dans a0 le |
+ | PHYSBASE donne dans a0 le début de la mémoire RAM écran physique. |
PHYSBASE MACRO |
PHYSBASE MACRO |
||
Line 218: | Line 219: | ||
$03 (LOGBASE),pas de paramètre |
$03 (LOGBASE),pas de paramètre |
||
--- |
--- |
||
− | LOGBASE donne dans a0 le |
+ | LOGBASE donne dans a0 le début de la mémoire RAM écran logique. |
LOGBASE MACRO |
LOGBASE MACRO |
||
Line 226: | Line 227: | ||
ENDM |
ENDM |
||
− | Pour les fonctions PHYSBASE et LOGBASE, je vous donnerais tous les |
+ | 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 |
d'utilisation et de fonctionnement dans un programme exemple qui se sert |
||
de ces 2 fonctions. |
de ces 2 fonctions. |
||
Line 233: | Line 234: | ||
$04 (GETREZ),pas de paramètre |
$04 (GETREZ),pas de paramètre |
||
--- |
--- |
||
− | GETREZ permet d'obtenir dans d0 la |
+ | GETREZ permet d'obtenir dans d0 la résolution actuelle de l'écran. |
− | 0=Basse |
+ | 0=Basse résolution (320*200 pixels en 16 couleurs) |
− | 1=Moyenne |
+ | 1=Moyenne résolution (640*200 pixels en 4 couleurs) |
− | 2=Haute |
+ | 2=Haute résolution (640*400 pixels en monochrome) |
GETREZ MACRO |
GETREZ MACRO |
||
Line 246: | Line 247: | ||
− | $05 (SETSCREEN),MOT= |
+ | $05 (SETSCREEN),MOT=résolution,L-M=physbase,L-M=logbase |
--- |
--- |
||
− | SETSCREEN permet de modifier la |
+ | SETSCREEN permet de modifier la résolution de l'écran,l'adresse de la |
physbase et l'adresse de la logbase. |
physbase et l'adresse de la logbase. |
||
− | Si un de ces paramètre ne doit pas ètre |
+ | Si un de ces paramètre ne doit pas ètre modifié, il faut passer le |
paramètre -1 à la fonction. |
paramètre -1 à la fonction. |
||
Line 266: | Line 267: | ||
SETSCREEN #1,#-1,#-1 |
SETSCREEN #1,#-1,#-1 |
||
− | On passe en moyenne |
+ | On passe en moyenne résolution. |
− | ATTENTION, passer en |
+ | ATTENTION, passer en résolution inférieure (par exp. de Moyenne résolution |
− | en Basse |
+ | 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 |
+ | eurs du mode d'appel.(dans notre exp.,4 couleurs en Basse résolution...) |
Line 276: | Line 277: | ||
--- |
--- |
||
SETPALETTE permet de changer les couleurs de la palette actuelle avec les |
SETPALETTE permet de changer les couleurs de la palette actuelle avec les |
||
− | couleurs qui se trouvent à l'adresse |
+ | couleurs qui se trouvent à l'adresse pointée par l'adresse paramètre. |
− | Les valeurs qui |
+ | Les valeurs qui définissent les différentes couleurs doivent ètres des |
MOTS et il doit y en avoir 16. |
MOTS et il doit y en avoir 16. |
||
− | Le 1° mot |
+ | Le 1° mot définit la couleur 0,le 2° mot la couleur 1 etc.. |
PALETTE MACRO $\1 ;MACRO à 1 paramètre |
PALETTE MACRO $\1 ;MACRO à 1 paramètre |
||
Line 297: | Line 298: | ||
DC.W $444,$000,$777,$700,$070,$007,$050,$777 |
DC.W $444,$000,$777,$700,$070,$007,$050,$777 |
||
− | NB:Pour |
+ | NB:Pour définir aisement une couleur on utilise le mode héxadécimal: |
− | -- Le chiffre des centaines |
+ | -- Le chiffre des centaines représente la quantité de Rouge (de 0 à 7) |
− | Le chiffre des dixaines |
+ | Le chiffre des dixaines représente la quantité de Vert (de 0 à 7) |
− | Le chiffre des |
+ | Le chiffre des unités représente la quantité de Bleu (de 0 à 7) |
Ainsi: $000=couleur noire |
Ainsi: $000=couleur noire |
||
Line 333: | Line 334: | ||
$08 (FLOPRD),MOT=nombre de secteurs (1 à 9),MOT=face,MOT=nr° piste (0-79 |
$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, |
--- ou 0-40),MOT=nr° du 1° secteur à lire (1-9),MOT=Drive,MOT=0, |
||
− | L-M=adresse du tampon pour |
+ | L-M=adresse du tampon pour déposer les données. |
− | FLOPRD permet de lire des secteurs sur disquette et |
+ | FLOPRD permet de lire des secteurs sur disquette et dépose les données |
lues dans un tampon. |
lues dans un tampon. |
||
Line 341: | Line 342: | ||
1°:Le nombre de secteurs à lire à la suite dans une piste (de 1 à 9) |
1°:Le nombre de secteurs à lire à la suite dans une piste (de 1 à 9) |
||
− | 2°:La face du disk |
+ | 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) |
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) |
4°:Le nr° du 1° secteur à lire (de 1 à 9) |
||
− | 5°:Le nr° du Drive |
+ | 5°:Le nr° du Drive conscerné (1=A,2=B...) |
6°:Un mot=0 |
6°:Un mot=0 |
||
− | 7°:L'adresse d'un tampon ou les |
+ | 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 ) |
(512 octets )*( le nombre de secteurs lus ) |
||
− | Le tampon doit ètre |
+ | Le tampon doit ètre situé à une adresse PAIRE. |
D0 retourne avec une valeur nulle si tout est OK ou avec les codes |
D0 retourne avec une valeur nulle si tout est OK ou avec les codes |
||
− | d'erreur |
+ | d'erreur négatifs de RWABS. |
Pour obtenir quelquechose de valable il faudra bien sur là aussi mettre |
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 |
cette fonction dans une boucle et faire varier les paramètres qui doivent |
||
− | être |
+ | être changés (nr° secteur...) |
Line 366: | Line 367: | ||
mètres suivants à la fonction: |
mètres suivants à la fonction: |
||
− | 1°:Le VIRGIN (c'est la valeur qui sera |
+ | 1°:Le VIRGIN (c'est la valeur qui sera écrite au cours du formatage) |
normalement,ce MOT=$E5E5 |
normalement,ce MOT=$E5E5 |
||
2°:Un L-M=$87654321 |
2°:Un L-M=$87654321 |
||
− | 3°:L'INTERLEAVE qui |
+ | 3°:L'INTERLEAVE qui détermine l'ordre dans lequel les secteurs sont écrits |
Normalement ce MOT=1 |
Normalement ce MOT=1 |
||
− | 4°:La face de la disquette à formater (0 ou |
+ | 4°:La face de la disquette à formater (0 ou éventuellement 1 pour les D.F) |
5°:Le nr° de la piste à formater (0 à 79) |
5°:Le nr° de la piste à formater (0 à 79) |
||
6°:Le nombre de secteurs par piste (normalement 9) |
6°:Le nombre de secteurs par piste (normalement 9) |
||
− | 7°:Le nr° du Drive |
+ | 7°:Le nr° du Drive conscerné (0=A,1=B...) |
8°:Un MOT=0 |
8°:Un MOT=0 |
||
9°:L'adresse d'un tampon d'au moins 8 KO pour un formatage avec 9 secteurs |
9°:L'adresse d'un tampon d'au moins 8 KO pour un formatage avec 9 secteurs |
||
par piste... |
par piste... |
||
− | Le tampon doit être |
+ | Le tampon doit être situé à une adresse PAIRE. |
D0 revient avec la valeur 0 si tout est OK ou avec un code d'erreur |
D0 revient avec la valeur 0 si tout est OK ou avec un code d'erreur |
||
+ | négatif. |
||
− | n‚gatif. |
||
$11 (RANDOM),pas de paramètre |
$11 (RANDOM),pas de paramètre |
||
--- |
--- |
||
− | RANDOM donne un nombre |
+ | RANDOM donne un nombre aléatoir dans d0.L. |
Les Bits 24 à 31 seront toujours nuls dans d0. |
Les Bits 24 à 31 seront toujours nuls dans d0. |
||
Line 395: | Line 396: | ||
ENDM |
ENDM |
||
− | NB:Pour Obtenir un nombre |
+ | 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 |
-- 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- |
#min,d0 ' si (max+min) est la valeur maximale et min la valeur mini- |
||
Line 407: | Line 408: | ||
$14 (SCRDMP),pas de paramètre |
$14 (SCRDMP),pas de paramètre |
||
--- |
--- |
||
− | SCRDMP permet de faire une HARDCOPY de l' |
+ | SCRDMP permet de faire une HARDCOPY de l'écran actuel sur imprimante. |
NB:Ceci s'obtient aussi en pressant [Alternate]+[Help] ... |
NB:Ceci s'obtient aussi en pressant [Alternate]+[Help] ... |
||
Line 430: | Line 431: | ||
bits 16-20:jour |
bits 16-20:jour |
||
bits 21-24:moi |
bits 21-24:moi |
||
− | bits 25-31:( |
+ | bits 25-31:(année-1980) |
SETTIME MACRO $\1 ;MACRO à 1 paramètre |
SETTIME MACRO $\1 ;MACRO à 1 paramètre |
||
Line 453: | Line 454: | ||
$17 (GETTIME),pas de paramètre |
$17 (GETTIME),pas de paramètre |
||
--- |
--- |
||
− | GETTIME retourne dans d0.L l'heure et la date selon le format |
+ | GETTIME retourne dans d0.L l'heure et la date selon le format précédent. |
GETTIME MACRO |
GETTIME MACRO |
||
Line 475: | Line 476: | ||
XBTIMER permet d'installer un programme sous interruption dans le TIMER |
XBTIMER permet d'installer un programme sous interruption dans le TIMER |
||
− | dont on a |
+ | dont on a indiqué le nr°. |
Il suffit de passer les valeurs des registres DATA et CONTROL ainsi que |
Il suffit de passer les valeurs des registres DATA et CONTROL ainsi que |
||
l'adresse du programme à la fonction. |
l'adresse du programme à la fonction. |
||
Line 483: | Line 484: | ||
− | $20 (DOSOUND),L-M=adresse des |
+ | $20 (DOSOUND),L-M=adresse des données |
--- |
--- |
||
− | DOSOUND permet de jouer un son dont les |
+ | 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 |
+ | La meilleur manière d'utiliser DOSOUND est de créer ses sons avec PRO |
− | SOUND DESIGNER ( |
+ | SOUND DESIGNER (Edité par TRIANGLE SOFTWARE): |
− | Il possède un |
+ | Il possède un éditeur qui sauve les sons crées dans un fichier utilisa- |
− | ble en assembleur ( |
+ | ble en assembleur (données DC.B). |
− | Pour illustrer les |
+ | Pour illustrer les capacités de DOSOUND, vous trouverez un programme |
− | + | nommé SON.PRG (listing=SON.L) sur la disquette. |
|
− | $23 (KEY RATE),MOT= |
+ | $23 (KEY RATE),MOT=répétition,MOT=retard |
--- |
--- |
||
− | KEY RATE permet de controler la |
+ | KEY RATE permet de controler la répétition des touches du clavier, le |
− | paramètre ' |
+ | 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' |
+ | de la touche, le paramètre 'retard' indique le temps qui s'écoule avant |
− | la mise en route de la |
+ | la mise en route de la répétition. |
− | Les paramètre ' |
+ | Les paramètre 'répétition' et 'retard' sont exprimés sous forme de |
multiples de 20 ms. |
multiples de 20 ms. |
||
− | Si un des 2 paramètres vaut -1, il n'est pas |
+ | Si un des 2 paramètres vaut -1, il n'est pas modifié et d0 retourne les |
− | valeurs actuelles du retard et de la |
+ | valeurs actuelles du retard et de la répétition sous cette forme: |
− | Octet de poids faible de d0.W= |
+ | Octet de poids faible de d0.W=répétition |
Octet de poids fort de d0.W=retard |
Octet de poids fort de d0.W=retard |
||
KEYRATE MACRO $\1,$\2 ;MACRO à 2 paramètres |
KEYRATE MACRO $\1,$\2 ;MACRO à 2 paramètres |
||
− | MOVE \1,-(SP) ;\1= |
+ | MOVE \1,-(SP) ;\1=répétition |
MOVE \2,-(SP) ;\2=retard |
MOVE \2,-(SP) ;\2=retard |
||
MOVE #$23,-(SP) |
MOVE #$23,-(SP) |
||
Line 522: | Line 523: | ||
$25 (VSYNC),pas de paramètre |
$25 (VSYNC),pas de paramètre |
||
--- |
--- |
||
− | VSYNC permet de synchroniser certaines |
+ | VSYNC permet de synchroniser certaines éditions graphiques en attendant |
la prochaine interruption de trame. |
la prochaine interruption de trame. |
||
− | VSYNC diminue le clignotement de l' |
+ | VSYNC diminue le clignotement de l'écran dans certains cas o— la gestion |
− | de l' |
+ | de l'écran est très chargée... |
Line 558: | Line 559: | ||
Voilà pour ce qui est des fonctions du BIOS et de l'XBIOS, maintenant je |
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 |
vous conseille très fortement de bien regarder le fichier MACROS.L qui |
||
− | contient les |
+ | contient les différentes macros que nous avons créé au cours de ces deux |
derniers chapitres. |
derniers chapitres. |
||
− | Au besoin, notez vous sur une fiche le nom des |
+ | Au besoin, notez vous sur une fiche le nom des différentes MACROS et |
− | leur |
+ | leur utilité. |
Quand vous vous sentirez prêts plongez dans les exercices, creusez vous |
Quand vous vous sentirez prêts plongez dans les exercices, creusez vous |
||
− | bien la tête pour chaque |
+ | 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. |
ce n'est que par un travail individuel que vous pourrez progresser. |
||
− | Ces exercices ne comportent pas de |
+ | Ces exercices ne comportent pas de difficultés pour ceux qui connaissent |
bien les instructions du 68000 et qui ont bien compris comment utiliser |
bien les instructions du 68000 et qui ont bien compris comment utiliser |
||
les fonctions du GEMDOS,BIOS,XBIOS... |
les fonctions du GEMDOS,BIOS,XBIOS... |
||
− | Utilisez le plus possible les MACROS que nous avons |
+ | Utilisez le plus possible les MACROS que nous avons crées, elle ne sont |
pas là pour rien... |
pas là pour rien... |
||
− | Si vous êtes sur que votre listing est juste et que |
+ | 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. |
vous ne pourrez que vous en prendre à vous même. |
||
Il suffit d'une minuscule petite erreur (qui passe souvent inaper‡ue), |
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 |
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' |
+ | 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 |
tion. (Bien que l'assembleur ne vous indique pas qu'il y a une erreur, il |
||
− | est incapable de |
+ | est incapable de découvrir ces erreurs là: il ne détecte que les erreurs |
grossières et les erreurs de syntaxe.) |
grossières et les erreurs de syntaxe.) |
||
Line 586: | Line 587: | ||
listing vous sera vraiment utile. |
listing vous sera vraiment utile. |
||
− | Sachez bien qu'il n'y a pas plus minutieux et plus |
+ | 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 |
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 |
dans son listing, et il est souvent plus fier de la perfection de son |
||
− | listing que du |
+ | listing que du résultat... |
BONNE CHANCE ... |
BONNE CHANCE ... |
||
Line 606: | Line 607: | ||
</pre> |
</pre> |
||
Back to [[ASM_Tutorial]] |
Back to [[ASM_Tutorial]] |
||
+ | [[Category: ASSEMBLEUR 68000 sur ATARI ST Part 2]] |
Latest revision as of 21:06, 17 December 2023
-------------------- 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