diff --git a/.gitignore b/.gitignore index a84db7a..ba18e08 100644 --- a/.gitignore +++ b/.gitignore @@ -1,5 +1,5 @@ *bochslog* -*.o -*.elf -./*o -./*elf +*o +*elf +*iso +*swp diff --git a/framebuffer.c b/framebuffer.c new file mode 100644 index 0000000..53f2e17 --- /dev/null +++ b/framebuffer.c @@ -0,0 +1,35 @@ +// Driver implementation for Jank's text frame buffer + +// Buffer can display 80 columns by 25 Rows +// Start of buffer is at (real)address 0x000B8000 +// Memory at this section is divided into 16-bit cells + // | 15-8 | 7-4 | 0-3 + // | Asci | FG | BG +#include "framebuffer.h" + +static char* Frame_Buffer = (char*)FRAME_BUFFER_ADDR; +static char* Frame_Buffer_End = (char*)(FRAME_BUFFER_ADDR + AREA); +// Writes character to a given cell in the framebuffer + // @cell parameter is the logical (linear)index into the buffer + // _not_ the actual offset from the buffer addr + // also proper location is caller's responsibility +void write_cell(unsigned cell, char c, char fg, char bg) { + Frame_Buffer[cell*2] = c; + Frame_Buffer[cell+1] = (fg & 0x0f << 4) | (bg & 0x0f); +} + +void clear_buffer() { + char* fp = Frame_Buffer; + while(fp!=Frame_Buffer_End) { + *fp = 0x00; + } +} +void print(char* str) { + for(unsigned i =0;i