资源描述:
《《30天自制操作系统》笔记(11)——高分辨率.docx》由会员上传分享,免费在线阅读,更多相关内容在学术论文-天天文库。
1、《30天自制操作系统》笔记(11)——高分辨率进度回顾上一篇介绍了定时器的初始化和使用方法。接下来就该实现多任务了。不过原作者在这之前写了关于提高分辨率的章节,本篇也总结一下设置显示器高分辨率的方法好了。本篇内容过于简单,算是小小的休息一下。启用高分辨率的思路:检测显卡是否支持某种分辨率;如果支持,则通过INT0x10指令启用之;否则使用任意显卡都支持的低分辨率。VBE历史上秦始皇扫平中原一统六国,其历史功绩之一便是在这之后统一了度量衡,从此全国人民在计算度量买卖的时候都有统一的标准了。秦始皇能够强制废除六国的货币、度量标准,但是显卡公司里没有一个能够
2、成为秦始皇,也就造成了设置显示器分辨率的各种麻烦。然而天下大势分久必合,显卡公司虽然无法合并为一,但市场不接受各自为政的混乱标准,因此多家显卡公司协商成立了VBE(VideoElectronicsStandardsAssociation)即视频电子标准协会。VBE制作了专用的BIOS,基本上可以兼容所有的显卡分辨率设置。这个BIOS就称为"VESABIOSextension"(VBE)。可以说VBE就是显卡公司之间统一的度量衡。回到顶部(gototop)设置低分辨率设置320*200这样的低分辨率时,使用"AH=0;AL=画面模式号码;INT0x10;
3、"就行了。回到顶部(gototop)设置高分辨率设置640*480等高分辨率时,要使用"AX=0x4f02;BX=画面模式号码;INT0x10;"。VBE的画面模式号如下。·0x101……640*480*8bit彩色·0x103……800*600*8bit彩色·0x105……1024*768*8bit彩色·0x107……1280*1024*8bit彩色还有一些其它的模式,原作者省略了,我也就懒得知道了。另外,QEMU中不能使用0x107。原因不明。实际使用的时候,要把画面模式号加上0x4000,再赋值到BX中。首先要判断计算机使用的是什么显卡。如果不能
4、使用VBE,就只能用低分辨率了。1MOVAX,0x90002MOVES,AX3MOVDI,04MOVAX,0x4f005INT0x106CMPAX,0x004f7JNEscrn320在这里,我们给ES赋值为0x9000,DI赋值为0,AX赋值为0x4f00,再执行INT0x10。如果VBE存在,AX就会变成0x004f,否则就只能使用320*200的分辨率了。显卡能利用的VBE信息,会写入内存中ES:DI指定的地址开始的512字节,所以这样要设置ES和DI。然后要判断VBE版本。原作者的OS只支持VBE2.0以上的显卡。1MOVAX,[ES:DI+4]
5、2CMPAX,0x02003JBscrn320;if(AX<0x0200)gotoscrn320即使VBE版本是2.0以上,也不能保证所有的画面模式都能用。现在我们要通过VBE来查看一下画面模式0x105能不能用。 1MOVCX,VBEMODE;VBEMODEEQU0x1052MOVAX,0x4f013INT0x104CMPAX,0x004f5JNEscrn320如果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];颜色数……必须为8·WORD [ES:DI+0x1b];颜色的指定方法……必须为4(即调色板模式)·WORD [ES:DI+0x28];VRAM的地址我们来确认如下三项内容:·颜色数是否为8·是否为调色板模式·画面模式号码可否加上0x4000再进行指定1CMPBYT
7、E[ES:DI+0x19],823JNEscrn32045CMPBYTE[ES:DI+0x1b],467JNEscrn32089MOVAX,[ES:DI+0x00]1011ANDAX,0x00801213JZscrn320;模式属性的bit7是0,所以放弃如果上述步骤中没有跳入scrn320,那么就可以使用高分辨率。1MOVBX,VBEMODE+0x40002MOVAX,0x4f023INT0x104MOVBYTE[VMODE],8;记下画面模式(参考C语言)5MOVAX,[ES:DI+0x12]6MOV[SCRNX],AX7MOVAX,[ES:DI+
8、0x14]8MOV[SCRNY],AX9MOVEAX,[ES:DI+0x28]10JMPkey