From 36cf876338701b8191e3f4c7059fc2f7fec6a27e Mon Sep 17 00:00:00 2001 From: Frater <13979047+saintfrater@users.noreply.github.com> Date: Tue, 20 Jan 2026 21:25:31 +0100 Subject: [PATCH] fixing mouse struc + gfx --- src/drivers/gfx_cgam.asm | 61 +++++++++++++++++++++++++++++++++++---- src/drivers/mouse_ps2.asm | 6 ++-- 2 files changed, 59 insertions(+), 8 deletions(-) diff --git a/src/drivers/gfx_cgam.asm b/src/drivers/gfx_cgam.asm index 83ee555..bf65f60 100644 --- a/src/drivers/gfx_cgam.asm +++ b/src/drivers/gfx_cgam.asm @@ -32,6 +32,34 @@ %define CGA_STRIDE 80 %define CGA_ODD_BANK 0x2000 +; ------------------------------------------------------------ +; TABLE DE SAUT (VECTEURS API) +; Cette table doit être située au début du driver pour être +; accessible par la GUI à des offsets fixes. +; ------------------------------------------------------------ +gfx_api_table: + jmp gfx_init ; Offset +0: Initialisation + jmp gfx_putpixel ; Offset +3: Dessin pixel + jmp gfx_getpixel ; Offset +6: Lecture pixel + jmp gfx_fill_rect ; Offset +9: Remplissage rectangle (Nouveau) + jmp gfx_invert_rect ; Offset +12: Inversion (Nouveau pour Menus) + jmp gfx_draw_hline ; Offset +15: Ligne horizontale rapide (Nouveau) + +; ------------------------------------------------------------ +; COMMENTAIRE SUR LA MÉTHODE D'APPEL +; +; Pour appeler une fonction du driver depuis votre GUI : +; 1. Définissez l'adresse de base du driver (ex: GFX_DRIVER_BASE) +; 2. Utilisez un call indirect via l'offset de la table. +; +; Exemple en ASM pour remplir un rectangle : +; call [GFX_DRIVER_BASE + 9] ; Appelle gfx_fill_rect +; +; Cette méthode isole totalement votre bibliothèque GUI du driver. +; Si vous changez le code du driver, tant que la table au début +; ne change pas d'ordre, la GUI n'a pas besoin d'être recompilée. +; ------------------------------------------------------------ + ; ------------------------------------------------------------ ; initialise le mode graphique (via l'int 10h) ; @@ -83,6 +111,31 @@ gfx_calc_addr: pop cx ret +; ------------------------------------------------------------ +; Dessine un pixel, accès VRAM direct. +; +; CX = x (0..639) +; DX = y (0..199) +; ES = Target Segment (usually VIDEO_SEG) +; BL = color (0=black, !=0=white) +; ------------------------------------------------------------ +gfx_local_putpixel: + call gfx_calc_addr + + ; write + cmp bl, 0 + je .clear +.set: + or byte [es:di], ah + jmp .done + +.clear: + not ah + and byte [es:di], ah + +.done: + ret + ; ------------------------------------------------------------ ; Dessine un pixel, accès VRAM direct. ; @@ -91,7 +144,7 @@ gfx_calc_addr: ; BL = color (0=black, !=0=white) ; ------------------------------------------------------------ gfx_putpixel: - pusha + push ax push di push es @@ -113,7 +166,7 @@ gfx_putpixel: .done: pop es pop di - popa + pop ax ret ; ------------------------------------------------------------ @@ -121,7 +174,6 @@ gfx_putpixel: ; Out: AL=0/1 ; ------------------------------------------------------------ gfx_getpixel: - push ax push di push es @@ -132,7 +184,6 @@ gfx_getpixel: pop es pop di - pop ax ret ; ------------------------------------------------------------ @@ -510,7 +561,7 @@ gfx_cursor_restorebg: jl .no_odd_bank neg dx ; Y est déja une ligne impaire, on retire l'offset .no_odd_bank: - + mov ax, BDA_MOUSE + mouse.bkg_buffer mov si, ax ; DS:SI = buffer de sauvegarde mov bx, 8 diff --git a/src/drivers/mouse_ps2.asm b/src/drivers/mouse_ps2.asm index 42b174a..529e222 100644 --- a/src/drivers/mouse_ps2.asm +++ b/src/drivers/mouse_ps2.asm @@ -384,12 +384,12 @@ isr_mouse_handler: mov word [BDA_MOUSE + mouse.y], 199 .y_ok_high: ; restaurer l'ancien arrière plan du curseur - ;call gfx_cursor_restorebg + call gfx_cursor_restorebg ; sauvegarder le nouvel arrière plan du curseur - ;call gfx_cursor_savebg + call gfx_cursor_savebg - ;call gfx_cursor_draw + call gfx_cursor_draw .done: mov al, 0x20