《30天自制操作系统》笔记(11)——高分辨率

上传人:ldj****22 文档编号:37396709 上传时间:2018-04-15 格式:DOCX 页数:8 大小:112.34KB
返回 下载 相关 举报
《30天自制操作系统》笔记(11)——高分辨率_第1页
第1页 / 共8页
《30天自制操作系统》笔记(11)——高分辨率_第2页
第2页 / 共8页
《30天自制操作系统》笔记(11)——高分辨率_第3页
第3页 / 共8页
《30天自制操作系统》笔记(11)——高分辨率_第4页
第4页 / 共8页
《30天自制操作系统》笔记(11)——高分辨率_第5页
第5页 / 共8页
点击查看更多>>
资源描述

《《30天自制操作系统》笔记(11)——高分辨率》由会员分享,可在线阅读,更多相关《《30天自制操作系统》笔记(11)——高分辨率(8页珍藏版)》请在金锄头文库上搜索。

1、30 天自制操作系统笔记(11)高分辨率进度回顾上一篇介绍了定时器的初始化和使用方法。接下来就该实现多任务了。不过原作者在这之前写了关于提高分辨率的章节,本篇也总结一下设置显示器高分辨率的方法好了。本篇内容过于简单,算是小小的休息一下。启用高分辨率的思路:检测显卡是否支持某种分辨率;如果支持,则通过 INT 0x10 指令启用之;否则使用任意显卡都支持的低分辨率。VBE历史上秦始皇扫平中原一统六国,其历史功绩之一便是在这之后统一了度量衡,从此全国人民在计算度量买卖的时候都有统一的标准了。秦始皇能够强制废除六国的货币、度量标准,但是显卡公司里没有一个能够成为秦始皇,也就造成了设置显示器分辨率的各

2、种麻烦。然而天下大势分久必合,显卡公司虽然无法合并为一,但市场不接受各自为政的混乱标准,因此多家显卡公司协商成立了 VBE(Video Electronics Standards Association)即视频电子标准协会。VBE 制作了专用的 BIOS,基本上可以兼容所有的显卡分辨率设置。这个 BIOS 就称为“VESA BIOS extension“(VBE)。可以说 VBE 就是显卡公司之间统一的度量衡。回到顶部(go to top)设置低分辨率设置 320*200 这样的低分辨率时,使用“AH=0; AL=画面模式号码;INT 0x10;“就行了。回到顶部(go to top)设置高分

3、辨率设置 640*480 等高分辨率时,要使用“AX=0x4f02;BX=画面模式号码;INT 0x10;“。VBE 的画面模式号如下。0x101640*480*8bit 彩色0x103800*600*8bit 彩色0x1051024*768*8bit 彩色0x1071280*1024*8bit 彩色还有一些其它的模式,原作者省略了,我也就懒得知道了。另外,QEMU 中不能使用 0x107。原因不明。实际使用的时候,要把画面模式号加上 0x4000,再赋值到 BX 中。首先要判断计算机使用的是什么显卡。如果不能使用 VBE,就只能用低分辨率了。1 MOV AX, 0x9000 2 MOV ES

4、, AX 3 MOV DI, 0 4 MOV AX, 0x4f005 INT 0x10 6 CMP AX, 0x004f 7 JNE scrn320在这里,我们给 ES 赋值为 0x9000,DI 赋值为 0,AX 赋值为 0x4f00,再执行INT 0x10。如果 VBE 存在,AX 就会变成 0x004f,否则就只能使用 320*200的分辨率了。显卡能利用的 VBE 信息,会写入内存中 ES:DI 指定的地址开始的 512 字节,所以这样要设置 ES 和 DI。然后要判断 VBE 版本。原作者的 OS 只支持 VBE2.0 以上的显卡。1 MOV AX, ES:DI + 4 2 CMP

5、AX, 0x0200 3 JB scrn320 ; if (AX 0x0200) goto scrn320即使 VBE 版本是 2.0 以上,也不能保证所有的画面模式都能用。现在我们要通过 VBE 来查看一下画面模式 0x105 能不能用。1 MOV CX, VBEMODE ; VBEMODE EQU 0x105 2 MOV AX, 0x4f01 3 INT 0x10 4 CMP AX, 0x004f 5 JNE scrn320如果 AX 是 0x004f 以外的值,那么所指定的画面模式就不能用。此次取得的画面模式信息也被写入 DS:DI 开始的 512 字节处(即覆盖了之前检查 VBE 是否

6、存在的结果)。画面模式信息中重要的有如下几个。WORD ES:DI + 0x00 ; 模式属性bit7 不是 1 就不好办WORD ES:DI + 0x12 ; X 的分辨率WORD ES:DI + 0x14 ; Y 的分辨率WORD ES:DI + 0x19 ; 颜色数必须为 8WORD ES:DI + 0x1b ; 颜色的指定方法必须为 4(即调色板模式)WORD ES:DI + 0x28 ; VRAM 的地址我们来确认如下三项内容:颜色数是否为 8是否为调色板模式画面模式号码可否加上 0x4000 再进行指定1 CMP BYTE ES:DI + 0x19, 82 3 JNE scrn32

7、04 5 CMP BYTE ES:DI + 0x1b, 46 7 JNE scrn3208 9 MOV AX, ES:DI + 0x00 10 11 AND AX, 0x0080 12 13 JZ scrn320 ; 模式属性的 bit7 是 0,所以放弃如果上述步骤中没有跳入 scrn320,那么就可以使用高分辨率。1 MOV BX, VBEMODE+0x40002 MOV AX, 0x4f023 INT 0x104 MOV BYTE VMODE, 8 ; 记下画面模式(参考 C 语言)5 MOV AX, ES:DI + 0x126 MOV SCRNX, AX7 MOV AX, ES:DI

8、+ 0x148 MOV SCRNY, AX9 MOV EAX, ES:DI + 0x28 10 JMP keystatus最后的 JMP 指令,用来让程序跳过后面的 scrn320,直接进入在 BIOS 中查询键盘状态的地方。下面就剩下 scrn320 这一小段了。1 scrn320: 2 MOV AL, 0x13 ; VGA 图,320*200*8bit 彩色3 MOV AH, 0x00 4 INT 0x10 5 MOV BYTE VMODE, 8 ; 记下画面模式(参考 C 语言)6 MOV WORD SCRNX, 320 7 MOV WORD SCRNY, 200 8 MOV DWORD

9、 VRAM, 0x000a0000我用 VMware 分别试验了 640*480*8bit 彩色、800*600*8bit 彩色、1024*768*8bit 彩色、1280*1024*8bit 彩色这几种情况,发现均可以支持。另外,如原作者所说,QEMU 不支持 1280*1024*8bit 彩色。这也是 VMware比 QEMU 更强一些的一个证据。截图如下。下面是 600*400 分辨率的。下面是 1024*768 分辨率的。下面是 1280*1024 分辨率的。我的显示器不够显示这么大,所以截了 2 个图。总结启用高分辨率的思路:检测显卡是否支持某种分辨率;如果支持,则通过 INT 0x10 指令启用之;否则使用任意显卡都支持的低分辨率。

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 行业资料 > 其它行业文档

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号