#include "types.h" uint8_t* VMEM_ADDR = (uint8_t*)0xb8000; const int TERM_WIDTH = 80; const int TERM_HEIGHT = 25; int cursor_x = 0; int cursor_y = 0; void outb(uint16_t portnumber, uint8_t data) { asm volatile("outb %0, %1" : : "a" (data), "Nd" (portnumber)); } uint8_t inb(uint16_t portnumber) { uint8_t result; asm volatile("inb %1, %0" : "=a" (result) : "Nd" (portnumber)); return result; } uint16_t get_cursor_position() { uint16_t cursor_position = 0; uint8_t* cursor_position_split = (uint8_t*)&cursor_position; outb(0x3D4, 0x0F); cursor_position_split[0] = inb(0x3D5); outb(0x3D4, 0x0E); cursor_position_split[1] = inb(0x3D5); return cursor_position; } void init_term() { uint16_t cursor_position = get_cursor_position(); cursor_y = cursor_position / TERM_WIDTH; cursor_x = cursor_position % TERM_WIDTH; } void clear_screen() { for (int i=0; i