add binary font + fixing error

This commit is contained in:
Frater 2026-02-23 18:04:20 +01:00
commit 413f4b6f79
9 changed files with 1078 additions and 914 deletions

1
.gitignore vendored
View file

@ -9,3 +9,4 @@ gfx/
roms/ roms/
tools/ tools/
doc/generated doc/generated
assets/

View file

@ -65,11 +65,11 @@ section .text
%include "./gui/lib-api.asm" %include "./gui/lib-api.asm"
; --- Données texte --- ; --- Données texte ---
str_quit db "Quitter", 0 str_quit db "Quit", 0
str_hello db "Hello", 0 str_hello db "Hello", 0
str_option1 db "option 1", 0 str_option1 db "option A", 0
str_option2 db "option 2", 0 str_option2 db "option BA", 0
str_option3 db "option 3", 0 str_option3 db "option BBA", 0
entrycode: entrycode:
cli cli
@ -81,8 +81,6 @@ entrycode:
call ivt_setup ; configuration d'une table d'interruption "dummy" call ivt_setup ; configuration d'une table d'interruption "dummy"
call bda_setup ; initialisation du BDA call bda_setup ; initialisation du BDA
ISADBG ISA_GREEN, 1
; Install IRQ 0 : timer_isr ; Install IRQ 0 : timer_isr
mov ax,cs mov ax,cs
mov dx,ax mov dx,ax
@ -106,8 +104,7 @@ entrycode:
; on active le mode graphique ; on active le mode graphique
GFX INIT GFX INIT
call mouse_init call mouse_init
GFX MOUSE_SHOW GFX MOUSE_SHOW
call main_loop call main_loop
.loops: .loops:
@ -123,12 +120,8 @@ on_click_quit:
on_click_hello: on_click_hello:
ret ret
main_test: main_test:
; GFX RECTANGLE_FILL, 10,10,50,20, PATTERN_WHITE, 15, 0 ; GFX RECTANGLE_FILL, 10,10,50,20, PATTERN_WHITE, 15, 0
; GUI OBJ_CREATE, OBJ_TYPE_CHECKBOX, 200, 50, 100, 15 ; GUI OBJ_CREATE, OBJ_TYPE_CHECKBOX, 200, 50, 100, 15
mov ax, 200 mov ax, 200
add ax, 4 add ax, 4
@ -197,8 +190,9 @@ main_loop:
; Créer Slider (Drag) ; Créer Slider (Drag)
GUI OBJ_CREATE, OBJ_TYPE_SLIDER, 10, 100, 150, 12 GUI OBJ_CREATE, OBJ_TYPE_SLIDER, 10, 100, 150, 12
GUI OBJ_SET_MODE, ax, SLIDER_HORIZONTAL mov .my_slider, ax
GUI OBJ_SLIDER_SET_ATTR, ax, 10, 140, 10, 15 GUI OBJ_SET_MODE, .my_slider, SLIDER_HORIZONTAL
GUI OBJ_SLIDER_SET_ATTR, .my_slider, 10, 140, 10, 15
GUI OBJ_CREATE, OBJ_TYPE_SLIDER, 400, 10, 16, 150 GUI OBJ_CREATE, OBJ_TYPE_SLIDER, 400, 10, 16, 150
mov .my_slider, ax mov .my_slider, ax

862
src/common/char_bold.asm Normal file
View file

@ -0,0 +1,862 @@
; ============================================================================
; Font 8x8 (printable ASCII 0x20..0x7E) -> 95 glyphs * 8 = 760 bytes
; - bit7 = gauche, bit0 = droite
; - 1 byte = 1 scanline (haut -> bas)
; ============================================================================
font8x8_bold:
; 0x20 ' '
db 00000000b
db 00000000b
db 00000000b
db 00000000b
db 00000000b
db 00000000b
db 00000000b
db 00000000b
; 0x21 '!'
db 00011000b
db 00011000b
db 00011000b
db 00011000b
db 00011000b
db 00000000b
db 00011000b
db 00000000b
; 0x22 '"'
db 01100110b
db 01100110b
db 00100100b
db 00000000b
db 00000000b
db 00000000b
db 00000000b
db 00000000b
; 0x23 '#'
db 00100100b
db 00100100b
db 01111110b
db 00100100b
db 01111110b
db 00100100b
db 00100100b
db 00000000b
; 0x24 '$'
db 00011000b
db 00111110b
db 01100000b
db 00111100b
db 00000110b
db 01111100b
db 00011000b
db 00000000b
; 0x25 '%'
db 01100010b
db 01100110b
db 00001100b
db 00011000b
db 00110000b
db 01100110b
db 01000110b
db 00000000b
; 0x26 '&'
db 00111000b
db 01101100b
db 00111000b
db 01110110b
db 11011100b
db 11001100b
db 01110110b
db 00000000b
; 0x27 '''
db 00011000b
db 00011000b
db 00110000b
db 00000000b
db 00000000b
db 00000000b
db 00000000b
db 00000000b
; 0x28 '('
db 00001100b
db 00011000b
db 00110000b
db 00110000b
db 00110000b
db 00011000b
db 00001100b
db 00000000b
; 0x29 ')'
db 00110000b
db 00011000b
db 00001100b
db 00001100b
db 00001100b
db 00011000b
db 00110000b
db 00000000b
; 0x2A '*'
db 00000000b
db 01100110b
db 00111100b
db 11111111b
db 00111100b
db 01100110b
db 00000000b
db 00000000b
; 0x2B '+'
db 00000000b
db 00011000b
db 00011000b
db 01111110b
db 00011000b
db 00011000b
db 00000000b
db 00000000b
; 0x2C ','
db 00000000b
db 00000000b
db 00000000b
db 00000000b
db 00000000b
db 00011000b
db 00011000b
db 00110000b
; 0x2D '-'
db 00000000b
db 00000000b
db 00000000b
db 01111110b
db 00000000b
db 00000000b
db 00000000b
db 00000000b
; 0x2E '.'
db 00000000b
db 00000000b
db 00000000b
db 00000000b
db 00000000b
db 00011000b
db 00011000b
db 00000000b
; 0x2F '/'
db 00000110b
db 00001100b
db 00011000b
db 00110000b
db 01100000b
db 11000000b
db 10000000b
db 00000000b
; 0x30 '0'
db 00111100b
db 01100110b
db 01101110b
db 01110110b
db 01100110b
db 01100110b
db 00111100b
db 00000000b
; 0x31 '1'
db 00011000b
db 00111000b
db 00011000b
db 00011000b
db 00011000b
db 00011000b
db 00111100b
db 00000000b
; 0x32 '2'
db 00111100b
db 01100110b
db 00000110b
db 00001100b
db 00011000b
db 00110000b
db 01111110b
db 00000000b
; 0x33 '3'
db 00111100b
db 01100110b
db 00000110b
db 00011100b
db 00000110b
db 01100110b
db 00111100b
db 00000000b
; 0x34 '4'
db 00001100b
db 00011100b
db 00111100b
db 01101100b
db 01111110b
db 00001100b
db 00001100b
db 00000000b
; 0x35 '5'
db 01111110b
db 01100000b
db 01111100b
db 00000110b
db 00000110b
db 01100110b
db 00111100b
db 00000000b
; 0x36 '6'
db 00011100b
db 00110000b
db 01100000b
db 01111100b
db 01100110b
db 01100110b
db 00111100b
db 00000000b
; 0x37 '7'
db 01111110b
db 01100110b
db 00000110b
db 00001100b
db 00011000b
db 00011000b
db 00011000b
db 00000000b
; 0x38 '8'
db 00111100b
db 01100110b
db 01100110b
db 00111100b
db 01100110b
db 01100110b
db 00111100b
db 00000000b
; 0x39 '9'
db 00111100b
db 01100110b
db 01100110b
db 00111110b
db 00000110b
db 00001100b
db 00111000b
db 00000000b
; 0x3A ':'
db 00000000b
db 00011000b
db 00011000b
db 00000000b
db 00000000b
db 00011000b
db 00011000b
db 00000000b
; 0x3B ';'
db 00000000b
db 00011000b
db 00011000b
db 00000000b
db 00000000b
db 00011000b
db 00011000b
db 00110000b
; 0x3C '<'
db 00001110b
db 00011100b
db 00111000b
db 01110000b
db 00111000b
db 00011100b
db 00001110b
db 00000000b
; 0x3D '='
db 00000000b
db 00000000b
db 01111110b
db 00000000b
db 01111110b
db 00000000b
db 00000000b
db 00000000b
; 0x3E '>'
db 01110000b
db 00111000b
db 00011100b
db 00001110b
db 00011100b
db 00111000b
db 01110000b
db 00000000b
; 0x3F '?'
db 00111100b
db 01100110b
db 00000110b
db 00001100b
db 00011000b
db 00000000b
db 00011000b
db 00000000b
; 0x40 '@'
db 00111100b
db 01100110b
db 01101110b
db 01101010b
db 01101110b
db 01100000b
db 00111100b
db 00000000b
; 0x41 'A'
db 00011000b
db 00111100b
db 01100110b
db 01100110b
db 01111110b
db 01100110b
db 01100110b
db 00000000b
; 0x42 'B'
db 01111100b
db 01100110b
db 01100110b
db 01111100b
db 01100110b
db 01100110b
db 01111100b
db 00000000b
; 0x43 'C'
db 00111100b
db 01100110b
db 01100000b
db 01100000b
db 01100000b
db 01100110b
db 00111100b
db 00000000b
; 0x44 'D'
db 01111000b
db 01101100b
db 01100110b
db 01100110b
db 01100110b
db 01101100b
db 01111000b
db 00000000b
; 0x45 'E'
db 01111110b
db 01100000b
db 01100000b
db 01111100b
db 01100000b
db 01100000b
db 01111110b
db 00000000b
; 0x46 'F'
db 01111110b
db 01100000b
db 01100000b
db 01111100b
db 01100000b
db 01100000b
db 01100000b
db 00000000b
; 0x47 'G'
db 00111100b
db 01100110b
db 01100000b
db 01101110b
db 01100110b
db 01100110b
db 00111100b
db 00000000b
; 0x48 'H'
db 01100110b
db 01100110b
db 01100110b
db 01111110b
db 01100110b
db 01100110b
db 01100110b
db 00000000b
; 0x49 'I'
db 00111100b
db 00011000b
db 00011000b
db 00011000b
db 00011000b
db 00011000b
db 00111100b
db 00000000b
; 0x4A 'J'
db 00011110b
db 00001100b
db 00001100b
db 00001100b
db 00001100b
db 01101100b
db 00111000b
db 00000000b
; 0x4B 'K'
db 01100110b
db 01101100b
db 01111000b
db 01110000b
db 01111000b
db 01101100b
db 01100110b
db 00000000b
; 0x4C 'L'
db 01100000b
db 01100000b
db 01100000b
db 01100000b
db 01100000b
db 01100000b
db 01111110b
db 00000000b
; 0x4D 'M'
db 01100011b
db 01110111b
db 01111111b
db 01101011b
db 01100011b
db 01100011b
db 01100011b
db 00000000b
; 0x4E 'N'
db 01100110b
db 01110110b
db 01111110b
db 01111110b
db 01101110b
db 01100110b
db 01100110b
db 00000000b
; 0x4F 'O'
db 00111100b
db 01100110b
db 01100110b
db 01100110b
db 01100110b
db 01100110b
db 00111100b
db 00000000b
; 0x50 'P'
db 01111100b
db 01100110b
db 01100110b
db 01111100b
db 01100000b
db 01100000b
db 01100000b
db 00000000b
; 0x51 'Q'
db 00111100b
db 01100110b
db 01100110b
db 01100110b
db 01101110b
db 00111100b
db 00001110b
db 00000000b
; 0x52 'R'
db 01111100b
db 01100110b
db 01100110b
db 01111100b
db 01111000b
db 01101100b
db 01100110b
db 00000000b
; 0x53 'S'
db 00111100b
db 01100110b
db 01100000b
db 00111100b
db 00000110b
db 01100110b
db 00111100b
db 00000000b
; 0x54 'T'
db 01111110b
db 00011000b
db 00011000b
db 00011000b
db 00011000b
db 00011000b
db 00011000b
db 00000000b
; 0x55 'U'
db 01100110b
db 01100110b
db 01100110b
db 01100110b
db 01100110b
db 01100110b
db 00111100b
db 00000000b
; 0x56 'V'
db 01100110b
db 01100110b
db 01100110b
db 01100110b
db 01100110b
db 00111100b
db 00011000b
db 00000000b
; 0x57 'W'
db 01100011b
db 01100011b
db 01100011b
db 01101011b
db 01111111b
db 01110111b
db 01100011b
db 00000000b
; 0x58 'X'
db 01100110b
db 01100110b
db 00111100b
db 00011000b
db 00111100b
db 01100110b
db 01100110b
db 00000000b
; 0x59 'Y'
db 01100110b
db 01100110b
db 01100110b
db 00111100b
db 00011000b
db 00011000b
db 00011000b
db 00000000b
; 0x5A 'Z'
db 01111110b
db 00000110b
db 00001100b
db 00011000b
db 00110000b
db 01100000b
db 01111110b
db 00000000b
; 0x5B '['
db 00111100b
db 00110000b
db 00110000b
db 00110000b
db 00110000b
db 00110000b
db 00111100b
db 00000000b
; 0x5C '\'
db 11000000b
db 01100000b
db 00110000b
db 00011000b
db 00001100b
db 00000110b
db 00000010b
db 00000000b
; 0x5D ']'
db 00111100b
db 00001100b
db 00001100b
db 00001100b
db 00001100b
db 00001100b
db 00111100b
db 00000000b
; 0x5E '^'
db 00010000b
db 00111000b
db 01101100b
db 11000110b
db 00000000b
db 00000000b
db 00000000b
db 00000000b
; 0x5F '_'
db 00000000b
db 00000000b
db 00000000b
db 00000000b
db 00000000b
db 00000000b
db 11111111b
db 00000000b
; 0x60 '`'
db 00110000b
db 00011000b
db 00001100b
db 00000000b
db 00000000b
db 00000000b
db 00000000b
db 00000000b
; 0x61 'a'
db 00000000b
db 00000000b
db 00111100b
db 00000110b
db 00111110b
db 01100110b
db 00111110b
db 00000000b
; 0x62 'b'
db 01100000b
db 01100000b
db 01111100b
db 01100110b
db 01100110b
db 01100110b
db 01111100b
db 00000000b
; 0x63 'c'
db 00000000b
db 00000000b
db 00111100b
db 01100110b
db 01100000b
db 01100110b
db 00111100b
db 00000000b
; 0x64 'd'
db 00000110b
db 00000110b
db 00111110b
db 01100110b
db 01100110b
db 01100110b
db 00111110b
db 00000000b
; 0x65 'e'
db 00000000b
db 00000000b
db 00111100b
db 01100110b
db 01111110b
db 01100000b
db 00111100b
db 00000000b
; 0x66 'f'
db 00011100b
db 00110000b
db 00110000b
db 01111100b
db 00110000b
db 00110000b
db 00110000b
db 00000000b
; 0x67 'g'
db 00000000b
db 00000000b
db 00111110b
db 01100110b
db 01100110b
db 00111110b
db 00000110b
db 00111100b
; 0x68 'h'
db 01100000b
db 01100000b
db 01111100b
db 01100110b
db 01100110b
db 01100110b
db 01100110b
db 00000000b
; 0x69 'i'
db 00011000b
db 00000000b
db 00111000b
db 00011000b
db 00011000b
db 00011000b
db 00111100b
db 00000000b
; 0x6A 'j'
db 00001100b
db 00000000b
db 00001100b
db 00001100b
db 00001100b
db 01101100b
db 01101100b
db 00111000b
; 0x6B 'k'
db 01100000b
db 01100000b
db 01100110b
db 01101100b
db 01111000b
db 01101100b
db 01100110b
db 00000000b
; 0x6C 'l'
db 00111000b
db 00011000b
db 00011000b
db 00011000b
db 00011000b
db 00011000b
db 00111100b
db 00000000b
; 0x6D 'm'
db 00000000b
db 00000000b
db 01101100b
db 01111110b
db 01111110b
db 01101011b
db 01100011b
db 00000000b
; 0x6E 'n'
db 00000000b
db 00000000b
db 01111100b
db 01100110b
db 01100110b
db 01100110b
db 01100110b
db 00000000b
; 0x6F 'o'
db 00000000b
db 00000000b
db 00111100b
db 01100110b
db 01100110b
db 01100110b
db 00111100b
db 00000000b
; 0x70 'p'
db 00000000b
db 00000000b
db 01111100b
db 01100110b
db 01100110b
db 01111100b
db 01100000b
db 01100000b
; 0x71 'q'
db 00000000b
db 00000000b
db 00111110b
db 01100110b
db 01100110b
db 00111110b
db 00000110b
db 00000110b
; 0x72 'r'
db 00000000b
db 00000000b
db 01101100b
db 01110110b
db 01100000b
db 01100000b
db 01100000b
db 00000000b
; 0x73 's'
db 00000000b
db 00000000b
db 00111110b
db 01100000b
db 00111100b
db 00000110b
db 01111100b
db 00000000b
; 0x74 't'
db 00110000b
db 00110000b
db 01111100b
db 00110000b
db 00110000b
db 00110000b
db 00011100b
db 00000000b
; 0x75 'u'
db 00000000b
db 00000000b
db 01100110b
db 01100110b
db 01100110b
db 01100110b
db 00111110b
db 00000000b
; 0x76 'v'
db 00000000b
db 00000000b
db 01100110b
db 01100110b
db 01100110b
db 00111100b
db 00011000b
db 00000000b
; 0x77 'w'
db 00000000b
db 00000000b
db 01100011b
db 01100011b
db 01101011b
db 01111111b
db 00110110b
db 00000000b
; 0x78 'x'
db 00000000b
db 00000000b
db 01100110b
db 00111100b
db 00011000b
db 00111100b
db 01100110b
db 00000000b
; 0x79 'y'
db 00000000b
db 00000000b
db 01100110b
db 01100110b
db 01100110b
db 00111110b
db 00000110b
db 00111100b
; 0x7A 'z'
db 00000000b
db 00000000b
db 01111110b
db 00001100b
db 00011000b
db 00110000b
db 01111110b
db 00000000b
; 0x7B '{'
db 00001110b
db 00011000b
db 00011000b
db 01110000b
db 00011000b
db 00011000b
db 00001110b
db 00000000b
; 0x7C '|'
db 00011000b
db 00011000b
db 00011000b
db 00000000b
db 00011000b
db 00011000b
db 00011000b
db 00000000b
; 0x7D '}'
db 01110000b
db 00011000b
db 00011000b
db 00001110b
db 00011000b
db 00011000b
db 01110000b
db 00000000b
; 0x7E '~'
db 01110110b
db 11011100b
db 00000000b
db 00000000b
db 00000000b
db 00000000b
db 00000000b
db 00000000b

142
src/common/char_light.asm Normal file
View file

@ -0,0 +1,142 @@
; ============================================================================
; Font 8x8 (printable ASCII 0x20..0x7E) -> 95 glyphs * 8 = 760 bytes
; - bit7 = gauche, bit0 = droite
; - 1 byte = 1 scanline (haut -> bas)
; ============================================================================
;---------------------------------------------------------
; Font8x8 - Police de caractères fine pour NASM
; Format : 8x8 pixels, 1 byte par ligne
; Range : ASCII 0x20 (' ') to 0x7E ('~')
;---------------------------------------------------------
section .data
font8x8_light:
; 0x20 ( )
db 00000000b, 00000000b, 00000000b, 00000000b, 00000000b, 00000000b, 00000000b, 00000000b
; 0x21 (!)
db 00011000b, 00011000b, 00011000b, 00011000b, 00000000b, 00000000b, 00011000b, 00000000b
; 0x22 (")
db 01101100b, 01101100b, 00000000b, 00000000b, 00000000b, 00000000b, 00000000b, 00000000b
; 0x23 (#)
db 01101100b, 01101100b, 11111111b, 01101100b, 11111111b, 01101100b, 01101100b, 00000000b
; 0x24 ($)
db 00011000b, 00111110b, 01100000b, 00111100b, 00000110b, 01111100b, 00011000b, 00000000b
; 0x25 (%)
db 11000110b, 11000110b, 00001100b, 00011000b, 00110000b, 01100011b, 01100011b, 00000000b
; 0x26 (&)
db 00111000b, 01101100b, 00111000b, 00110110b, 01100011b, 01100110b, 00111011b, 00000000b
; 0x27 (')
db 00011000b, 00011000b, 00110000b, 00000000b, 00000000b, 00000000b, 00000000b, 00000000b
; 0x28 (()
db 00001100b, 00011000b, 00110000b, 00110000b, 00110000b, 00011000b, 00001100b, 00000000b
; 0x29 ())
db 00110000b, 00011000b, 00001100b, 00001100b, 00001100b, 00011000b, 00110000b, 00000000b
; 0x2A (*)
db 00000000b, 01100110b, 00111100b, 11111111b, 00111100b, 01100110b, 00000000b, 00000000b
; 0x2B (+)
db 00000000b, 00011000b, 00011000b, 01111110b, 00011000b, 00011000b, 00000000b, 00000000b
; 0x2C (,)
db 00000000b, 00000000b, 00000000b, 00000000b, 00000000b, 00011000b, 00011000b, 00110000b
; 0x2D (-)
db 00000000b, 00000000b, 00000000b, 01111110b, 00000000b, 00000000b, 00000000b, 00000000b
; 0x2E (.)
db 00000000b, 00000000b, 00000000b, 00000000b, 00000000b, 00011000b, 00011000b, 00000000b
; 0x2F (/)
db 00000010b, 00000110b, 00001100b, 00011000b, 00110000b, 01100000b, 11000000b, 00000000b
; 0x30-0x39 (0-9)
db 00111100b, 01100110b, 01101110b, 01110110b, 01100110b, 00111100b, 00000000b, 00000000b
db 00011000b, 00111000b, 00011000b, 00011000b, 00011000b, 00111100b, 00000000b, 00000000b
db 00111100b, 01100110b, 00001100b, 00110000b, 01100000b, 11111111b, 00000000b, 00000000b
db 00111100b, 01100110b, 00001100b, 00111100b, 00001100b, 01100110b, 00111100b, 00000000b
db 00001100b, 00011100b, 00111100b, 01101100b, 11111111b, 00001100b, 00001100b, 00000000b
db 01111111b, 01100000b, 01111100b, 00000110b, 00000110b, 01111100b, 00000000b, 00000000b
db 00111100b, 01100000b, 01111100b, 01100110b, 01100110b, 00111100b, 00000000b, 00000000b
db 01111111b, 00000110b, 00001100b, 00011000b, 00110000b, 00110000b, 00000000b, 00000000b
db 00111100b, 01100110b, 00111100b, 01100110b, 01100110b, 00111100b, 00000000b, 00000000b
db 00111100b, 01100110b, 00111110b, 00000110b, 00000110b, 00111100b, 00000000b, 00000000b
; 0x3A (:)
db 00000000b, 00000000b, 00011000b, 00000000b, 00011000b, 00000000b, 00000000b, 00000000b
; 0x3B (;)
db 00000000b, 00000000b, 00011000b, 00000000b, 00011000b, 00011000b, 00110000b, 00000000b
; 0x3C (<)
db 00001100b, 00011000b, 00110000b, 01100000b, 00110000b, 00011000b, 00001100b, 00000000b
; 0x3D (=)
db 00000000b, 00000000b, 01111110b, 00000000b, 01111110b, 00000000b, 00000000b, 00000000b
; 0x3E (>)
db 00110000b, 00011000b, 00001100b, 00000110b, 00001100b, 00011000b, 00110000b, 00000000b
; 0x3F (?)
db 00111100b, 01100110b, 00000110b, 00001100b, 00011000b, 00000000b, 00011000b, 00000000b
; 0x40 (@)
db 00111100b, 01100110b, 01101110b, 01101010b, 01101100b, 01100000b, 00111100b, 00000000b
; 0x41-0x5A (A-Z)
db 00011000b, 00111100b, 01100110b, 01100110b, 01111110b, 01100110b, 01100110b, 00000000b ; A
db 01111100b, 01100110b, 01100110b, 01111100b, 01100110b, 01100110b, 01111100b, 00000000b ; B
db 00111100b, 01100110b, 01100000b, 01100000b, 01100000b, 01100110b, 00111100b, 00000000b ; C
db 01111000b, 01101100b, 01100110b, 01100110b, 01100110b, 01101100b, 01111000b, 00000000b ; D
db 01111110b, 01100000b, 01100000b, 01111100b, 01100000b, 01100000b, 01111110b, 00000000b ; E
db 01111110b, 01100000b, 01100000b, 01111100b, 01100000b, 01100000b, 01100000b, 00000000b ; F
db 00111100b, 01100110b, 01100000b, 01100111b, 01100110b, 01100110b, 00111111b, 00000000b ; G
db 01100110b, 01100110b, 01100110b, 01111110b, 01100110b, 01100110b, 01100110b, 00000000b ; H
db 00111100b, 00011000b, 00011000b, 00011000b, 00011000b, 00011000b, 00111100b, 00000000b ; I
db 00011110b, 00001100b, 00001100b, 00001100b, 00001100b, 01101100b, 00111000b, 00000000b ; J
db 01100110b, 01101100b, 01111000b, 01110000b, 01111000b, 01101100b, 01100110b, 00000000b ; K
db 01100000b, 01100000b, 01100000b, 01100000b, 01100000b, 01100000b, 01111110b, 00000000b ; L
db 11000011b, 11100111b, 11111111b, 11011011b, 11000011b, 11000011b, 11000011b, 00000000b ; M
db 11000110b, 11100110b, 11110110b, 11011110b, 11001110b, 11000110b, 11000110b, 00000000b ; N
db 00111100b, 01100110b, 01100110b, 01100110b, 01100110b, 01100110b, 00111100b, 00000000b ; O
db 01111100b, 01100110b, 01100110b, 01111100b, 01100000b, 01100000b, 01100000b, 00000000b ; P
db 00111100b, 01100110b, 01100110b, 01100110b, 01101010b, 01100110b, 00111111b, 00000001b ; Q
db 01111100b, 01100110b, 01100110b, 01111100b, 01101100b, 01100110b, 01100110b, 00000000b ; R
db 00111110b, 01100000b, 01100000b, 00111100b, 00000110b, 00000110b, 01111100b, 00000000b ; S
db 11111111b, 00011000b, 00011000b, 00011000b, 00011000b, 00011000b, 00011000b, 00000000b ; T
db 01100110b, 01100110b, 01100110b, 01100110b, 01100110b, 01100110b, 00111100b, 00000000b ; U
db 01100110b, 01100110b, 01100110b, 01100110b, 01100110b, 00111100b, 00011000b, 00000000b ; V
db 11000011b, 11000011b, 11000011b, 11011011b, 11111111b, 11100111b, 11000011b, 00000000b ; W
db 01100110b, 01100110b, 00111100b, 00011000b, 00111100b, 01100110b, 01100110b, 00000000b ; X
db 01100110b, 01100110b, 01100110b, 00111100b, 00011000b, 00011000b, 00011000b, 00000000b ; Y
db 11111111b, 00000110b, 00001100b, 00011000b, 00110000b, 01100000b, 11111111b, 00000000b ; Z
; 0x5B-0x60
db 00111100b, 00110000b, 00110000b, 00110000b, 00110000b, 00110000b, 00111100b, 00000000b ; [
db 11000000b, 01100000b, 00110000b, 00011000b, 00001100b, 00000110b, 00000011b, 00000000b
db 00111100b, 00001100b, 00001100b, 00001100b, 00001100b, 00001100b, 00111100b, 00000000b ; ]
db 00011000b, 00111100b, 01100110b, 00000000b, 00000000b, 00000000b, 00000000b, 00000000b ; ^
db 00000000b, 00000000b, 00000000b, 00000000b, 00000000b, 00000000b, 00000000b, 11111111b ; _
db 00110000b, 00011000b, 00001100b, 00000000b, 00000000b, 00000000b, 00000000b, 00000000b ; `
; 0x61-0x7A (a-z)
db 00000000b, 00000000b, 00111100b, 00000110b, 00111110b, 01100110b, 00111110b, 00000000b ; a
db 01100000b, 01100000b, 01111100b, 01100110b, 01100110b, 01100110b, 01111100b, 00000000b ; b
db 00000000b, 00000000b, 00111100b, 01100000b, 01100000b, 01100000b, 00111100b, 00000000b ; c
db 00000110b, 00000110b, 00111110b, 01100110b, 01100110b, 01100110b, 00111110b, 00000000b ; d
db 00000000b, 00000000b, 00111100b, 01100110b, 01111110b, 01100000b, 00111100b, 00000000b ; e
db 00011100b, 00110000b, 01111100b, 00110000b, 00110000b, 00110000b, 00110000b, 00000000b ; f
db 00000000b, 00111110b, 01100110b, 01100110b, 00111110b, 00000110b, 00111100b, 00000000b ; g
db 01100000b, 01100000b, 01101100b, 01110110b, 01100110b, 01100110b, 01100110b, 00000000b ; h
db 00011000b, 00000000b, 00111000b, 00011000b, 00011000b, 00011000b, 00111100b, 00000000b ; i
db 00001100b, 00000000b, 00011100b, 00001100b, 00001100b, 00001100b, 01101100b, 00111000b ; j
db 01100000b, 01100000b, 01100110b, 01101100b, 01111000b, 01101100b, 01100110b, 00000000b ; k
db 00111000b, 00011000b, 00011000b, 00011000b, 00011000b, 00011000b, 00111100b, 00000000b ; l
db 00000000b, 00000000b, 11010110b, 11111111b, 11011011b, 11011011b, 11011011b, 00000000b ; m
db 00000000b, 00000000b, 01111100b, 01100110b, 01100110b, 01100110b, 01100110b, 00000000b ; n
db 00000000b, 00000000b, 00111100b, 01100110b, 01100110b, 01100110b, 00111100b, 00000000b ; o
db 00000000b, 00000000b, 01111100b, 01100110b, 01100110b, 01111100b, 01100000b, 01100000b ; p
db 00000000b, 00000000b, 00111110b, 01100110b, 01100110b, 00111110b, 00000110b, 00000110b ; q
db 00000000b, 00000000b, 01101100b, 01110110b, 01100000b, 01100000b, 01100000b, 00000000b ; r
db 00000000b, 00000000b, 00111110b, 01100000b, 00111100b, 00000110b, 01111100b, 00000000b ; s
db 00010000b, 00110000b, 01111100b, 00110000b, 00110000b, 00110000b, 00011100b, 00000000b ; t
db 00000000b, 00000000b, 01100110b, 01100110b, 01100110b, 01101100b, 00110110b, 00000000b ; u
db 00000000b, 00000000b, 01100110b, 01100110b, 01100110b, 00111100b, 00011000b, 00000000b ; v
db 00000000b, 00000000b, 11000011b, 11000011b, 11011011b, 11111111b, 01100110b, 00000000b ; w
db 00000000b, 00000000b, 01100110b, 00111100b, 00011000b, 00111100b, 01100110b, 00000000b ; x
db 00000000b, 00000000b, 01100110b, 01100110b, 00111110b, 00000110b, 00111100b, 00000000b ; y
db 00000000b, 00000000b, 01111110b, 00001100b, 00011000b, 00110000b, 01111110b, 00000000b ; z
; 0x7B-0x7E
db 00001100b, 00011000b, 00011000b, 00110000b, 00011000b, 00011000b, 00001100b, 00000000b ; {
db 00011000b, 00011000b, 00011000b, 00000000b, 00011000b, 00011000b, 00011000b, 00000000b ; |
db 00110000b, 00011000b, 00011000b, 00001100b, 00011000b, 00011000b, 00110000b, 00000000b ; }
db 01101110b, 11011011b, 00000000b, 00000000b, 00000000b, 00000000b, 00000000b, 00000000b ; ~

View file

@ -1,862 +1,26 @@
; ============================================================================ ; =============================================================================
; Font 8x8 (printable ASCII 0x20..0x7E) -> 95 glyphs * 8 = 760 bytes ; Project : Custom BIOS / ROM
; - bit7 = gauche, bit0 = droite ; File : chartable.asm
; - 1 byte = 1 scanline (haut -> bas) ; Author : frater
; ============================================================================ ;
font8x8: ; License : GNU General Public License v3.0 or later (GPL-3.0+)
; 0x20 ' ' ;
db 00000000b ; This program is free software: you can redistribute it and/or modify
db 00000000b ; it under the terms of the GNU General Public License as published by
db 00000000b ; the Free Software Foundation, either version 3 of the License, or
db 00000000b ; (at your option) any later version.
db 00000000b ;
db 00000000b ; This program is distributed in the hope that it will be useful,
db 00000000b ; but WITHOUT ANY WARRANTY; without even the implied warranty of
db 00000000b ; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
; 0x21 '!' ; GNU General Public License for more details.
db 00011000b ;
db 00011000b ; You should have received a copy of the GNU General Public License
db 00011000b ; along with this program. If not, see <https://www.gnu.org/licenses/>.
db 00011000b ;
db 00011000b ; =============================================================================
db 00000000b
db 00011000b
db 00000000b
; 0x22 '"'
db 01100110b
db 01100110b
db 00100100b
db 00000000b
db 00000000b
db 00000000b
db 00000000b
db 00000000b
; 0x23 '#'
db 00100100b
db 00100100b
db 01111110b
db 00100100b
db 01111110b
db 00100100b
db 00100100b
db 00000000b
; 0x24 '$'
db 00011000b
db 00111110b
db 01100000b
db 00111100b
db 00000110b
db 01111100b
db 00011000b
db 00000000b
; 0x25 '%'
db 01100010b
db 01100110b
db 00001100b
db 00011000b
db 00110000b
db 01100110b
db 01000110b
db 00000000b
; 0x26 '&'
db 00111000b
db 01101100b
db 00111000b
db 01110110b
db 11011100b
db 11001100b
db 01110110b
db 00000000b
; 0x27 '''
db 00011000b
db 00011000b
db 00110000b
db 00000000b
db 00000000b
db 00000000b
db 00000000b
db 00000000b
; 0x28 '('
db 00001100b
db 00011000b
db 00110000b
db 00110000b
db 00110000b
db 00011000b
db 00001100b
db 00000000b
; 0x29 ')'
db 00110000b
db 00011000b
db 00001100b
db 00001100b
db 00001100b
db 00011000b
db 00110000b
db 00000000b
; 0x2A '*'
db 00000000b
db 01100110b
db 00111100b
db 11111111b
db 00111100b
db 01100110b
db 00000000b
db 00000000b
; 0x2B '+'
db 00000000b
db 00011000b
db 00011000b
db 01111110b
db 00011000b
db 00011000b
db 00000000b
db 00000000b
; 0x2C ','
db 00000000b
db 00000000b
db 00000000b
db 00000000b
db 00000000b
db 00011000b
db 00011000b
db 00110000b
; 0x2D '-'
db 00000000b
db 00000000b
db 00000000b
db 01111110b
db 00000000b
db 00000000b
db 00000000b
db 00000000b
; 0x2E '.'
db 00000000b
db 00000000b
db 00000000b
db 00000000b
db 00000000b
db 00011000b
db 00011000b
db 00000000b
; 0x2F '/'
db 00000110b
db 00001100b
db 00011000b
db 00110000b
db 01100000b
db 11000000b
db 10000000b
db 00000000b
; 0x30 '0'
db 00111100b
db 01100110b
db 01101110b
db 01110110b
db 01100110b
db 01100110b
db 00111100b
db 00000000b
; 0x31 '1'
db 00011000b
db 00111000b
db 00011000b
db 00011000b
db 00011000b
db 00011000b
db 00111100b
db 00000000b
; 0x32 '2'
db 00111100b
db 01100110b
db 00000110b
db 00001100b
db 00011000b
db 00110000b
db 01111110b
db 00000000b
; 0x33 '3'
db 00111100b
db 01100110b
db 00000110b
db 00011100b
db 00000110b
db 01100110b
db 00111100b
db 00000000b
; 0x34 '4'
db 00001100b
db 00011100b
db 00111100b
db 01101100b
db 01111110b
db 00001100b
db 00001100b
db 00000000b
; 0x35 '5'
db 01111110b
db 01100000b
db 01111100b
db 00000110b
db 00000110b
db 01100110b
db 00111100b
db 00000000b
; 0x36 '6'
db 00011100b
db 00110000b
db 01100000b
db 01111100b
db 01100110b
db 01100110b
db 00111100b
db 00000000b
; 0x37 '7'
db 01111110b
db 01100110b
db 00000110b
db 00001100b
db 00011000b
db 00011000b
db 00011000b
db 00000000b
; 0x38 '8'
db 00111100b
db 01100110b
db 01100110b
db 00111100b
db 01100110b
db 01100110b
db 00111100b
db 00000000b
; 0x39 '9'
db 00111100b
db 01100110b
db 01100110b
db 00111110b
db 00000110b
db 00001100b
db 00111000b
db 00000000b
; 0x3A ':'
db 00000000b
db 00011000b
db 00011000b
db 00000000b
db 00000000b
db 00011000b
db 00011000b
db 00000000b
; 0x3B ';'
db 00000000b
db 00011000b
db 00011000b
db 00000000b
db 00000000b
db 00011000b
db 00011000b
db 00110000b
; 0x3C '<'
db 00001110b
db 00011100b
db 00111000b
db 01110000b
db 00111000b
db 00011100b
db 00001110b
db 00000000b
; 0x3D '='
db 00000000b
db 00000000b
db 01111110b
db 00000000b
db 01111110b
db 00000000b
db 00000000b
db 00000000b
; 0x3E '>'
db 01110000b
db 00111000b
db 00011100b
db 00001110b
db 00011100b
db 00111000b
db 01110000b
db 00000000b
; 0x3F '?'
db 00111100b
db 01100110b
db 00000110b
db 00001100b
db 00011000b
db 00000000b
db 00011000b
db 00000000b
; 0x40 '@'
db 00111100b
db 01100110b
db 01101110b
db 01101010b
db 01101110b
db 01100000b
db 00111100b
db 00000000b
; 0x41 'A'
db 00011000b
db 00111100b
db 01100110b
db 01100110b
db 01111110b
db 01100110b
db 01100110b
db 00000000b
; 0x42 'B'
db 01111100b
db 01100110b
db 01100110b
db 01111100b
db 01100110b
db 01100110b
db 01111100b
db 00000000b
; 0x43 'C'
db 00111100b
db 01100110b
db 01100000b
db 01100000b
db 01100000b
db 01100110b
db 00111100b
db 00000000b
; 0x44 'D'
db 01111000b
db 01101100b
db 01100110b
db 01100110b
db 01100110b
db 01101100b
db 01111000b
db 00000000b
; 0x45 'E'
db 01111110b
db 01100000b
db 01100000b
db 01111100b
db 01100000b
db 01100000b
db 01111110b
db 00000000b
; 0x46 'F'
db 01111110b
db 01100000b
db 01100000b
db 01111100b
db 01100000b
db 01100000b
db 01100000b
db 00000000b
; 0x47 'G'
db 00111100b
db 01100110b
db 01100000b
db 01101110b
db 01100110b
db 01100110b
db 00111100b
db 00000000b
; 0x48 'H'
db 01100110b
db 01100110b
db 01100110b
db 01111110b
db 01100110b
db 01100110b
db 01100110b
db 00000000b
; 0x49 'I'
db 00111100b
db 00011000b
db 00011000b
db 00011000b
db 00011000b
db 00011000b
db 00111100b
db 00000000b
; 0x4A 'J'
db 00011110b
db 00001100b
db 00001100b
db 00001100b
db 00001100b
db 01101100b
db 00111000b
db 00000000b
; 0x4B 'K'
db 01100110b
db 01101100b
db 01111000b
db 01110000b
db 01111000b
db 01101100b
db 01100110b
db 00000000b
; 0x4C 'L'
db 01100000b
db 01100000b
db 01100000b
db 01100000b
db 01100000b
db 01100000b
db 01111110b
db 00000000b
; 0x4D 'M'
db 01100011b
db 01110111b
db 01111111b
db 01101011b
db 01100011b
db 01100011b
db 01100011b
db 00000000b
; 0x4E 'N'
db 01100110b
db 01110110b
db 01111110b
db 01111110b
db 01101110b
db 01100110b
db 01100110b
db 00000000b
; 0x4F 'O'
db 00111100b
db 01100110b
db 01100110b
db 01100110b
db 01100110b
db 01100110b
db 00111100b
db 00000000b
; 0x50 'P'
db 01111100b
db 01100110b
db 01100110b
db 01111100b
db 01100000b
db 01100000b
db 01100000b
db 00000000b
; 0x51 'Q'
db 00111100b
db 01100110b
db 01100110b
db 01100110b
db 01101110b
db 00111100b
db 00001110b
db 00000000b
; 0x52 'R'
db 01111100b
db 01100110b
db 01100110b
db 01111100b
db 01111000b
db 01101100b
db 01100110b
db 00000000b
; 0x53 'S'
db 00111100b
db 01100110b
db 01100000b
db 00111100b
db 00000110b
db 01100110b
db 00111100b
db 00000000b
; 0x54 'T'
db 01111110b
db 00011000b
db 00011000b
db 00011000b
db 00011000b
db 00011000b
db 00011000b
db 00000000b
; 0x55 'U'
db 01100110b
db 01100110b
db 01100110b
db 01100110b
db 01100110b
db 01100110b
db 00111100b
db 00000000b
; 0x56 'V'
db 01100110b
db 01100110b
db 01100110b
db 01100110b
db 01100110b
db 00111100b
db 00011000b
db 00000000b
; 0x57 'W'
db 01100011b
db 01100011b
db 01100011b
db 01101011b
db 01111111b
db 01110111b
db 01100011b
db 00000000b
; 0x58 'X'
db 01100110b
db 01100110b
db 00111100b
db 00011000b
db 00111100b
db 01100110b
db 01100110b
db 00000000b
; 0x59 'Y'
db 01100110b
db 01100110b
db 01100110b
db 00111100b
db 00011000b
db 00011000b
db 00011000b
db 00000000b
; 0x5A 'Z'
db 01111110b
db 00000110b
db 00001100b
db 00011000b
db 00110000b
db 01100000b
db 01111110b
db 00000000b
; 0x5B '['
db 00111100b
db 00110000b
db 00110000b
db 00110000b
db 00110000b
db 00110000b
db 00111100b
db 00000000b
; 0x5C '\'
db 11000000b
db 01100000b
db 00110000b
db 00011000b
db 00001100b
db 00000110b
db 00000010b
db 00000000b
; 0x5D ']'
db 00111100b
db 00001100b
db 00001100b
db 00001100b
db 00001100b
db 00001100b
db 00111100b
db 00000000b
; 0x5E '^'
db 00010000b
db 00111000b
db 01101100b
db 11000110b
db 00000000b
db 00000000b
db 00000000b
db 00000000b
; 0x5F '_'
db 00000000b
db 00000000b
db 00000000b
db 00000000b
db 00000000b
db 00000000b
db 11111111b
db 00000000b
; 0x60 '`'
db 00110000b
db 00011000b
db 00001100b
db 00000000b
db 00000000b
db 00000000b
db 00000000b
db 00000000b
; 0x61 'a'
db 00000000b
db 00000000b
db 00111100b
db 00000110b
db 00111110b
db 01100110b
db 00111110b
db 00000000b
; 0x62 'b'
db 01100000b
db 01100000b
db 01111100b
db 01100110b
db 01100110b
db 01100110b
db 01111100b
db 00000000b
; 0x63 'c'
db 00000000b
db 00000000b
db 00111100b
db 01100110b
db 01100000b
db 01100110b
db 00111100b
db 00000000b
; 0x64 'd'
db 00000110b
db 00000110b
db 00111110b
db 01100110b
db 01100110b
db 01100110b
db 00111110b
db 00000000b
; 0x65 'e'
db 00000000b
db 00000000b
db 00111100b
db 01100110b
db 01111110b
db 01100000b
db 00111100b
db 00000000b
; 0x66 'f'
db 00011100b
db 00110000b
db 00110000b
db 01111100b
db 00110000b
db 00110000b
db 00110000b
db 00000000b
; 0x67 'g'
db 00000000b
db 00000000b
db 00111110b
db 01100110b
db 01100110b
db 00111110b
db 00000110b
db 00111100b
; 0x68 'h'
db 01100000b
db 01100000b
db 01111100b
db 01100110b
db 01100110b
db 01100110b
db 01100110b
db 00000000b
; 0x69 'i'
db 00011000b
db 00000000b
db 00111000b
db 00011000b
db 00011000b
db 00011000b
db 00111100b
db 00000000b
; 0x6A 'j'
db 00001100b
db 00000000b
db 00001100b
db 00001100b
db 00001100b
db 01101100b
db 01101100b
db 00111000b
; 0x6B 'k'
db 01100000b
db 01100000b
db 01100110b
db 01101100b
db 01111000b
db 01101100b
db 01100110b
db 00000000b
; 0x6C 'l'
db 00111000b
db 00011000b
db 00011000b
db 00011000b
db 00011000b
db 00011000b
db 00111100b
db 00000000b
; 0x6D 'm'
db 00000000b
db 00000000b
db 01101100b
db 01111110b
db 01111110b
db 01101011b
db 01100011b
db 00000000b
; 0x6E 'n'
db 00000000b
db 00000000b
db 01111100b
db 01100110b
db 01100110b
db 01100110b
db 01100110b
db 00000000b
; 0x6F 'o'
db 00000000b
db 00000000b
db 00111100b
db 01100110b
db 01100110b
db 01100110b
db 00111100b
db 00000000b
; 0x70 'p'
db 00000000b
db 00000000b
db 01111100b
db 01100110b
db 01100110b
db 01111100b
db 01100000b
db 01100000b
; 0x71 'q'
db 00000000b
db 00000000b
db 00111110b
db 01100110b
db 01100110b
db 00111110b
db 00000110b
db 00000110b
; 0x72 'r'
db 00000000b
db 00000000b
db 01101100b
db 01110110b
db 01100000b
db 01100000b
db 01100000b
db 00000000b
; 0x73 's'
db 00000000b
db 00000000b
db 00111110b
db 01100000b
db 00111100b
db 00000110b
db 01111100b
db 00000000b
; 0x74 't'
db 00110000b
db 00110000b
db 01111100b
db 00110000b
db 00110000b
db 00110000b
db 00011100b
db 00000000b
; 0x75 'u'
db 00000000b
db 00000000b
db 01100110b
db 01100110b
db 01100110b
db 01100110b
db 00111110b
db 00000000b
; 0x76 'v'
db 00000000b
db 00000000b
db 01100110b
db 01100110b
db 01100110b
db 00111100b
db 00011000b
db 00000000b
; 0x77 'w'
db 00000000b
db 00000000b
db 01100011b
db 01100011b
db 01101011b
db 01111111b
db 00110110b
db 00000000b
; 0x78 'x'
db 00000000b
db 00000000b
db 01100110b
db 00111100b
db 00011000b
db 00111100b
db 01100110b
db 00000000b
; 0x79 'y'
db 00000000b
db 00000000b
db 01100110b
db 01100110b
db 01100110b
db 00111110b
db 00000110b
db 00111100b
; 0x7A 'z'
db 00000000b
db 00000000b
db 01111110b
db 00001100b
db 00011000b
db 00110000b
db 01111110b
db 00000000b
; 0x7B '{'
db 00001110b
db 00011000b
db 00011000b
db 01110000b
db 00011000b
db 00011000b
db 00001110b
db 00000000b
; 0x7C '|'
db 00011000b
db 00011000b
db 00011000b
db 00000000b
db 00011000b
db 00011000b
db 00011000b
db 00000000b
; 0x7D '}'
db 01110000b
db 00011000b
db 00011000b
db 00001110b
db 00011000b
db 00011000b
db 01110000b
db 00000000b
; 0x7E '~'
db 01110110b
db 11011100b
db 00000000b
db 00000000b
db 00000000b
db 00000000b
db 00000000b
db 00000000b
font8x8:
; on importe uniquement les caractères entre ' ' (0x20) et '~' (0x7E)
incbin "./assets/FM-T-437.F08", 0x20*8, 0x7e*8
;incbin "./assets/CGA-TH.F08", 0x20*8, 0x7e*8

View file

@ -37,10 +37,10 @@
; E : text transparent ; E : text transparent
; F : background transparent ; F : background transparent
; ;
%define GFX_TXT_WHITE_TRANSPARENT 0x0F %define GFX_TXT_WHITE_TRANSPARENT 0x800F
%define GFX_TXT_BLACK_TRANSPARENT 0x00 %define GFX_TXT_BLACK_TRANSPARENT 0x80F0
%define GFX_TXT_WHITE 0xF0 %define GFX_TXT_WHITE 0x00F0
%define GFX_TXT_BLACK 0x0F %define GFX_TXT_BLACK 0x000F
%define GFX_TXT_TRANSPARENT_BKG 0x8000 %define GFX_TXT_TRANSPARENT_BKG 0x8000
%define GFX_TXT_TRANSPARENT_TEXT 0x4000 %define GFX_TXT_TRANSPARENT_TEXT 0x4000
@ -160,14 +160,14 @@ vga_init:
get_glyph_offset: get_glyph_offset:
cmp al, 0x20 cmp al, 0x20
jb .qmark ; al < 20h (' ' jb .qmark ; al < 20h (' '
cmp al, 0x7E cmp al, 0x7e
ja .qmark ; al > 7Eh ('~') ja .qmark ; al > 7Eh ('~')
sub al, 0x20 sub al, ' '
jmp .ok jmp .ok
.qmark: .qmark:
mov al, '?' mov al, '?'
sub al, 0x20 sub al, ' '
.ok: .ok:
xor ah, ah xor ah, ah
@ -383,6 +383,7 @@ vga_putc:
mov bl, al ; BL = Couleur texte (low nibble) mov bl, al ; BL = Couleur texte (low nibble)
and bl, 0x0F and bl, 0x0F
mov bh, al ; BH = Couleur fond (high nibble) mov bh, al ; BH = Couleur fond (high nibble)
and bh, 0xf0
shr bh, 4 shr bh, 4
mov .cpt, 8 mov .cpt, 8
@ -394,11 +395,9 @@ vga_putc:
mov .glyph_row, ax ; Image 16 bits du glyphe non décalé mov .glyph_row, ax ; Image 16 bits du glyphe non décalé
; --- PASSE 1 : DESSIN DU FOND (SI OPAQUE) --- ; --- PASSE 1 : DESSIN DU FOND (SI OPAQUE) ---
mov ax, [fs:PTR_GFX + gfx.cur_mode] test word [fs:PTR_GFX + gfx.cur_mode], GFX_TXT_TRANSPARENT_BKG
test ax, GFX_TXT_TRANSPARENT_BKG jnz .skip_bkg
jz .skip_bkg
mov ax, .glyph_row
not al ; Inverser le glyphe pour le fond not al ; Inverser le glyphe pour le fond
ror ax, cl ; Aligner le fond sur les octets VRAM ror ax, cl ; Aligner le fond sur les octets VRAM
@ -422,8 +421,7 @@ vga_putc:
.skip_bkg: .skip_bkg:
; --- PASSE 2 : DESSIN DU TEXTE --- ; --- PASSE 2 : DESSIN DU TEXTE ---
mov ax, [fs:PTR_GFX + gfx.cur_mode] test word [fs:PTR_GFX + gfx.cur_mode], GFX_TXT_TRANSPARENT_TEXT
test ax, GFX_TXT_TRANSPARENT_TEXT
jnz .next_line jnz .next_line
mov ax, .glyph_row mov ax, .glyph_row

View file

@ -85,33 +85,39 @@ gui_api_table:
dw gui_get_widget_ptr dw gui_get_widget_ptr
dw gui_api_slider_attr dw gui_api_slider_attr
; --- Structure d'un OBJET (Bouton, etc) --- ; --- Structure d'un OBJET (Bouton, etc) ---
struc widget struc widget
.header resw 1 ; HEADER
.state resb 1 ; État (0=libre, >0=utilisé) .state resb 1 ; État (0=libre, >0=utilisé)
.type resb 1 ; Type (0=Button, 1=Slider...) .type resb 1 ; Type (0=Button, 1=Slider...)
.oldstate resb 1 ; widget a-t-il été modifié ? .oldstate resb 1 ; widget a-t-il été modifié ?
.user_id resb 1 ; ID unique utilisateur .user_id resb 1 ; ID unique utilisateur
.x resw 1 ; Position X .x resw 1 ; Position Xevent_drag
.y resw 1 ; Position Y .y resw 1 ; Position Y
.x2 resw 1 ; Position X2 calculée
.y2 resw 1 ; Position Y2 calculée
.w resw 1 ; Largeur .w resw 1 ; Largeur
.h resw 1 ; Hauteur .h resw 1 ; Hauteur
; texte du widget
.text_ofs resw 1 ; Offset du texte .text_ofs resw 1 ; Offset du texte
.text_seg resw 1 ; Segment du texte .text_seg resw 1 ; Segment du texte
.event_click resw 1 ; adresse de la fonction "on click"
.event_drag resw 1 ; adresse de la fonction "on drag"
; global attributes
.attr_mode resb 1 ; 0=None, 1=Horiz, 2=Vert .attr_mode resb 1 ; 0=None, 1=Horiz, 2=Vert
.attr_free resb 1 ; free
.attr_min resw 1 ; Valeur/Position Min .attr_min resw 1 ; Valeur/Position Min
.attr_max resw 1 ; Valeur/Position Max .attr_max resw 1 ; Valeur/Position Max
.attr_val resw 1 ; Valeur/Position Actuelle .attr_val resw 1 ; Valeur/Position Actuelle
; internal values
.x2 resw 1 ; Position X2 calculée
.y2 resw 1 ; Position Y2 calculée
; slider only
.thumb_pos resw 1 ; Valeur/Position Actuelle en pixel pour le dessin. .thumb_pos resw 1 ; Valeur/Position Actuelle en pixel pour le dessin.
.thumb_pct resb 1 ; Taille du curseur en % (1-100) .thumb_pct resb 1 ; Taille du curseur en % (1-100)
.attr_anchor resw 1 ; interne Offset pour le drag .attr_anchor resw 1 ; interne Offset pour le drag
; event handler
.event_click resw 1 ; adresse de la fonction "on click"
alignb 2 ; Alignement mémoire pour performance alignb 2 ; Alignement mémoire pour performance
endstruc endstruc
; actuellement 34 octets ; actuellement 34 octets
@ -226,12 +232,12 @@ gui_api_set_text:
; ;
; parameters : type, x, y, w, h, text_ofs, text_seg ; parameters : type, x, y, w, h, text_ofs, text_seg
; ;
; -----------------------------------------------------------------------------
%define .type word [bp+4] %define .type word [bp+4]
%define .x word [bp+6] %define .x word [bp+6]
%define .y word [bp+8] %define .y word [bp+8]
%define .w word [bp+10] %define .w word [bp+10]
%define .h word [bp+12] %define .h word [bp+12]
; -----------------------------------------------------------------------------
gui_api_create: gui_api_create:
push bp push bp
mov bp, sp mov bp, sp
@ -239,8 +245,8 @@ gui_api_create:
mov ax, SEG_GUI mov ax, SEG_GUI
mov gs, ax mov gs, ax
call gui_alloc_widget ; Returns GS:SI
mov ax, -1 mov ax, -1
call gui_alloc_widget ; Returns GS:SI
jc .done jc .done
; ID = SI / widget_size ; ID = SI / widget_size
@ -249,6 +255,9 @@ gui_api_create:
mov cx, widget_size mov cx, widget_size
div cx div cx
mov bx, 0xDEAD
mov word [gs:si + widget.header], bx
mov bx, .type mov bx, .type
mov byte [gs:si + widget.type], bl mov byte [gs:si + widget.type], bl
mov bx, .x mov bx, .x
@ -262,15 +271,16 @@ gui_api_create:
mov byte [gs:si + widget.state], GUI_STATE_NORMAL mov byte [gs:si + widget.state], GUI_STATE_NORMAL
mov byte [gs:si + widget.oldstate], 0 mov byte [gs:si + widget.oldstate], 0
.done: .done:
pop gs pop gs
leave leave
%undef .type
%undef .x
%undef .y
%undef .w
%undef .h
ret ret
%undef .type
%undef .x
%undef .y
%undef .w
%undef .h
; ----------------------------------------------------------------------------- ; -----------------------------------------------------------------------------
; gui_api_get_state ; gui_api_get_state
@ -430,7 +440,7 @@ gui_get_widget_ptr:
; Out: GS:SI = Ptr, CF=1 if error ; Out: GS:SI = Ptr, CF=1 if error
; ----------------------------------------------------------------------------- ; -----------------------------------------------------------------------------
gui_get_widget_ptr_internal: gui_get_widget_ptr_internal:
push cx push cx
push dx push dx
cmp ax, GUI_MAX_WIDGETS cmp ax, GUI_MAX_WIDGETS
@ -511,6 +521,7 @@ gui_alloc_widget:
; Pas trouvé (Plein) ; Pas trouvé (Plein)
stc ; set Carry Flag : erreur stc ; set Carry Flag : erreur
mov ax, -1
jmp .done jmp .done
.found: .found:
@ -521,7 +532,6 @@ gui_alloc_widget:
; Reset des champs critiques pour éviter les déchets ; Reset des champs critiques pour éviter les déchets
mov word [gs:si + widget.event_click], 0 mov word [gs:si + widget.event_click], 0
mov word [gs:si + widget.event_drag], 0
mov byte [gs:si + widget.thumb_pct], 10 ; 10% par défaut mov byte [gs:si + widget.thumb_pct], 10 ; 10% par défaut
mov word [gs:si + widget.thumb_pos], 0 mov word [gs:si + widget.thumb_pos], 0
mov word [gs:si + widget.attr_val], 0 mov word [gs:si + widget.attr_val], 0

View file

@ -487,7 +487,7 @@ draw_checkbox:
inc bx inc bx
GFX GOTOXY, cx, bx GFX GOTOXY, cx, bx
GFX TXT_MODE, GFX_TXT_BLACK & GFX_TXT_TRANSPARENT_BKG GFX TXT_MODE, GFX_TXT_BLACK_TRANSPARENT
mov dx, [gs:si + widget.text_seg] mov dx, [gs:si + widget.text_seg]
mov ax, [gs:si + widget.text_ofs] mov ax, [gs:si + widget.text_ofs]

View file

@ -486,14 +486,7 @@ gui_logic_slider:
je .no_change je .no_change
mov [gs:si + widget.thumb_pos], ax mov [gs:si + widget.thumb_pos], ax
; Appel du callback on_drag .force_redraw:
cmp word [gs:si + widget.event_drag], 0
je .force_redraw
pusha
call word [gs:si + widget.event_drag]
popa
.force_redraw:
mov byte [gs:si + widget.oldstate], 255 ; Force le redessin mov byte [gs:si + widget.oldstate], 255 ; Force le redessin
.no_change: .no_change: