From 413f4b6f79cd0607575bb1059e45d168f527acc0 Mon Sep 17 00:00:00 2001 From: Frater <13979047+saintfrater@users.noreply.github.com> Date: Mon, 23 Feb 2026 18:04:20 +0100 Subject: [PATCH] add binary font + fixing error --- .gitignore | 1 + src/boot.asm | 22 +- src/common/char_bold.asm | 862 ++++++++++++++++++++++++++++++++++++ src/common/char_light.asm | 142 ++++++ src/common/chartable.asm | 886 ++------------------------------------ src/drivers/gfx_vga.asm | 24 +- src/gui/lib-api.asm | 44 +- src/gui/lib-draw.asm | 2 +- src/gui/lib-logic.asm | 9 +- 9 files changed, 1078 insertions(+), 914 deletions(-) create mode 100644 src/common/char_bold.asm create mode 100644 src/common/char_light.asm diff --git a/.gitignore b/.gitignore index 46dce5a..8970282 100644 --- a/.gitignore +++ b/.gitignore @@ -9,3 +9,4 @@ gfx/ roms/ tools/ doc/generated +assets/ diff --git a/src/boot.asm b/src/boot.asm index 4e197d7..5b6ef65 100644 --- a/src/boot.asm +++ b/src/boot.asm @@ -65,11 +65,11 @@ section .text %include "./gui/lib-api.asm" ; --- Données texte --- -str_quit db "Quitter", 0 +str_quit db "Quit", 0 str_hello db "Hello", 0 -str_option1 db "option 1", 0 -str_option2 db "option 2", 0 -str_option3 db "option 3", 0 +str_option1 db "option A", 0 +str_option2 db "option BA", 0 +str_option3 db "option BBA", 0 entrycode: cli @@ -81,8 +81,6 @@ entrycode: 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 @@ -106,8 +104,7 @@ entrycode: ; on active le mode graphique GFX INIT call mouse_init - GFX MOUSE_SHOW - + GFX MOUSE_SHOW call main_loop .loops: @@ -123,12 +120,8 @@ on_click_quit: on_click_hello: ret - main_test: ; GFX RECTANGLE_FILL, 10,10,50,20, PATTERN_WHITE, 15, 0 - - - ; GUI OBJ_CREATE, OBJ_TYPE_CHECKBOX, 200, 50, 100, 15 mov ax, 200 add ax, 4 @@ -197,8 +190,9 @@ main_loop: ; Créer Slider (Drag) GUI OBJ_CREATE, OBJ_TYPE_SLIDER, 10, 100, 150, 12 - GUI OBJ_SET_MODE, ax, SLIDER_HORIZONTAL - GUI OBJ_SLIDER_SET_ATTR, ax, 10, 140, 10, 15 + mov .my_slider, ax + 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 mov .my_slider, ax diff --git a/src/common/char_bold.asm b/src/common/char_bold.asm new file mode 100644 index 0000000..f846aa2 --- /dev/null +++ b/src/common/char_bold.asm @@ -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 + diff --git a/src/common/char_light.asm b/src/common/char_light.asm new file mode 100644 index 0000000..dd7299e --- /dev/null +++ b/src/common/char_light.asm @@ -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 ; ~ \ No newline at end of file diff --git a/src/common/chartable.asm b/src/common/chartable.asm index 882af0a..32f132f 100644 --- a/src/common/chartable.asm +++ b/src/common/chartable.asm @@ -1,862 +1,26 @@ -; ============================================================================ -; Font 8x8 (printable ASCII 0x20..0x7E) -> 95 glyphs * 8 = 760 bytes -; - bit7 = gauche, bit0 = droite -; - 1 byte = 1 scanline (haut -> bas) -; ============================================================================ -font8x8: -; 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 +; ============================================================================= +; Project : Custom BIOS / ROM +; File : chartable.asm +; Author : frater +; +; License : GNU General Public License v3.0 or later (GPL-3.0+) +; +; This program is free software: you can redistribute it and/or modify +; it under the terms of the GNU General Public License as published by +; the Free Software Foundation, either version 3 of the License, or +; (at your option) any later version. +; +; This program is distributed in the hope that it will be useful, +; but WITHOUT ANY WARRANTY; without even the implied warranty of +; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +; GNU General Public License for more details. +; +; You should have received a copy of the GNU General Public License +; along with this program. If not, see . +; +; ============================================================================= +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 \ No newline at end of file diff --git a/src/drivers/gfx_vga.asm b/src/drivers/gfx_vga.asm index 67a8f1b..5b565d8 100644 --- a/src/drivers/gfx_vga.asm +++ b/src/drivers/gfx_vga.asm @@ -37,10 +37,10 @@ ; E : text transparent ; F : background transparent ; -%define GFX_TXT_WHITE_TRANSPARENT 0x0F -%define GFX_TXT_BLACK_TRANSPARENT 0x00 -%define GFX_TXT_WHITE 0xF0 -%define GFX_TXT_BLACK 0x0F +%define GFX_TXT_WHITE_TRANSPARENT 0x800F +%define GFX_TXT_BLACK_TRANSPARENT 0x80F0 +%define GFX_TXT_WHITE 0x00F0 +%define GFX_TXT_BLACK 0x000F %define GFX_TXT_TRANSPARENT_BKG 0x8000 %define GFX_TXT_TRANSPARENT_TEXT 0x4000 @@ -160,14 +160,14 @@ vga_init: get_glyph_offset: cmp al, 0x20 jb .qmark ; al < 20h (' ' - cmp al, 0x7E + cmp al, 0x7e ja .qmark ; al > 7Eh ('~') - sub al, 0x20 + sub al, ' ' jmp .ok .qmark: mov al, '?' - sub al, 0x20 + sub al, ' ' .ok: xor ah, ah @@ -383,6 +383,7 @@ vga_putc: mov bl, al ; BL = Couleur texte (low nibble) and bl, 0x0F mov bh, al ; BH = Couleur fond (high nibble) + and bh, 0xf0 shr bh, 4 mov .cpt, 8 @@ -394,11 +395,9 @@ vga_putc: mov .glyph_row, ax ; Image 16 bits du glyphe non décalé ; --- PASSE 1 : DESSIN DU FOND (SI OPAQUE) --- - mov ax, [fs:PTR_GFX + gfx.cur_mode] - test ax, GFX_TXT_TRANSPARENT_BKG - jz .skip_bkg + test word [fs:PTR_GFX + gfx.cur_mode], GFX_TXT_TRANSPARENT_BKG + jnz .skip_bkg - mov ax, .glyph_row not al ; Inverser le glyphe pour le fond ror ax, cl ; Aligner le fond sur les octets VRAM @@ -422,8 +421,7 @@ vga_putc: .skip_bkg: ; --- PASSE 2 : DESSIN DU TEXTE --- - mov ax, [fs:PTR_GFX + gfx.cur_mode] - test ax, GFX_TXT_TRANSPARENT_TEXT + test word [fs:PTR_GFX + gfx.cur_mode], GFX_TXT_TRANSPARENT_TEXT jnz .next_line mov ax, .glyph_row diff --git a/src/gui/lib-api.asm b/src/gui/lib-api.asm index 54e5905..9a425d6 100644 --- a/src/gui/lib-api.asm +++ b/src/gui/lib-api.asm @@ -85,33 +85,39 @@ gui_api_table: dw gui_get_widget_ptr dw gui_api_slider_attr - ; --- Structure d'un OBJET (Bouton, etc) --- struc widget + .header resw 1 ; HEADER .state resb 1 ; État (0=libre, >0=utilisé) .type resb 1 ; Type (0=Button, 1=Slider...) .oldstate resb 1 ; widget a-t-il été modifié ? .user_id resb 1 ; ID unique utilisateur - .x resw 1 ; Position X + .x resw 1 ; Position Xevent_drag .y resw 1 ; Position Y - .x2 resw 1 ; Position X2 calculée - .y2 resw 1 ; Position Y2 calculée .w resw 1 ; Largeur .h resw 1 ; Hauteur + ; texte du widget .text_ofs resw 1 ; Offset 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_free resb 1 ; free .attr_min resw 1 ; Valeur/Position Min .attr_max resw 1 ; Valeur/Position Max .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_pct resb 1 ; Taille du curseur en % (1-100) - .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 endstruc ; actuellement 34 octets @@ -226,12 +232,12 @@ gui_api_set_text: ; ; parameters : type, x, y, w, h, text_ofs, text_seg ; -; ----------------------------------------------------------------------------- %define .type word [bp+4] %define .x word [bp+6] %define .y word [bp+8] %define .w word [bp+10] %define .h word [bp+12] +; ----------------------------------------------------------------------------- gui_api_create: push bp mov bp, sp @@ -239,8 +245,8 @@ gui_api_create: mov ax, SEG_GUI mov gs, ax - call gui_alloc_widget ; Returns GS:SI mov ax, -1 + call gui_alloc_widget ; Returns GS:SI jc .done ; ID = SI / widget_size @@ -249,6 +255,9 @@ gui_api_create: mov cx, widget_size div cx + mov bx, 0xDEAD + mov word [gs:si + widget.header], bx + mov bx, .type mov byte [gs:si + widget.type], bl mov bx, .x @@ -262,15 +271,16 @@ gui_api_create: mov byte [gs:si + widget.state], GUI_STATE_NORMAL mov byte [gs:si + widget.oldstate], 0 -.done: + .done: pop gs leave + %undef .type + %undef .x + %undef .y + %undef .w + %undef .h ret -%undef .type -%undef .x -%undef .y -%undef .w -%undef .h + ; ----------------------------------------------------------------------------- ; gui_api_get_state @@ -430,7 +440,7 @@ gui_get_widget_ptr: ; Out: GS:SI = Ptr, CF=1 if error ; ----------------------------------------------------------------------------- gui_get_widget_ptr_internal: - push cx + push cx push dx cmp ax, GUI_MAX_WIDGETS @@ -511,6 +521,7 @@ gui_alloc_widget: ; Pas trouvé (Plein) stc ; set Carry Flag : erreur + mov ax, -1 jmp .done .found: @@ -521,7 +532,6 @@ gui_alloc_widget: ; Reset des champs critiques pour éviter les déchets 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 word [gs:si + widget.thumb_pos], 0 mov word [gs:si + widget.attr_val], 0 diff --git a/src/gui/lib-draw.asm b/src/gui/lib-draw.asm index fc432a9..d435cb5 100644 --- a/src/gui/lib-draw.asm +++ b/src/gui/lib-draw.asm @@ -487,7 +487,7 @@ draw_checkbox: inc 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 ax, [gs:si + widget.text_ofs] diff --git a/src/gui/lib-logic.asm b/src/gui/lib-logic.asm index 48bdfce..3fab1b0 100644 --- a/src/gui/lib-logic.asm +++ b/src/gui/lib-logic.asm @@ -486,14 +486,7 @@ gui_logic_slider: je .no_change mov [gs:si + widget.thumb_pos], ax - ; Appel du callback on_drag - cmp word [gs:si + widget.event_drag], 0 - je .force_redraw - pusha - call word [gs:si + widget.event_drag] - popa - - .force_redraw: +.force_redraw: mov byte [gs:si + widget.oldstate], 255 ; Force le redessin .no_change: