日期:2014-05-16 浏览次数:20863 次
最后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)
&