summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAndreas Baumann <mail@andreasbaumann.cc>2017-07-12 13:03:09 +0200
committerAndreas Baumann <mail@andreasbaumann.cc>2017-07-12 13:03:09 +0200
commitbd64c9d8b726a266fc452bdceef6450ac0073be8 (patch)
tree24c208284675b66dc52ee51a78b921c9e4295a41
parent573b82fd2d46ebca7f98e5323e9f18e593a7996f (diff)
downloadabaos-bd64c9d8b726a266fc452bdceef6450ac0073be8.tar.gz
abaos-bd64c9d8b726a266fc452bdceef6450ac0073be8.tar.bz2
added segment_size to vga mode structure, using for memcpy in Z buffer
refreshing the video memory and when allocating the Z buffer
-rw-r--r--src/drivers/video/vga.c6
-rw-r--r--src/drivers/video/vga.h2
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 {