#include "screen.h" #include "kernel/kernel.h" #include "asm_x86.h" //#define FOOLOS_CONSOLE static int posx=0; static int posy=0; //static void scr_nextline(); void update_cursor(uint32_t col,uint32_t row) { unsigned short position=(row*80) + col; // cursor LOW port to vga INDEX register x86_outb(0x3D4, 0x0F); x86_outb(0x3D5, (unsigned char)(position&0xFF)); // cursor HIGH port to vga INDEX register x86_outb(0x3D4, 0x0E); x86_outb(0x3D5, (unsigned char )((position>>8)&0xFF)); } // helper_funcs static void print_char_col(int x, int y, char c, char col_fg, char col_bg) { uint16_t attrib = (col_bg << 4) | (col_fg & 0x0F); uint16_t* video_mem=(uint16_t *)VMEM_FRAMEBUFFER+(x+y*SCR_REAL_WIDTH); *video_mem=c | (attrib << 8) ; } // glue func for terminal void console_put_char(uint8_t c,uint8_t color_bg, uint8_t color_fg, uint32_t x, uint32_t y) { print_char_col(x,y,c, color_bg, color_fg); } // // /* static void print_char(int x, int y, char c) { print_char_col(x,y,c,SCR_WHITE); } static void print_single_num(int i) { if(i<10)print_char_col(posx,posy,'0'+i,SCR_GREEN); else if(i<16)print_char_col(posx,posy,'A'+i-10,SCR_GREEN); posx++; if(posx>=SCR_WIDTH)scr_nextline(); } static void print_str_col(int x,int y,char *str, char col) { while(*str!=0) { print_char_col(x++,y,*(str++),col); } } static void print_str(int x,int y,char *str) { print_str_col(x,y,str,SCR_WHITE); } // // void scr_clear() { int x,y; for(x=0;xSCR_HEIGHT-2) { for(i=1;i>12); val=val << 4; } } */ /* void scr_put_hex32(uint32_t val) { scr_put_string("["); scr_put_hex(val>>16); scr_put_string(","); scr_put_hex(val&0xffff); scr_put_string("]"); } */ /* static void scr_put_char(char ch,char col) { if(ch=='\n')scr_nextline(); else if(posx=SCR_WIDTH)scr_nextline(); #endif } static void scr_put_string(char *str, char col) { while(*str!=0) { scr_put_char(*(str++),col); } } static void scr_backspace() { if(posx==0)return; print_char_col(posx-1,posy,' ',SCR_LGREEN); posx--; } */