linux-0.11调试教程,con_init函数和右上角的EGAc
来源:互联网 发布:office2016 mac 破解版 编辑:程序博客网 时间:2024/06/05 08:44
最后4个字母是EGAc对应8个字节0x07470745 0x07630741。
因为是EGAc,所以0xb8000是显存的起始地址,而这时origin 也设置为video_mem_start既0xb8000。
所以可以在0xb8030既第24个字母处(每个字母用2个字节表示),设置badc。
#define ORIG_VIDEO_MODE ((*(unsigned short *)0x90006) & 0xff)
所以,ORIG_VIDEO_MODE 为03不等于7,所以 运行 else /* If not, it is color. */
之后的语句。
又因为#define ORIG_VIDEO_EGA_BX (*(unsigned short *)0x9000a)
所以ORIG_VIDEO_EGA_BX 为0x0003,不等于0x10,所以会运行下面的语句。
if ((ORIG_VIDEO_EGA_BX & 0xff) != 0x10)
{
video_type = VIDEO_TYPE_EGAC;
video_mem_end = 0xbc000;
display_desc = "EGAc";
}
相关代码:
void con_init(void)
{
register unsigned char a;
char *display_desc = "????";
char *display_ptr;
video_num_columns = ORIG_VIDEO_COLS;
video_size_row = video_num_columns * 2;
video_num_lines = ORIG_VIDEO_LINES;
video_page = ORIG_VIDEO_PAGE;
video_erase_char = 0x0720;
if (ORIG_VIDEO_MODE == 7) /* Is this a monochrome display? */
{
video_mem_start = 0xb0000;
video_port_reg = 0x3b4;
video_port_val = 0x3b5;
if ((ORIG_VIDEO_EGA_BX & 0xff) != 0x10)
{
video_type = VIDEO_TYPE_EGAM;
video_mem_end = 0xb8000;
display_desc = "EGAm";
}
else
{
video_type = VIDEO_TYPE_MDA;
video_mem_end = 0xb2000;
display_desc = "*MDA";
}
}
else /* If not, it is color. */
{
video_mem_start = 0xb8000;
video_port_reg = 0x3d4;
video_port_val = 0x3d5;
if ((ORIG_VIDEO_EGA_BX & 0xff) != 0x10)
{
video_type = VIDEO_TYPE_EGAC;
video_mem_end = 0xbc000;
display_desc = "EGAc";
}
else
{
video_type = VIDEO_TYPE_CGA;
video_mem_end = 0xba000;
display_desc = "*CGA";
}
}
/* Let the user known what kind of display driver we are using */
display_ptr = ((char *)video_mem_start) + video_size_row - 8;
while (*display_desc)
{
*display_ptr++ = *display_desc++;
display_ptr++;
}
/* Initialize the variables used for scrolling (mostly EGA/VGA) */
origin = video_mem_start;
scr_end = video_mem_start + video_num_lines * video_size_row;
top = 0;
bottom = video_num_lines;
gotoxy(ORIG_X,ORIG_Y);
set_trap_gate(0x21,&keyboard_interrupt);
outb_p(inb_p(0x21)&0xfd,0x21);
a=inb_p(0x61);
outb_p(a|0x80,0x61);
outb(a,0x61);
}
- linux-0.11调试教程,con_init函数和右上角的EGAc
- linux-0.11调试教程,task2的参数,copy_strings()函数和create_tables()函数的关系
- linux-0.11调试教程,update_line()函数分析,和update_line()函数的数据模型
- linux-0.11调试教程,move_cursor_relative()函数和变量last_c_pos和变量c_pos的关系
- linux-0.11调试教程,rl_insert_text函数和the_line[]数组
- linux-0.11调试教程,readline ()函数中,ECHO的关闭和开启
- linux-0.11调试教程,fwrite ()函数的作用
- linux-0.11调试教程,终端的初始化init_terminal_io ()函数分析
- linux-0.11调试教程,update_line()函数中按下退格键时对应的缓冲区
- linux-0.11调试教程,rl_dispatch ()函数调用函数的参数的个数
- linux-0.11调试教程,fflush()函数实现分析和FILE类型定义
- linux-0.11调试教程,filetutils的版本号
- linux-0.11调试教程,update_line()函数中的按下字符键对应的缓冲区
- linux-0.11调试教程,task3(04),sa_restore函数
- 左上角和右上角的按钮
- linux-0.11调试教程,task2参数所在内存页的页目录项和页表项
- linux-0.11调试教程,bash-1.12源代码分析readline.a和termcap.a的连接
- Linux LCD 调试log(右上角有小黑框-光标)
- 【转载】软件工程知识体系全景图
- Android电源管理之三:PowerManager.WakeLock源码详读
- blob字段类型
- List of Game enging form wiki
- 嵌入式工程师经典面试题(转载...)
- linux-0.11调试教程,con_init函数和右上角的EGAc
- 【SQL】oracle date类型格式化输出
- android仿iPhone自定义滚动条滑动选框视图
- 未预编译文件“.aspx”,因此不能请求该文件
- 终端特殊字符
- PassBook
- 【观察者模式】
- 【转】mysql触发器的实战经验(触发器执行失败,sql会回滚吗)
- <feff> 问题