25.改进分辨率和按键响应

简介

当前我们系统的分辨率是320*200, 这种分辨率太小导致显示效果不好!

目标

;设置屏幕色彩模式
    mov bx,0x4101
	mov ax,0x4f02
    int 0x10

同320200中断调用号一样,只需要修改传递的参数即可调整显示分辨率。不过显存地址由0xa0000 变为 0xe0000000。
指定分辨率有以下几种方式:
bx = 0x4101 表示分辨率为 640
480
bx = 0x4103 表示分辨率为800600
bx = 0x4105 表示分辨率为1024
768
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];
}

修改键盘终端响应操作如下:

	 //断码 = 通码 + 0x80
		if(_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键效果如下:
在这里插入图片描述

其中部分非字母按键是有问题的!不过现在不影响相关操作,先跳过!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值