#include "vgatext.hpp" #include "boucane.hpp" #define MAX_COL 80 #define MAX_LINE 25 VIDEO_STATE VS={ (u8 *)0, 0, 0, BLACK, GRAY, }; void vgatext_init(){ PAGE_RMAP(0xB8000,4096*2); VS.mem=(u8*)VIRT(0xB8000); } void vgatext_putchar(char c){ // Handle newline here if(c=='\n'){ VS.col=0; VS.line+=1; if(VS.line>=MAX_LINE){ VS.line=MAX_LINE-1; vgatext_scrollup(); } return; } // Print char VS.mem[VS.col*2+MAX_COL*VS.line*2]=c; VS.mem[VS.col*2+MAX_COL*VS.line*2+1]=VS.fg|VS.bg<<4; // Refresh location VS.col+=1; if(VS.col>= MAX_COL){ VS.col=0; VS.line+=1; if(VS.line>=MAX_LINE){ VS.line=MAX_LINE-1; vgatext_scrollup(); } } } void vgatext_clear(){ for(u8 i=0;i