#include #include "vga.h" #include "ports.h" #include #include #define xy_to_indx(x,y) ((x+(y*width))*2) static char* screen; static int width; static int height; static int x; static int y; static vga_colors fg_color; static vga_colors bg_color; static char* scroll_buf[0xfa0]; static void set_char(int x,int y,char c) { screen[xy_to_indx(x,y)]=c; screen[xy_to_indx(x,y)+1]=(bg_color<<4)|fg_color; } void vga_clear() { for (int y=0;y>8); } void vga_init(text_fb_info framebuffer_info) { x=0; y=0; fg_color=VGA_WHITE; bg_color=VGA_BLACK; screen=framebuffer_info.address; width=framebuffer_info.width; height=framebuffer_info.height; port_byte_out(0x3D4,0xA); port_byte_out(0x3D5,(port_byte_in(0x3D5)&0xC0)|14); port_byte_out(0x3D4,0xB); port_byte_out(0x3D5,(port_byte_in(0x3D5)&0xE0)|15); set_cursor(0,0); vga_clear(); } void vga_write_string(const char* string) { for (size_t i=0;i