Fonctions du line-A
Les fonctions du line-A regroupent des fonctions de base pour le graphisme.
De base implique qu'il n'y a pas toutes les fonctions que l'on peut retrouver
dans le VDI, et ne remplace donc pas le VDI. Cependant, les fonctions du Line-A
sont bien plus rapides.
Pourquoi Fonction Line-A
Au niveau du 68000, il n'existe pas d'opcode associé sur la ligne A (de même pour la ligne F). C'est à dire qu'il n'existe aucune instruction de type $Axxx en langage machine (x sur 4 bits pouvant prendre ici une valeur entre 0 et F en hexa).
L'utilisation d'une telle commande devrait donc afficher des bombes pour
dire "instructions
illégales".
Mais ce n'est pas le cas, car le vecteur d'exception associé est en
effet dérouté
sur du code permettant de gérer
des fonctions graphiques. Avantage,
pas besoin de faire de JSR ou BSR à une
fonction, vous codez l'appel à la fonction désirée directement
dans l'opcode d'où
moins de place occupée en mémoire. Lors du déclenchement
du vecteur d'exception sur l'opcode, celui-ci va vérifier l'opcode passé et
déclencher
la fonction correspondante.
Ces fonctions sont codées sur 16 bits. Les 4 bits les "plus fort" doivent
donc être égaux à A. pour déclencher
une exception n° 10 Line-A (vecteur 28). Les quatre bits suivants sont à 0.
La partie basse sur 8 bits correspondant à
la fonction à déclencher. La routine du vecteur pourra ainsi
déclencher
le code correspondant à la fonction.
Il y a en tous 16 fonctions
disponibles:
0 = Initialization: Permet de récupérer des adresses pour
les fonctions Line A
1 = Put pixel: Affiche ou efface un point à l'écran
2 = Get pixel: Récupère l'index de couleur utilisé pour
un point
3 = Line: Dessine une ligne à l'écran
4 = Horizontal line: Dessine une ligne horizontale à l'écran
5 = Filled rectangle: Dessine un rectangle rempli
6 = Line-by-line filled polygon: Dessine une ligne d'un polygone rempli
7 = BitBlt: Transfert d'un bloc de bits
8 = TextBlt: Affichage d'un texte
9 = Show mouse: Affiche le curseur de la souris
A = Hide mouse: Désactive le curseur de la souris
B = Transform mouse: Change le dessin du curseur de la souris
C = Undraw sprite: Efface un sprite de l'écran
D = Draw sprite: Dessine un sprite à l'écran
E = Copy raster form
F = Contour FILL
Cliquez sur ce lien pour le détail des fonctions
Pour utiliser ces fonctions, il faut bien évidemment pouvoir passer
des paramètres. Voici donc un tableau récapitulant toutes les
variables utilisées par ces fonctions:
Ce tableau représente le tableau retourné par le line-A lors
de son initialisation (Fonction $A000). La colonne "position" est
donc la position de l'élément dans le tableau qui contient l'adresse
des variables utilisées par le line-A.
Position (hexa) |
Nom |
Taille |
Libellé |
00 |
V_planes |
Mot |
Nombre de niveau de couleurs |
02 |
V_lin_wr |
Mot |
Nombre d'octets par ligne |
04 |
CONTRL |
Mot Long |
Adresse du tableau CONTRL |
08 |
INTIN |
Mot Long |
Adresse du tableau INTIN |
0C |
PTSIN |
Mot Long |
Adresse du tableau PTSIN |
10 |
INTOUT |
Mot Long |
Adresse du tableau INTOUT |
14 |
PTSOUT |
Mot Long |
Adresse du tableau PTSOUT |
18 |
_FG_BP_1 |
Mot |
Bit 0 de l'index de couleur |
1A |
_FG_BP_2 |
Mot |
Bit 1 de l'index de couleur |
1C |
_FG_BP_3 |
Mot |
Bit 2 de l'index de couleur |
1E |
_FG_BP_4 |
Mot |
Bit 3 de l'index de couleur |
20 |
_LSTLIN |
Mot |
-1 |
22 |
_LN_MASK |
Mot |
Motif de la ligne (Voir Line A fonction 3) |
24 |
_WRT_MODE |
Mot |
Mode affichage VDI |
26 |
_X1 |
Mot |
Coordonnée X1 |
28 |
_Y1 |
Mot |
Coordonnée Y1 |
2A |
_X2 |
Mot |
Coordonnée X2 |
2C |
_Y2 |
Mot |
Coordonnée Y2 |
2E |
_patptr |
Mot Long |
Adresse du motif de remplissage (Voir fonction 4 du line A) |
32 |
_patmsk |
Mot Long |
Adresse du masque de remplissage (Voir fonction 4 du line A) |
34 |
_multifill |
Mot |
Flag motifs de remplissage Polychrome: =0 pour un motif monochrome =1 pour un motif polychrome |
36 |
_CLIP |
Mot |
Flag pour activation/désactivation du clipping 0 pour clipping actif 1 pour clipping désactivé |
38 |
_XMN_CLIP |
Mot |
Coordonnée x du coin supérieur gauche de la fenêtre de clipping |
3A |
_YMN_CLIP |
Mot |
Coordonnée y du coin supérieur gauche de la fenêtre de clipping |
3C |
_XMX_CLIP |
Mot |
Coordonnée x du coin supérieur droit de la fenêtre de clipping |
3E |
_YMX_CLIP |
Mot |
Coordonnée y du coin supérieur droit de la fenêtre de clipping |
40 |
_XACC_DDA |
Mot |
= 8000 pour la foncion 8 du line A |
42 |
_DDA_INC |
Mot |
Facteur d'agrandissement/Réduction FFFF pour l'agrandissement |
44 |
_T_SCLSTS |
Mot |
= 1 : agrandissement = 0 : réduction |
46 |
_MONO |
Mot |
= 0 pour une police de caractères proportionnels ou largeur des caractères qui se modifie pour une écriture italique/gras = 1 pas de proportionnalité |
48 |
_sourceX |
Mot |
Valeur de l'offset horizontal pour les caractères |
4A |
_sourceY |
Mot |
= 0 (coordonnées de la source pour les fonctions raster) |
4C |
_destX |
Mot |
Coordonnée X du caractère |
4E |
_destY |
Mot |
Coordonnée Y du caractère |
50 |
_DELX |
Mot |
Largeur du caractère |
52 |
_DELY |
Mot |
Hauteur du caractère |
54 |
_FBASE |
Mot Long |
Adresse des doonées sur les fontes |
58 |
_FWIDTH |
Mot |
Largeur du rectangle utilisé pour les caractères |
5A |
_STYLE |
Mot |
Style VDI |
5C |
_LITEMASK |
Mot |
Masque pour les différences d'intensité |
5E |
_SKEWMASK |
Mot |
Masque pour écriture italique |
60 |
_WEIGHT |
Mot |
Valeur de décalage pour écriture large |
62 |
_R_OFF |
Mot |
Offset pour écriture italique |
64 |
_L_OFF |
Mot |
Offset pour écriture italique |
66 |
_SCALE |
Mot |
Agrandissement (0 => pas d'agrandissement) |
68 |
_CHUP |
Mot |
Angle de rotation des caractères en 1/10 de degré |
6A |
_TEXT_FG |
Mot |
Couleur actuelle du texte |
6C |
_scrtchp |
Mot Long |
Adresse du tampon de texte pour les effets |
70 |
_scrpt2 |
Mot |
Offset sur le tampon d'agrandissement |
72 |
_TEXT_BG |
Mot |
Couleur arrière plan du texte |
74 |
_COPYTRAN |
Mot |
|
...