25.改进分辨率和按键响应
简介
当前我们系统的分辨率是320*200, 这种分辨率太小导致显示效果不好!
目标
;设置屏幕色彩模式mov bx,0x4101mov ax,0x4f02int 0x10
同320200中断调用号一样,只需要修改传递的参数即可调整显示分辨率。不过显存地址由0xa0000 变为 0xe0000000。
指定分辨率有以下几种方式:
bx = 0x4101 表示分辨率为 640480
bx = 0x4103 表示分辨率为800600
bx = 0x4105 表示分辨率为1024768
bx=0x4107 表示分辨率为1280*1024
上面的显示形式都是8位色彩模式。
1.os.c
修改init_main 函数显存信息如下
_vram.addr = (unsigned char *)0xe0000000;
_vram.screenW = 640;
_vram.screenH = 480;
再修改以前320×200的相关代码。运行效果如下图:

键盘响应改进
键盘扫描码转换为可输出的Ascii字符,转换成功返回非0。
unsigned char scanCode2Ascii(int code){static char keytable[0x54] = {0, 0, '1', '2', '3', '4', '5', '6', '7', '8', '9', '0', '-', '^', 0, 0,'Q', 'W', 'E', 'R', 'T', 'Y', 'U', 'I', 'O', 'P', '@', '[', 0, 0, 'A', 'S','D', 'F', 'G', 'H', 'J', 'K', 'L', ';', ':', 0, 0, ']', 'Z', 'X', 'C', 'V','B', 'N', 'M', ',', '.', '/', 0, '*', 0, ' ', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, '7', '8', '9', '-', '4', '5', '6', '+', '1', '2', '3', '0', '.'};return keytable[code];
}
修改键盘终端响应操作如下:
//断码 = 通码 + 0x80if(_keybufInfo.len>0){io_cli();char data = fifo8_get(&_keybufInfo);if(data == 0x1c){memId++;if(memId==memCount){memId=0;}showMemInfo(memDes+memId,memId);}else if(scanCode2Ascii(data)!=0 && (unsigned char)data<0x80){int len = 0;_tempArr[len++] = scanCode2Ascii(data);_tempArr[len++] = 0;showString(_shtctl,_shtMsg,140,44,COL8_FFFFFF,COL8_C6C6C6,_tempArr);}io_sti();
运行并按A键效果如下:

其中部分非字母按键是有问题的!不过现在不影响相关操作,先跳过!
本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!
