diff options
author | Andreas Baumann <mail@andreasbaumann.cc> | 2017-06-16 19:22:57 +0200 |
---|---|---|
committer | Andreas Baumann <mail@andreasbaumann.cc> | 2017-06-16 19:22:57 +0200 |
commit | dd7cbebcb41381fdb87e5c8e4d9d988337919c9c (patch) | |
tree | b12740ff22b0101b1891f8b162f1e9142da797c0 /src/kernel/kernel.c | |
parent | b6f1311502f48a091dd51bd7443105963071af9a (diff) | |
download | abaos-dd7cbebcb41381fdb87e5c8e4d9d988337919c9c.tar.gz abaos-dd7cbebcb41381fdb87e5c8e4d9d988337919c9c.tar.bz2 |
switching mode text/graphics, text is distorted
Diffstat (limited to 'src/kernel/kernel.c')
-rw-r--r-- | src/kernel/kernel.c | 28 |
1 files changed, 23 insertions, 5 deletions
diff --git a/src/kernel/kernel.c b/src/kernel/kernel.c index 19cf8e6..6342a26 100644 --- a/src/kernel/kernel.c +++ b/src/kernel/kernel.c @@ -27,10 +27,16 @@ static void handle_mouse_event( mouse_event_t *event, void *context ); static bool terminate = false; +typedef enum { + MODE_TEXT, + MODE_GRAPHICS +} mode_t; + typedef struct { vga_text_t vga_text; driver_manager_t driver_manager; vga_t vga; + mode_t mode; } global_context_t; static global_context_t global_context; @@ -39,6 +45,8 @@ static global_context_t global_context; // the boot loader expects the entry point to be here! void kernel_main( void ) { + global_context.mode = MODE_TEXT; + serial_t serial; serial_init( &serial ); @@ -181,12 +189,22 @@ static void handle_keyboard_event( keyboard_event_t *event, void *context ) } else if( strcmp( buf, "mode" ) == 0 ) { // TODO: move mode switches to and from graphics/text mode here, // for now when we enter the graphics mode we remain there - if( vga_set_mode( vga, vga_make_mode( 320, 200, 8 ) ) ) { - vga_clear_screen( vga, vga_make_RGB( 0x00, 0x00, 0xA8 ) ); - vga_draw_char( vga, 'A', 100, 100, vga_make_RGB( 0x00, 0x00, 0xA8 ), - vga_make_RGB( 0xFF, 0xFF, 0xFF ) ); + switch( global_context->mode ) { + case MODE_TEXT: + if( vga_set_mode( vga, vga_make_mode( 320, 200, 8 ) ) ) { + vga_clear_screen( vga, vga_make_RGB( 0x00, 0x00, 0xA8 ) ); + vga_draw_char( vga, 'A', 100, 100, vga_make_RGB( 0x00, 0x00, 0xA8 ), + vga_make_RGB( 0xFF, 0xFF, 0xFF ) ); + } + global_context->mode = MODE_GRAPHICS; + break; + + case MODE_GRAPHICS: + if( vga_set_mode( vga, vga_make_mode( 640, 480, 4 ) ) ) { + } + global_context->mode = MODE_TEXT; + break; } - } else { printf( "ERR: Unknown pre-boot command '%s'\n", buf ); } |