vga Drivers +Mouse

This commit is contained in:
Frater 2026-02-16 19:45:13 +01:00
commit 7c9ad48b19
10 changed files with 730 additions and 404 deletions

View file

@ -19,178 +19,4 @@
; along with this program. If not, see <https://www.gnu.org/licenses/>.
;
; =============================================================================
bits 16
; ---------------------------------------------------------------------------
;
; configuration du bios
;
; ---------------------------------------------------------------------------
; initial stack
%define STACK_SEG 0x0800 ; segment de base
%define GFX_DRIVERS 'VGA'
%define DEBUGER_ENABLED
section .text
bits 16
%include "./common/chartable.asm"
%include "./common/cursor.asm"
%include "./common/patterns.asm"
%include "./common/generic.asm"
%include "./common/string.asm"
; definition du BDA
%include "./common/bda.asm"
; drivers
%if GFX_DRIVERS == 'VGA'
%include "./drivers/gfx_vga.asm"
%else
; default drivers
%include "./drivers/gfx_cgam.asm"
%endif
%include "./drivers/mouse_ps2.asm"
%include "./drivers/keyboard_ps2.asm"
%include "./common/debug_gfx.asm"
; GUI
; %include "./gui/lib-api.asm"
; --- Données texte ---
str_quit db "Quitter", 0
str_hello db "Hello", 0
str_option1 db "option 1", 0
str_option2 db "option 2", 0
str_option3 db "option 3", 0
entrycode:
cli
mov ax, STACK_SEG ; creation du stack par défaut
mov ss, ax
mov sp, 0xFFFE ; haut du segment (64ko de stack), mot-aligné
cld
call ivt_setup ; configuration d'une table d'interruption "dummy"
call bda_setup ; initialisation du BDA
ISADBG ISA_GREEN, 1
; Install IRQ 0 : timer_isr
mov ax,cs
mov dx,ax
mov bx,timer_isr
mov ax,i8259_MASTER_INT
call ivt_setvector
; initialisation des PIC 8259A
call pic_init
; load Roms
call setup_load_rom
; on vérifie que le BIOS VGA a installé une INT 10h
call setup_check_vga
; enable IRQ 0
mov ah,IRQ_ENABLED
mov al,0
call pic_set_irq_mask
call kbd_init
sti
ISADBG ISA_GREEN, 32
; on active le mode graphique
GFX INIT
call mouse_reset
; call mouse_init
GFX MOUSE_MOVE
ISADBG ISA_RED, 0x80
GFX MOUSE_SHOW
ISADBG ISA_RED, 0x81
.loops:
call main_loop
jmp .loops
; --- Callbacks (Fonctions appelées par le moteur) ---
on_click_quit:
hlt
jmp on_click_quit
ret
on_click_hello:
ret
%define .oldval word [bp-2]
%define .my_slider word [bp-4]
%define .value word [bp-6]
main_loop:
push bp
mov bp, sp
sub sp, 6
push cs
pop ds
DEBUG 1
ISADBG ISA_LEFT, 1
; Init du système GUI
; call gui_init_system
DEBUG 2
ISADBG ISA_LEFT, 2
.loop:
; call gui_process_all
jmp .loop
leave
ret
; -----------------------------------------------------------
; timer ISR (IRQ -> INT)
; -----------------------------------------------------------
timer_isr:
push ax
push fs
mov ax,BDA_CUSTOM_SEG
mov fs,ax
; exemple de fonctionnement:
; inc byte [fs:BDA_TIMER]
mov al, PIC_EOI ; EOI master
out i8259_MASTER_CMD, al
pop fs
pop ax
iret
; ------------------------------------------------------------------
; Padding jusqu'au reset vector
; ------------------------------------------------------------------
times 0xFFF0 - ($ - $$) db 0xFF
; ------------------------------------------------------------------
; RESET VECTOR (exécuté par le CPU)
; ------------------------------------------------------------------
section .resetvect
bits 16
global reset_vector
reset_vector:
; code minimal au reset
jmp 0xF000:entrycode
builddate:
db __DATE__
times 16-($-$$) db 0 ; le stub tient dans 16 octets (ou moins)
%include "./boot-vga.asm"