diff --git a/doc/API.md b/doc/API.md index 091afef..884e4d8 100644 --- a/doc/API.md +++ b/doc/API.md @@ -1,5 +1,9 @@ # API +Le système utilise plusieurs macro *GFX*,*GUI*, etc pour appeler les fonctions du driver via une table de saut. + +Les arguments sont passés sur la pile (Convention C : dernier argument empilé en premier, nettoyage par l'appelant géré par la macro). + * [CGA](/doc/CGA.md) controleur graphique @@ -7,10 +11,18 @@ Le projet utilise une extension de la BDA standard IBM PC. - Segment BDA Standard : 0x0040 + Segment BDA Standard : 0x0040 (comme nous appelons le bios VGA, il faut garder cet espace "libre") Segment Données Custom : 0x0050 (Défini par BDA_DATA_SEG). +## Structure des données (BDA 0x0050) + +Les structures sont définies dans bda.asm. + + OFFSET 0x0000 (Mouse) : État de la souris, coordonnées (x,y), buffer d'arrière-plan. + + OFFSET 0x0034 (Gfx) : Position courante du curseur texte, modes d'affichage. + ## Mapping Mémoire Global : 0000:0000 : IVT (Interrupt Vector Table) diff --git a/doc/CGA.md b/doc/CGA.md index 5ac03dd..be38aec 100644 --- a/doc/CGA.md +++ b/doc/CGA.md @@ -13,13 +13,33 @@ call [graph_driver + ID*2]. Les arguments sont empilés selon la convention C (dernier argument poussé en premier). -| ID | Macro / Constante | Arguments (pile) | Description | +## Liste des fonctions disponibles + +| Index | Commande | Arguments | Description | | - | - | - | - | -| 0 | INIT | Aucun | Initialise le mode vidéo 0x06, efface l'écran (damier) et initialise la souris. | -| 1 | PUTPIXEL | WORD x, WORD y, BYTE couleur | Dessine un pixel. 0 (Noir), !=0 (Blanc). | -2 | GETPIXEL | WORD x, WORD y | Retourne la couleur du pixel dans AL (0 ou 1). | -| 3 | GOTOXY |WORD x, WORD y | Positionne le curseur de texte graphique aux coordonnées pixels données.| -| 4 | TXT_MODE | Mode | Définit le mode d'écriture du texte (voir Modes Texte ci-dessous). | -| 5 | PUTCH | char | Affiche un caractère à la position courante et avance le curseur. -| 6 | WRITE | segment, offset | Affiche une chaîne de caractères terminée par 0 (ASCIIZ). | -| 7 | GFX_CRS_UPDATE | Aucun | Force la mise à jour visuelle du curseur souris (copie background -> draw).| \ No newline at end of file +| 00 | INIT | Aucun | "Initialise le mode vidéo 0x06, efface l'écran et installe le motif de fond."| +| 01 | PUTPIXEL | "x (word), y (word) | color (byte)", "Dessine un pixel aux coordonnées (x, y). 0=Noir , !0=Blanc." | +| 02 | GETPIXEL | "x (word), y (word)" | Retourne la couleur du pixel dans AL (0 ou 1). | +| 03 | GOTOXY | "x (word), y (word)" | Positionne le curseur texte interne (en pixels). | +| 04 | TXT_MODE | mode (word) | "Définit le mode d'écriture texte.Bits :0: Couleur (0=Noir, 1=Blanc)1: Transparence (1=Transparent | 0=Opaque)" | +| 05 | PUTCH | char (word) | Affiche un caractère ASCII à la position courante et avance le curseur de 8px. | +| 06 | WRITE | "seg (word) | offset (word)" | Affiche une chaîne de caractères terminée par 0 (ASCIIZ) pointée par seg:offset. | +| 07 | LINE_VERT | "x, y1, y2, color" | Dessine une ligne verticale de y1 à y2 à la position x. | +| 08 | LINE_HORIZ | "x1, x2, y, color" | Dessine une ligne horizontale de x1 à x2 à la hauteur y. Optimisé par octet. | +| 09 | RECTANGLE_DRAW | "x1, y1, x2, y2, color" | Dessine le contour d'un rectangle. | +| 10 | RECTANGLE_FILL | "x1, y1, x2, y2, color" | Dessine un rectangle plein (rempli). | +| 11 | MOUSE_HIDE | Aucun | Cache le curseur souris et restaure l'arrière-plan. Gère un compteur interne (récursif). | +| 12 | MOUSE_SHOW | Aucun | Sauvegarde l'arrière-plan et affiche le curseur souris. Gère un compteur interne. | +| 13 | MOUSE_MOVE | Aucun | Force le rafraîchissement visuel du curseur souris (Efface -> Sauve fond -> Affiche). | + +## Constantes Utiles (Texte) + +Ces constantes sont utilisées avec la commande TXT_MODE. + + *GFX_TXT_WHITE_TRANSPARENT* (0) : Texte blanc, fond inchangé. + + *GFX_TXT_BLACK_TRANSPARENT* (1) : Texte noir, fond inchangé. + + *GFX_TXT_WHITE* (2) : Texte blanc sur fond noir (écrasement). + + *GFX_TXT_BLACK* (3) : Texte noir sur fond blanc (écrasement). diff --git a/src/bda.asm b/src/bda.asm index 0e357dc..d230208 100644 --- a/src/bda.asm +++ b/src/bda.asm @@ -35,15 +35,6 @@ %define BDA_VIDEO_COLUMNS 0x004A %define BDA_VIDEO_BUF_SIZE 0x004C %define BDA_VIDEO_OFS_PAGE 0x004E - -; keyboard related information -%define BDA_KBD_HEAD 0x0080 ; byte -%define BDA_KBD_TAIL 0x0081 ; byte -%define BDA_KBD_FLAGS 0x0082 ; byte: bit0=shift, bit1=ctrl, bit2=alt, bit3=caps, bit4=ext(E0) -%define BDA_KBD_BUF 0x0090 ; buffer circulaire (par ex 32 entrées *2 = 64 bytes) - -%define KBD_BUF_MASK 0x1F ; 32 entrées => index 0..31 - ; ; information relative à la souris ; diff --git a/src/boot.asm b/src/boot.asm index cbce61a..63550c2 100644 --- a/src/boot.asm +++ b/src/boot.asm @@ -41,8 +41,8 @@ section .text bits 16 -;%include "./common/chartable.asm" -;%include "./common/cursor.asm" +%include "./common/chartable.asm" +%include "./common/cursor.asm" ; definition du BDA %include "./bda.asm" diff --git a/src/drivers/gfx_cgam.asm b/src/drivers/gfx_cgam.asm index b726fb3..dbdd7be 100644 --- a/src/drivers/gfx_cgam.asm +++ b/src/drivers/gfx_cgam.asm @@ -32,10 +32,6 @@ %define CGA_STRIDE 80 %define CGA_ODD_BANK 0x2000 -; décommenter cette constante si vous voulez un mode aligné/non alligné différent -; sinon le code utilisé sera toujours "shifted" -; %define FULL_MODE_ALLIGNED 1 - ; ; bit : descr ; 0 : text color : 0=black, 1=white @@ -109,10 +105,6 @@ graph_driver: dw cga_mouse_hide ; déplacement du curseur dw cga_mouse_show ; déplacement du curseur dw cga_mouse_cursor_move ; déplacement du curseur - -%include "./common/cursor.asm" -%include "./common/chartable.asm" - ; ; convert al -> AX aligned with "cl" %macro ALING_BYTE 0 diff --git a/src/drivers/mouse_ps2.asm b/src/drivers/mouse_ps2.asm index 2dcf766..9a7ad2c 100644 --- a/src/drivers/mouse_ps2.asm +++ b/src/drivers/mouse_ps2.asm @@ -356,7 +356,7 @@ isr_mouse_handler: ; check si il y a un 4eme byte a traiter mov al, [BDA_MOUSE + mouse.packetlen] cmp al,4 - jne .done_eoi + jne .done ; si packetlen = 4, gérer la molette; experimental et non fonctionnel movsx ax, byte [BDA_MOUSE + mouse.buffer+3] ; delta Wheel