Refactoring debug terminal
This commit is contained in:
38
src/kernel/drivers/terminal/vga.c
Normal file
38
src/kernel/drivers/terminal/vga.c
Normal file
@@ -0,0 +1,38 @@
|
||||
#include <terminal.h>
|
||||
#include <memory.h>
|
||||
#include <ports.h>
|
||||
#include <multiboot.h>
|
||||
#include <stddef.h>
|
||||
#include <debug.h>
|
||||
|
||||
#define VGA_ADDRESS_PORT 0x3D4
|
||||
#define VGA_DATA_PORT 0x3D5
|
||||
#define VGA_REGISTER_CURSOR_POS_LOW 0xF
|
||||
#define VGA_REGISTER_CURSOR_POS_HIGH 0xE
|
||||
|
||||
static void *vidmem;
|
||||
|
||||
static int setup = 0;
|
||||
|
||||
void vga_init(struct fbinfo *fbinfo)
|
||||
{
|
||||
(void) fbinfo;
|
||||
vidmem = VGA_MEMORY;
|
||||
memset(vidmem, 0, VGA_SIZE*sizeof(struct vga_cell));
|
||||
setup = 1;
|
||||
}
|
||||
|
||||
void vga_movecursor(unsigned int cursor)
|
||||
{
|
||||
if(!setup) return;
|
||||
outb(VGA_ADDRESS_PORT, VGA_REGISTER_CURSOR_POS_LOW);
|
||||
outb(VGA_DATA_PORT, (uint8_t)(cursor & 0xFF));
|
||||
outb(VGA_ADDRESS_PORT, VGA_REGISTER_CURSOR_POS_HIGH);
|
||||
outb(VGA_DATA_PORT, (uint8_t)((cursor >> 8) & 0xFF));
|
||||
}
|
||||
|
||||
void vga_flush(struct vga_cell *buffer)
|
||||
{
|
||||
if(!setup) return;
|
||||
memcpy(vidmem, buffer, VGA_SIZE*2);
|
||||
}
|
||||
Reference in New Issue
Block a user