OSDev -- double buffering rebooting system
Hello I'm trying to make a simple os, and I'm currently trying to do double buffering.
I have two arrays in the size of the screen and a function that copy the array that currently is being used to the memory of the screen and then swap the being used array to the second one.
And there is a function that clear the screen and set it to a specific color.
screen.c
static u8 *BUFFER = (u8*) 0xA0000;
u8 buffers[2][SCREEN_SIZE];
u8 current_buffer = 0;
#define CURRENT (buffers[current_buffer])
#define SWAP() (current_buffer = 1 - current_buffer)
void screen_swap(){
memcpy(BUFFER, CURRENT, SCREEN_SIZE);
SWAP();
}
void clear_screen(u8 color){ // set all the memory of the screen to one color
memset(&CURRENT, color, SCREEN_SIZE);
}
memory.c
void memset(void* src, u8 val, u32 len){
u8* ptr = (u8*)src;
while(len--){
*ptr++ = val;
}
}
void* memcpy(void* dst, void* src, u32 len){
u8 *d = (u8*)dst;
const u8 *s = (const u8*)src;
while (len-- > 0){
*d++ = *s++;
}
return dst;
}
When I try to run these functions the system keeps rebooting. For example:
clear_screen(COLOR(0,0,255));
screen_swap();
A link to my github repo for more context
Comments
Post a Comment