diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/drivers/video/vga.c | 6 | ||||
-rw-r--r-- | src/drivers/video/vga.h | 2 |
2 files changed, 5 insertions, 3 deletions
diff --git a/src/drivers/video/vga.c b/src/drivers/video/vga.c index 751cbc5..fd5bb10 100644 --- a/src/drivers/video/vga.c +++ b/src/drivers/video/vga.c @@ -284,6 +284,7 @@ bool vga_set_mode( vga_t *vga, const vga_mode_t mode ) vga->mode = mode; vga->mode.segment = get_frame_buffer_segment( vga ); + vga->mode.segment_size = get_frame_buffer_segment_size( vga ); vga_use_z_buffer( vga, false ); @@ -429,8 +430,7 @@ void vga_use_z_buffer( vga_t *vga, bool use ) vga->use_z_buffer = use; if( vga->use_z_buffer ) { - size_t size = get_frame_buffer_segment_size( vga ); - vga->zbuffer = (uint8_t *)malloc( size ); + vga->zbuffer = (uint8_t *)malloc( vga->mode.segment_size ); vga->base_addr = &vga->zbuffer[0]; } else { if( vga->zbuffer != NULL ) { @@ -445,7 +445,7 @@ void vga_refresh( vga_t *vga ) { if( vga->use_z_buffer ) { vga_wait_for_retrace( vga ); - memcpy( vga->mode.segment, vga->zbuffer, 65535 ); + memcpy( vga->mode.segment, vga->zbuffer, vga->mode.segment_size ); } } diff --git a/src/drivers/video/vga.h b/src/drivers/video/vga.h index aa842dc..0947856 100644 --- a/src/drivers/video/vga.h +++ b/src/drivers/video/vga.h @@ -4,6 +4,7 @@ #include <stdbool.h> #include "string.h" +#include "stddef.h" #include "interrupts.h" #include "port.h" @@ -24,6 +25,7 @@ typedef struct { int color_depth; uint8_t regs[NOF_MODE_REGS]; uint8_t *segment; + size_t segment_size; } vga_mode_t; typedef struct { |