[Rx86OS-XIV] 提高分辨率
来源:互联网 发布:淘宝销售额排行榜 编辑:程序博客网 时间:2024/06/06 14:04
平台
处理器:Intel Celeron® Dual-Core CPU 2.10GHz
操作系统:Windows7 专业版 x86
阅读书籍:《30天自制操作系统》—川合秀实[2015.04.15]
工具:../toolset/
1 高分辨率与显卡
高分辨率的利用方法因显卡不同而不同。由于多家公司显卡的竞争,使得在各家公司之间,画面模式的设定方法和使用方法各有不同。后来许多显卡公司协商,成立VESA协会,并制作了专用的BIOS,这个追加的BIOS被简称作VBE。利用它就可以使用显卡的高分辨率功能了。由于不能断定每台计算机使用的是什么样的显卡,有的公司尚未与VESA进行合作。如果是这样公司的产品,由于不能使用VBE(尤其专门高分辨率的模式),就只能使用原BIOS提供的320 x 200的画面了。----抄于“书”。
2 提高分辨率
设置屏幕分辨率是用汇编语言来完成的(代码在asmhead.nas文件中)。
2.1 检查VBE
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分辨率2.2 检查画面模式
即使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)
2.3 确认画面模式信息
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 scrn320画面模式6个重要信息在ES:DI中的保存如下(根据下图可得每个语句确认的何种画面信息):
Figure1. VBE的画面信息
2.4 画面模式切换
如果以上检查皆通过,就可以调用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]
- [Rx86OS-XIV] 提高分辨率
- dom提高分辨率转canvas
- [Rx86OS-II] 制作IPL
- [Rx86OS-XV] 键盘输入处理
- [Rx86OS-II] 制作IPL
- IBM XIV - Ease of Management
- 【BZOJ1098 || POI-XIV-BIU】链表
- [Rx86OS-VII] 实现鼠标中断
- [Rx86OS-VIII] 接收鼠标数据
- [Rx86OS-XVI] 实现多任务
- 一篇关于fft补零提高频率分辨率的讨论
- 卓普小黑C2降低分辨率提高系统性能40%教程
- 如何提高ArcScene加载影像图的分辨率
- IBM发布其分布式存储–XIV
- [Hb-XIV] 访问CMOS RAM(端口)
- 分辨率
- 分辨率
- 分辨率
- Vijava 学习笔记之 VirtualMachine(虚拟磁盘已用容量和空闲容量)
- 数字相加问题。
- 简单的WebView自适应并嵌套在ScrollView里
- 字体下载
- JavaWeb 学习(Java Web 典型模块与项目实战大全)
- [Rx86OS-XIV] 提高分辨率
- 前辍表达式,中辍表达式,后辍表达式详解
- ACM-二分-POJ-2785-4 Values whose Sum is 0
- TDA7419调试记录(2)——2015/04/17
- PID教程
- [leetcode]Maximum Product Subarray
- Hadoop常见错误解决
- vi常用命令
- 利用 js 给 WebView add 添加 padding