update documentations

This commit is contained in:
Frater 2026-01-30 20:20:50 +01:00
commit 2555203968
6 changed files with 45 additions and 30 deletions

View file

@ -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)

View file

@ -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).|
| 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).

View file

@ -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
;

View file

@ -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"

View file

@ -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

View file

@ -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