我的学习之旅(18)console.h和console.c

来源:互联网 发布:怎么卸载kingroot软件 编辑:程序博客网 时间:2024/05/23 11:59
//设置屏幕的起始位置static void set_screen_origin(unsigned char flag){    if( flag )        cli();    outb_p(12, REG_PORT);    outb_p(0xff&((g_screen_origin - DISP_BASE_ADDR) >> 9), VALUE_PORT);    outb_p(13, REG_PORT);    outb_p(0xff &((g_screen_origin - DISP_BASE_ADDR)>>1), VALUE_PORT);    if( flag )        sti();}void clear_screen(unsigned color){    unsigned char *p;    unsigned short i;    unsigned int length = ( g_screen_bottom -g_screen_top) * BYTES_FOR_ONE_LINE;     p = (unsigned char *)g_screen_origin;    for(i = 0; i <  length;i++) {        *p++ = ' ';        *p++ = color;    }    return;} inline void gotoxy(unsigned int new_x,unsigned int new_y){        //确保坐标在合理范围内if (new_x > DISP_MAX_X || new_y >= DISP_MAX_Y)return;         /*刷新x,y坐标和显示内存中位置偏移。            y表示行号,x表示列号(x<<1)的目的:是一个字符+颜色占据两个字节。         */g_x=new_x;g_y=new_y;g_position=g_screen_origin + g_y*BYTES_FOR_ONE_LINE + (g_x<<1);}//在(g_x,g_y)坐标处设定光标inline void set_cursor(unsigned char flag){        if( flag)    cli();        outb_p(14, REG_PORT);outb_p(0xff&((g_position-DISP_BASE_ADDR)>>9), VALUE_PORT);outb_p(15, REG_PORT);outb_p(0xff&((g_position-DISP_BASE_ADDR)>>1), VALUE_PORT);            if( flag )    sti();}void console_init(void){    /*设置屏幕的起始位置*/    (void)set_screen_origin(0);    /*清屏*/    (void)clear_screen(DISP_FG_WHITE + DISP_BG_BLACK);    (void)gotoxy(0, 0);    /*设置光标*/    (void)set_cursor(0);}
0 0
原创粉丝点击