📄 vesa编程介绍4.htm
字号:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<!-- saved from url=(0077)http://shaker.myrice.com/document/vesa-program-introduce/vesa-introduce-4.htm -->
<HTML><HEAD><TITLE>VESA编程介绍</TITLE>
<META http-equiv=Content-Type content="text/html; charset=gb2312">
<META content="MSHTML 6.00.2800.1276" name=GENERATOR>
<META content=FrontPage.Editor.Document name=ProgId></HEAD>
<BODY>
<P
style="MARGIN: 0px; WORD-SPACING: 0px; TEXT-INDENT: 0px; LINE-HEIGHT: 100%">===========================================================================================</P>
<P
style="MARGIN: 0px; WORD-SPACING: 0px; TEXT-INDENT: 0px; LINE-HEIGHT: 100%"><FONT
size=4>VESA <FONT lang=ZH-CN face=宋体>编程介绍
(4):</FONT></FONT><FONT face=宋体 size=3>扩展的VGA BIOS续</FONT><FONT size=3><FONT
face=宋体>及</FONT><FONT face=宋体>应用举例</FONT></FONT><FONT
size=2> </FONT></P><FONT size=3><B>
<P
style="MARGIN: 0px; WORD-SPACING: 0px; TEXT-INDENT: 0px; LINE-HEIGHT: 100%">---------------------------------------------------------------------------------</P></B></FONT>
<P
style="MARGIN: 0px; WORD-SPACING: 0px; TEXT-INDENT: 0px; LINE-HEIGHT: 100%"><FONT
size=2>相关章节: </FONT> <FONT size=2> <A
href="http://shaker.myrice.com/document/vesa-program-introduce/vesa-introduce-1.htm">(1):
标准<FONT face="Times New Roman">VGA BIOS</FONT>及超级<FONT
face="Times New Roman">VGA</FONT>模式号</A> <A
href="http://shaker.myrice.com/document/vesa-program-introduce/vesa-introduce-2.htm"><FONT
face="Times New Roman">(2)</FONT>:CPU<FONT lang=ZH-CN>显存控制</FONT></A><FONT
lang=ZH-CN> </FONT><A
href="http://shaker.myrice.com/document/vesa-program-introduce/vesa-introduce-3.htm"><FONT
lang=ZH-CN face="Times New Roman">(3)</FONT>:<FONT lang=ZH-CN>扩展的VGA
BIOS</FONT></A></FONT> <FONT lang=ZH-CN face="Times New Roman"
size=2> </FONT></P>
<P
style="MARGIN: 0px; WORD-SPACING: 0px; TEXT-INDENT: 0px; LINE-HEIGHT: 100%"><FONT
lang=ZH-CN face="Times New Roman"
size=2>
(4): </FONT><FONT lang=ZH-CN size=2>扩展的VGA BIOS</FONT><FONT lang=ZH-CN
face="Times New Roman" size=2>(</FONT><FONT lang=ZH-CN size=2>续</FONT><FONT
lang=ZH-CN face="Times New Roman" size=2>)</FONT><FONT lang=ZH-CN
size=2>及应用举例</FONT></P><FONT size=3><B>
<P
style="MARGIN: 0px; WORD-SPACING: 0px; TEXT-INDENT: 0px; LINE-HEIGHT: 100%">---------------------------------------------------------------------------------</P></B></FONT>
<P
style="MARGIN: 0px; WORD-SPACING: 0px; TEXT-INDENT: 0px; LINE-HEIGHT: 100%"><FONT
face=宋体 size=2>6-6、04h-保存/恢复超级VGA状态</FONT></P>
<P
style="MARGIN: 0px; WORD-SPACING: 0px; TEXT-INDENT: 0px; LINE-HEIGHT: 100%"><FONT
face=宋体 size=2>该函数提供了保存和恢复超级VGA显示状态的机制。该函数是标准VGA
BIOS函数1Ch(保存/恢复显示状态)的三个子函数的超集。完整的超级VGA状态(除了显存)可通过设置请求状态遮盖(于CX寄存器)为000Fh来保存和恢复。</FONT></P>
<P
style="MARGIN: 0px; WORD-SPACING: 0px; TEXT-INDENT: 0px; LINE-HEIGHT: 100%"><FONT
face=宋体 size=2>输入:AH = 4Fh 超级VGA支持</FONT></P>
<P
style="MARGIN: 0px; WORD-SPACING: 0px; TEXT-INDENT: 0px; LINE-HEIGHT: 100%"><FONT
face=宋体 size=2>AL = 04h 保存/恢复超级VGA显示状态</FONT></P>
<P
style="MARGIN: 0px; WORD-SPACING: 0px; TEXT-INDENT: 0px; LINE-HEIGHT: 100%"><FONT
face=宋体 size=2>DL = 00h 返回保存/恢复状态缓冲区大小</FONT></P>
<P
style="MARGIN: 0px; WORD-SPACING: 0px; TEXT-INDENT: 0px; LINE-HEIGHT: 100%"><FONT
face=宋体 size=2>CX = 请求状态</FONT></P>
<P
style="MARGIN: 0px; WORD-SPACING: 0px; TEXT-INDENT: 0px; LINE-HEIGHT: 100%"><FONT
face=宋体 size=2>D0 = 保存/恢复显示硬件状态</FONT></P>
<P
style="MARGIN: 0px; WORD-SPACING: 0px; TEXT-INDENT: 0px; LINE-HEIGHT: 100%"><FONT
face=宋体 size=2>D1 = 保存/恢复显示BIOS数据状态</FONT></P>
<P
style="MARGIN: 0px; WORD-SPACING: 0px; TEXT-INDENT: 0px; LINE-HEIGHT: 100%"><FONT
face=宋体 size=2>D2 = 保存/恢复显示DAC状态</FONT></P>
<P
style="MARGIN: 0px; WORD-SPACING: 0px; TEXT-INDENT: 0px; LINE-HEIGHT: 100%"><FONT
face=宋体 size=2>D3 = 保存/恢复超级VGA状态</FONT></P>
<P
style="MARGIN: 0px; WORD-SPACING: 0px; TEXT-INDENT: 0px; LINE-HEIGHT: 100%"><FONT
face=宋体 size=2>输出:AX = 状态</FONT></P>
<P
style="MARGIN: 0px; WORD-SPACING: 0px; TEXT-INDENT: 0px; LINE-HEIGHT: 100%"><FONT
face=宋体 size=2>BX = 状态缓冲区内64字节块的块数</FONT></P>
<P
style="MARGIN: 0px; WORD-SPACING: 0px; TEXT-INDENT: 0px; LINE-HEIGHT: 100%"><FONT
face=宋体 size=2>(其它寄存器保持不变)</FONT></P>
<P
style="MARGIN: 0px; WORD-SPACING: 0px; TEXT-INDENT: 0px; LINE-HEIGHT: 100%"><FONT
face=宋体 size=2>输入:AH = 4Fh 超级VGA支持</FONT></P>
<P
style="MARGIN: 0px; WORD-SPACING: 0px; TEXT-INDENT: 0px; LINE-HEIGHT: 100%"><FONT
face=宋体 size=2>AL = 04h 保存/恢复超级VGA显示状态</FONT></P>
<P
style="MARGIN: 0px; WORD-SPACING: 0px; TEXT-INDENT: 0px; LINE-HEIGHT: 100%"><FONT
face=宋体 size=2>DL = 01h 保存超级VGA状态</FONT></P>
<P
style="MARGIN: 0px; WORD-SPACING: 0px; TEXT-INDENT: 0px; LINE-HEIGHT: 100%"><FONT
face=宋体 size=2>CX = 请求状态(同上)</FONT></P>
<P
style="MARGIN: 0px; WORD-SPACING: 0px; TEXT-INDENT: 0px; LINE-HEIGHT: 100%"><FONT
face=宋体 size=2>ES:BX = 缓冲区指针</FONT></P>
<P
style="MARGIN: 0px; WORD-SPACING: 0px; TEXT-INDENT: 0px; LINE-HEIGHT: 100%"><FONT
face=宋体 size=2>输出:AX = 状态</FONT></P>
<P
style="MARGIN: 0px; WORD-SPACING: 0px; TEXT-INDENT: 0px; LINE-HEIGHT: 100%"><FONT
face=宋体 size=2>(其它寄存器保持不变)</FONT></P>
<P
style="MARGIN: 0px; WORD-SPACING: 0px; TEXT-INDENT: 0px; LINE-HEIGHT: 100%"><FONT
face=宋体 size=2>输入:AH = 4Fh 超级VGA支持</FONT></P>
<P
style="MARGIN: 0px; WORD-SPACING: 0px; TEXT-INDENT: 0px; LINE-HEIGHT: 100%"><FONT
face=宋体 size=2>AL = 04h 保存/恢复超级VGA显示状态</FONT></P>
<P
style="MARGIN: 0px; WORD-SPACING: 0px; TEXT-INDENT: 0px; LINE-HEIGHT: 100%"><FONT
face=宋体 size=2>DL = 02h 恢复超级VGA状态</FONT></P>
<P
style="MARGIN: 0px; WORD-SPACING: 0px; TEXT-INDENT: 0px; LINE-HEIGHT: 100%"><FONT
face=宋体 size=2>CX = 请求状态(同上)</FONT></P>
<P
style="MARGIN: 0px; WORD-SPACING: 0px; TEXT-INDENT: 0px; LINE-HEIGHT: 100%"><FONT
face=宋体 size=2>ES:BX = 缓冲区指针</FONT></P>
<P
style="MARGIN: 0px; WORD-SPACING: 0px; TEXT-INDENT: 0px; LINE-HEIGHT: 100%"><FONT
face=宋体 size=2>输出:AX = 状态</FONT></P>
<P
style="MARGIN: 0px; WORD-SPACING: 0px; TEXT-INDENT: 0px; LINE-HEIGHT: 100%"><FONT
face=宋体 size=2>(其它寄存器保持不变)</FONT></P>
<P
style="MARGIN: 0px; WORD-SPACING: 0px; TEXT-INDENT: 0px; LINE-HEIGHT: 100%"><FONT
face=宋体 size=2>注意:</FONT></P>
<P
style="MARGIN: 0px; WORD-SPACING: 0px; TEXT-INDENT: 0px; LINE-HEIGHT: 100%"><FONT
face=宋体 size=2>基于对VGA环境完全兼容的目标,标准VGA BIOS函数1Ch(保存/恢复VGA状态)没有被扩展为保存超级VGA显示状态。VGA
BIOS兼容性需要函数1Ch返回一个有特定目录的特定缓冲区大小,其目录中以没有空间放下超级VGA状态了。</FONT></P>
<P
style="MARGIN: 0px; WORD-SPACING: 0px; TEXT-INDENT: 0px; LINE-HEIGHT: 100%"><FONT
face=宋体 size=2>6-7、05h-超级VGA视频存储器窗口控制(设置BANK)</FONT></P>
<P
style="MARGIN: 0px; WORD-SPACING: 0px; TEXT-INDENT: 0px; LINE-HEIGHT: 100%"><FONT
face=宋体 size=2>该函数设置或获得指定窗口在显存中的位置。函数允许对硬件页寄存器的直接访问。为了更好地使用此函数,程序应使用VESA
BIOS函数01h(返回超级VGA模式信息)来决定窗口的大小、位置和间隔尺寸。</FONT></P>
<P
style="MARGIN: 0px; WORD-SPACING: 0px; TEXT-INDENT: 0px; LINE-HEIGHT: 100%"><FONT
face=宋体 size=2>输入:AH = 4Fh 超级VGA支持</FONT></P>
<P
style="MARGIN: 0px; WORD-SPACING: 0px; TEXT-INDENT: 0px; LINE-HEIGHT: 100%"><FONT
face=宋体 size=2>AL = 05h 超级VGA显存窗口控制</FONT></P>
<P
style="MARGIN: 0px; WORD-SPACING: 0px; TEXT-INDENT: 0px; LINE-HEIGHT: 100%"><FONT
face=宋体 size=2>BH = 00h 选择超级VGA显存窗口</FONT></P>
<P
style="MARGIN: 0px; WORD-SPACING: 0px; TEXT-INDENT: 0px; LINE-HEIGHT: 100%"><FONT
face=宋体 size=2>BL = 窗口号</FONT></P>
<P
style="MARGIN: 0px; WORD-SPACING: 0px; TEXT-INDENT: 0px; LINE-HEIGHT: 100%"><FONT
face=宋体 size=2>0 = 窗口A</FONT></P>
<P
style="MARGIN: 0px; WORD-SPACING: 0px; TEXT-INDENT: 0px; LINE-HEIGHT: 100%"><FONT
face=宋体 size=2>1 = 窗口B</FONT></P>
<P
style="MARGIN: 0px; WORD-SPACING: 0px; TEXT-INDENT: 0px; LINE-HEIGHT: 100%"><FONT
face=宋体 size=2>DX = 窗口在显存中的位置(<FONT color=#ff0000>以窗口间隔尺寸为单位</FONT>)</FONT></P>
<P
style="MARGIN: 0px; WORD-SPACING: 0px; TEXT-INDENT: 0px; LINE-HEIGHT: 100%"><FONT
face=宋体 size=2>输出:AX = 状态</FONT></P>
<P
style="MARGIN: 0px; WORD-SPACING: 0px; TEXT-INDENT: 0px; LINE-HEIGHT: 100%"><FONT
face=宋体 size=2>(见下面注释)</FONT></P>
<P
style="MARGIN: 0px; WORD-SPACING: 0px; TEXT-INDENT: 0px; LINE-HEIGHT: 100%"><FONT
face=宋体 size=2>输入:AH = 4Fh 超级VGA支持</FONT></P>
<P
style="MARGIN: 0px; WORD-SPACING: 0px; TEXT-INDENT: 0px; LINE-HEIGHT: 100%"><FONT
face=宋体 size=2>AL = 05h 超级VGA显存窗口控制</FONT></P>
<P
style="MARGIN: 0px; WORD-SPACING: 0px; TEXT-INDENT: 0px; LINE-HEIGHT: 100%"><FONT
face=宋体 size=2>BH = 01h 返回超级VGA显存窗口</FONT></P>
<P
style="MARGIN: 0px; WORD-SPACING: 0px; TEXT-INDENT: 0px; LINE-HEIGHT: 100%"><FONT
face=宋体 size=2>BL = 窗口号</FONT></P>
<P
style="MARGIN: 0px; WORD-SPACING: 0px; TEXT-INDENT: 0px; LINE-HEIGHT: 100%"><FONT
face=宋体 size=2>0 = 窗口A</FONT></P>
<P
style="MARGIN: 0px; WORD-SPACING: 0px; TEXT-INDENT: 0px; LINE-HEIGHT: 100%"><FONT
face=宋体 size=2>1 = 窗口B</FONT></P>
<P
style="MARGIN: 0px; WORD-SPACING: 0px; TEXT-INDENT: 0px; LINE-HEIGHT: 100%"><FONT
face=宋体 size=2><FONT lang=ZH-CN>输出:</FONT>AX = <FONT
lang=ZH-CN>状态</FONT></FONT></P>
<P
style="MARGIN: 0px; WORD-SPACING: 0px; TEXT-INDENT: 0px; LINE-HEIGHT: 100%"><FONT
face=宋体 size=2>DX = 窗口在显存中的位置(<FONT color=#ff0000>以窗口间隔尺寸为单位</FONT>)</FONT></P>
<P
style="MARGIN: 0px; WORD-SPACING: 0px; TEXT-INDENT: 0px; LINE-HEIGHT: 100%"><FONT
face=宋体 size=2>(见如下注释)</FONT></P>
<P
style="MARGIN: 0px; WORD-SPACING: 0px; TEXT-INDENT: 0px; LINE-HEIGHT: 100%"><FONT
face=宋体 size=2>注释:</FONT></P>
<P
style="MARGIN: 0px; WORD-SPACING: 0px; TEXT-INDENT: 0px; LINE-HEIGHT: 100%"><FONT
face=宋体 size=2>该函数也能通过远程调用由程序直接访问。BIOS函数地址能通过VESA
BIOS函数01h(返回超级VGA信息)获得。模式信息块中包含有此函数地址。注意在每一次BIOS执行时函数地址都会不同,所以应在每次设置模式后获取函数指针。</FONT></P>
<P
style="MARGIN: 0px; WORD-SPACING: 0px; TEXT-INDENT: 0px; LINE-HEIGHT: 100%"><FONT
face=宋体
size=2>如果是远程调用的话,没有状态信息会被返回给程序。同时,AX和DX寄存器将遭破坏。因此,若AX、DX寄存器值需保留,应在远程调用前事先作准备。</FONT></P>
<P
style="MARGIN: 0px; WORD-SPACING: 0px; TEXT-INDENT: 0px; LINE-HEIGHT: 100%"><FONT
face=宋体 size=2>若要作远程调用,程序必须在BH、BL和DX(对于设置窗口)中装入参数,但不必装入AH和AL。</FONT></P>
<P
style="MARGIN: 0px; WORD-SPACING: 0px; TEXT-INDENT: 0px; LINE-HEIGHT: 100%"><FONT
face=宋体 size=2>6-8、06h-设置/获取逻辑扫描线长度</FONT></P>
<P
style="MARGIN: 0px; WORD-SPACING: 0px; TEXT-INDENT: 0px; LINE-HEIGHT: 100%"><FONT
face=宋体
size=2>该函数设置或获得逻辑扫描线长度。函数允许程序建立大于显示区域的逻辑显存缓冲区。然后函数07h就能允许程序设置开始显示的位置。</FONT></P>
<P
style="MARGIN: 0px; WORD-SPACING: 0px; TEXT-INDENT: 0px; LINE-HEIGHT: 100%"><FONT
face=宋体 size=2>输入:AH = 4Fh 超级VGA支持</FONT></P>
<P
style="MARGIN: 0px; WORD-SPACING: 0px; TEXT-INDENT: 0px; LINE-HEIGHT: 100%"><FONT
face=宋体 size=2>AL = 06h 逻辑扫描线长度</FONT></P>
<P
style="MARGIN: 0px; WORD-SPACING: 0px; TEXT-INDENT: 0px; LINE-HEIGHT: 100%"><FONT
face=宋体 size=2>BL = 00h 选择扫描线长度</FONT></P>
<P
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -