处理器:Intel Celeron® Dual-Core CPU 2.10GHz
操作系统:Windows7 专业版 x86
阅读书籍:《30天自制操作系统》—川合秀实[2015.04.15]
工具:../toolset/
高分辨率的利用方法因显卡不同而不同。由于多家公司显卡的竞争,使得在各家公司之间,画面模式的设定方法和使用方法各有不同。后来许多显卡公司协商,成立VESA协会,并制作了专用的BIOS,这个追加的BIOS被简称作VBE。利用它就可以使用显卡的高分辨率功能了。由于不能断定每台计算机使用的是什么样的显卡,有的公司尚未与VESA进行合作。如果是这样公司的产品,由于不能使用VBE(尤其专门高分辨率的模式),就只能使用原BIOS提供的320 x 200的画面了。----抄于“书”。
设置屏幕分辨率是用汇编语言来完成的(代码在asmhead.nas文件中)。
1. ;判断VBE是否存在
2. ;取得的画面模式会保存在ES:DI开始的512字节内存里
3. MOV AX,0x9000 ;INT 0x10程序参数
4. MOV ES,AX
5. MOV DI,0
6. MOV AX,0x4f00
7. INT 0x10
8. CMP AX,0x004f ;如果AX不等于0x004f则不存在VBE
9. JNE scrn320
10.
11. ;检查VBE的版本
12. MOV AX, [ES:DI + 4]
13. CMP AX, 0x200
14. JB scrn320 ;如果VBE不是2.0以上则使用320 * 200分辨率即使VBE版本是VBE2.0,也不能保证所有的画面模式都可以使用。需要检查0x105画面模式(1024x 768 x 8bit 彩色)是否可以使用。
1. VBEMODE EQU 0x105
2.
3. ;取得画面模式信息
4. ;取得的画面模式会保存在ES:DI开始的256字节内存里
5. MOV CX,VBEMODE
6. MOV AX,0x4f01
7. INT 0x10
8. CMP AX,0x004f ;如果AX不等于0x004f则不支持0x105画面模式
9. JNE scrn320在画面模式信息中,重要的信息有6个。(Page278)
1. ;画面模式信息的确认
2. CMP BYTE [ES:DI+0x19],8
3. JNE scrn320
4. CMP BYTE [ES:DI+0x1b],4
5. JNE scrn320
6. MOV AX,[ES:DI+0x00]
7. AND AX,0x0080
8. JZ scrn320Figure1. VBE的画面信息
如果以上检查皆通过,就可以调用INT 0x10程序来切换画面,并将画面模式信息保存到指定内存中。
1. ;画面模式切换并将画面模式信息保存到内存中
2. MOV BX,VBEMODE+0x4000 ;0x10程序VBE参数
3. MOV AX,0x4f02
4. INT 0x10
5. MOV BYTE [VMODE],8 ;保存VBE画面模式信息
6. MOV AX,[ES:DI+0x12]
7. MOV [SCRNX],AX
8. MOV AX,[ES:DI+0x14]
9. MOV [SCRNY],AX
10. MOV EAX,[ES:DI+0x28]
11. MOV [VRAM],EAX
12. JMP keystatus
13.
14. ;原320 * 200 * 8画面模式
15. scrn320:
16. MOV AL,0x13 ; VGA画面模式320x200x8bit彩色
17. MOV AH,0x00
18. INT 0x10
19. MOV BYTE[VMODE],8 ; 保存VGA画面模式信息
20. MOV WORD[SCRNX],320
21. MOV WORD[SCRNY],200
22. MOV DWORD[VRAM],0x000a0000
23.
24. ;获取键盘指示灯状态的程序
25. keystatus:
26. MOV AH,0x02
27. INT 0x16 ; keyboard BIOS
28. MOV [LEDS],AL
29. ……
30. ;后面的代码跟之前一样改写asmhead.nas文件,打开”!cons_nt.bat”,整个程序通过编译后,使用”makeinstall”命令将.img文件下载到软盘中,然后用它来重启电脑:
Figure2. 1024 * 768 * 8
直接使用”make run”命令在QEMU中运行:
Figure2. 1024 x 768 x 8bit 彩色
[x86OS] Note Over.
[2015.04.17]