📄 vesa编程介绍3.htm
字号:
style="MARGIN: 0px; WORD-SPACING: 0px; TEXT-INDENT: 0px; LINE-HEIGHT: 100%"><FONT
face=宋体 size=2>WinASegment和WinBSegment给出了窗口在CPU地址空间中的段地址。</FONT></P>
<P
style="MARGIN: 0px; WORD-SPACING: 0px; TEXT-INDENT: 0px; LINE-HEIGHT: 100%"><FONT
face=宋体 size=2>WinFuncPtr指出了CPU显存窗口函数的地址。窗口函数能通过VESA
BIOS函数05h调用,也能直接调用该函数。直接调用比使用10h中断对硬件页寄存器的访问更快,可用于高效程序。若其值为空,应通过函数05h设置内存窗口,如果内存分页被支持。</FONT></P>
<P
style="MARGIN: 0px; WORD-SPACING: 0px; TEXT-INDENT: 0px; LINE-HEIGHT: 100%"><FONT
face=宋体
size=2>XResolution和YResolution指明了显示模式的宽度和高度。在图形方式下该值以像素为单位。在文本方式下,该值以字符为单位。注意,在字符模式下以像素为单位的分辨率可以通过将X和Y分辨率分别乘以字符的宽度和高度来获得,如果有这样的扩展信息的话。</FONT></P>
<P
style="MARGIN: 0px; WORD-SPACING: 0px; TEXT-INDENT: 0px; LINE-HEIGHT: 100%"><FONT
face=宋体 size=2>XCharSize和YCharSize指出了字符单元的大小。</FONT></P>
<P
style="MARGIN: 0px; WORD-SPACING: 0px; TEXT-INDENT: 0px; LINE-HEIGHT: 100%"><FONT
face=宋体
size=2>NumberOfPlanes指出了在该模式下软件可用的内存平面数。对于标准VGA16色图形模式而言,其值为4。对标准压缩像素模式而言,其值为1。BitsPerPixel指出了定义一个像素点的颜色所需位数。比如说,标准VGA4平面16色图形模式的值为4而256色压缩像素图形模式为8。每平面每像素位数可以通过将每像素位数除以平面数得到。</FONT></P>
<P
style="MARGIN: 0px; WORD-SPACING: 0px; TEXT-INDENT: 0px; LINE-HEIGHT: 100%"><FONT
face=宋体 size=2>MemoryModel指出了内存的通用组织方式。方式定义如下:</FONT></P>
<P
style="MARGIN: 0px; WORD-SPACING: 0px; TEXT-INDENT: 0px; LINE-HEIGHT: 100%"><FONT
face=宋体 size=2>00h = 文本方式</FONT></P>
<P
style="MARGIN: 0px; WORD-SPACING: 0px; TEXT-INDENT: 0px; LINE-HEIGHT: 100%"><FONT
face=宋体 size=2>01h = CGA图形</FONT></P>
<P
style="MARGIN: 0px; WORD-SPACING: 0px; TEXT-INDENT: 0px; LINE-HEIGHT: 100%"><FONT
face=宋体 size=2>02h = HERCULES图形</FONT></P>
<P
style="MARGIN: 0px; WORD-SPACING: 0px; TEXT-INDENT: 0px; LINE-HEIGHT: 100%"><FONT
face=宋体 size=2>03h = 4平面</FONT></P>
<P
style="MARGIN: 0px; WORD-SPACING: 0px; TEXT-INDENT: 0px; LINE-HEIGHT: 100%"><FONT
face=宋体 size=2>04h = 压缩像素</FONT></P>
<P
style="MARGIN: 0px; WORD-SPACING: 0px; TEXT-INDENT: 0px; LINE-HEIGHT: 100%"><FONT
face=宋体 size=2>05h = 非链 4、256色</FONT></P>
<P
style="MARGIN: 0px; WORD-SPACING: 0px; TEXT-INDENT: 0px; LINE-HEIGHT: 100%"><FONT
face=宋体 size=2>06h = 直接色彩</FONT></P>
<P
style="MARGIN: 0px; WORD-SPACING: 0px; TEXT-INDENT: 0px; LINE-HEIGHT: 100%"><FONT
face=宋体 size=2>07h = YUV</FONT></P>
<P
style="MARGIN: 0px; WORD-SPACING: 0px; TEXT-INDENT: 0px; LINE-HEIGHT: 100%"><FONT
size=3></FONT><FONT face=宋体 size=2>08h-0Fh = 保留,有VESA定义</FONT></P>
<P
style="MARGIN: 0px; WORD-SPACING: 0px; TEXT-INDENT: 0px; LINE-HEIGHT: 100%"><FONT
face=宋体 size=2>10h-FFh = 由OEM定义</FONT></P>
<P
style="MARGIN: 0px; WORD-SPACING: 0px; TEXT-INDENT: 0px; LINE-HEIGHT: 100%"><FONT
face=宋体 size=2>在1.1版和更早的VESA超级VGA
BIOS扩展中,OEM以1:5:5:5和8:8:8以及8:8:8:8(相应压缩像素的每像素位数为16位、24位和32位)来定义直接色彩模式。在1.1版和今后的VESA超级VGA
BIOS扩展中,推荐直接色彩模式使用直接色彩内存模式和模式信息块中的遮盖大小和位址来描述像素格式。BitsPerPixel总是代表了每个像素点所占的总的内存位数。</FONT></P>
<P
style="MARGIN: 0px; WORD-SPACING: 0px; TEXT-INDENT: 0px; LINE-HEIGHT: 100%"><FONT
face=宋体
size=2>NumberOfBanks指出了成组扫描线的存储区的个数。将扫描线数除以存储区数,所得的余数为含有扫描线的存储区,而其商为每存储区内的扫描线数。比如,CGA图形模式有两个存储区,而HERCULES图形模式有四个存储区。对于没有扫描线存储区的模式(如VGA模式0Dh-13H),其值为1。</FONT></P>
<P
style="MARGIN: 0px; WORD-SPACING: 0px; TEXT-INDENT: 0px; LINE-HEIGHT: 100%"><FONT
face=宋体
size=2>BankSize指明了存储区的大小(以KB为单位)。对于CGA和HERCULES图形模式,其值为8,即每存储区长度为8192字节。对于没有扫描线存储区的模式(如VGA模式0Dh-13H),其值为0。</FONT></P>
<P
style="MARGIN: 0px; WORD-SPACING: 0px; TEXT-INDENT: 0px; LINE-HEIGHT: 100%"><FONT
face=宋体
size=2>NumberOfImagePages指出了能一次填充VGA内存的附加完整的显示图象数。若该值非空,则程序将装载大于一张图象进VGA内存,并在它们之间交替显示。</FONT></P>
<P
style="MARGIN: 0px; WORD-SPACING: 0px; TEXT-INDENT: 0px; LINE-HEIGHT: 100%"><FONT
face=宋体 size=2>Reserved保留给今后的VESA BIOS扩展,而今其值必须为一。</FONT></P>
<P
style="MARGIN: 0px; WORD-SPACING: 0px; TEXT-INDENT: 0px; LINE-HEIGHT: 100%"><FONT
face=宋体
size=2>RedMaskSize、GreenMaskSize、BlueMaskSize和RsvdMaskSize定义了直接色彩像素点中红、绿、蓝成分的位数。其值通过简单的移位算法就能产生位遮盖。如:直接色彩5:6:5模式的遮盖大小为5、6、5和0,分别对应红、绿、蓝、和保留值。注意对于YUV内存模式,红色用于V,绿色用于Y而兰色用于U。若其模式的像素没有原色成分,其值应置为0。</FONT></P>
<P
style="MARGIN: 0px; WORD-SPACING: 0px; TEXT-INDENT: 0px; LINE-HEIGHT: 100%"><FONT
face=宋体
size=2>RedFieldPosition、GreenFieldPosition、BlueFieldPosition和RsvdFieldPosition定义了在直接色彩模式和YUV模式中各自色彩成分中最重要位的位址。色彩值能通过根据位址左移其值而与像素相连。比如:直接色彩5:6:5模式中,红、绿、蓝和保留的位置分别为11、5、0和0。注意对于YUV内存模式,红色用于V,绿色用于Y而兰色用于U。若其模式的像素没有原色成分,其值应置为0。</FONT></P>
<P
style="MARGIN: 0px; WORD-SPACING: 0px; TEXT-INDENT: 0px; LINE-HEIGHT: 100%"><FONT
face=宋体
size=2>DirectColorModeInfo描述了直接色彩模式的重要特性。D0位表明DAC色彩梯度是固定的或是可编程的。如果色彩梯度是固定的,则其不能被改变。如果是可编程的,则意味着能通过标准VGA
DAC色彩寄存器BIOS调用(AX=1012h)来装载红、绿、蓝查找表。D1位指出直接色彩像素保留区能被程序使用,还是保留,即不能使用。</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>0 = 色彩梯度固定</FONT></P>
<P
style="MARGIN: 0px; WORD-SPACING: 0px; TEXT-INDENT: 0px; LINE-HEIGHT: 100%"><FONT
face=宋体 size=2>1 = 色彩梯度可编程</FONT></P>
<P
style="MARGIN: 0px; WORD-SPACING: 0px; TEXT-INDENT: 0px; LINE-HEIGHT: 100%"><FONT
face=宋体 size=2>D1 = 保留位可用/保留</FONT></P>
<P
style="MARGIN: 0px; WORD-SPACING: 0px; TEXT-INDENT: 0px; LINE-HEIGHT: 100%"><FONT
face=宋体 size=2>0 = 保留位保留</FONT></P>
<P
style="MARGIN: 0px; WORD-SPACING: 0px; TEXT-INDENT: 0px; LINE-HEIGHT: 100%"><FONT
face=宋体 size=2>1 = 保留位能被程序使用</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>版本1.1及其以后的VESA
BIOS扩展将信息块中不用的地方清零,但仍保持256字节大小。这使其对于未来的标准具有向上兼容性,因为新增加的区域将零作为默认值或是不可实现的附加选项。打算向后兼容VESA
BIOS扩展1.0版的程序应该在调用返回超级VGA模式信息之前先预初始化一个256字节的缓冲区。</FONT></P>
<P
style="MARGIN: 0px; WORD-SPACING: 0px; TEXT-INDENT: 0px; LINE-HEIGHT: 100%"><FONT
face=宋体 size=2>6-4、02h-设置超级VGA模式</FONT></P>
<P
style="MARGIN: 0px; WORD-SPACING: 0px; TEXT-INDENT: 0px; LINE-HEIGHT: 100%"><FONT
face=宋体
size=2>该函数初始化一种显示模式。BX寄存器包含了要存放的模式。VESA模式号的格式已在第二章作了描述。如果模式无法设置,BIOS应该保持视频环境不变并返回错误号。</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 = 02h 设置超级VGA显示模式</FONT></P>
<P
style="MARGIN: 0px; WORD-SPACING: 0px; TEXT-INDENT: 0px; LINE-HEIGHT: 100%"><FONT
face=宋体 size=2>BX = 显示模式</FONT></P>
<P
style="MARGIN: 0px; WORD-SPACING: 0px; TEXT-INDENT: 0px; LINE-HEIGHT: 100%"><FONT
face=宋体 size=2>D0-D14 = 显示模式</FONT></P>
<P
style="MARGIN: 0px; WORD-SPACING: 0px; TEXT-INDENT: 0px; LINE-HEIGHT: 100%"><FONT
face=宋体 size=2>D15 = 清除内存标志</FONT></P>
<P
style="MARGIN: 0px; WORD-SPACING: 0px; TEXT-INDENT: 0px; LINE-HEIGHT: 100%"><FONT
face=宋体 size=2>0 清除显存</FONT></P>
<P
style="MARGIN: 0px; WORD-SPACING: 0px; TEXT-INDENT: 0px; LINE-HEIGHT: 100%"><FONT
face=宋体 size=2>1 不清除显存</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>6-5、03h-返回当前显示模式</FONT></P>
<P
style="MARGIN: 0px; WORD-SPACING: 0px; TEXT-INDENT: 0px; LINE-HEIGHT: 100%"><FONT
face=宋体 size=2>此函数将当前显示模式返回到BX寄存器。VESA显示模式号在第二章有详细描述。</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 = 03h 返回当前显示模式</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 = 当前显示模式</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
BIOS中,函数0Fh(读当前显示状态)返回当前显示模式到AL寄存器。在AL的D7位,也返回内存清除位状态。如果内存未被清除,则该位被设置。在超级VGA函数中,因为函数的目的只是返回显示方式,内存清除位不会被返回到BX寄存器。如果程序要获得内存清除位,就应该调用VGA
BIOS函数0Fh。</FONT></P>
<P
style="MARGIN: 0px; WORD-SPACING: 0px; TEXT-INDENT: 0px; LINE-HEIGHT: 100%"><FONT
lang=ZH-CN face=宋体 size=2><End></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>相关章节: <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><FONT lang=ZH-CN
face="Times New Roman">(3)</FONT>:<FONT lang=ZH-CN>扩展的VGA BIOS</FONT></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>
<A
href="http://shaker.myrice.com/document/vesa-program-introduce/vesa-introduce-4.htm">(4):
扩展的VGA BIOS(续)及应用举例</A></FONT> </P>
<P
style="MARGIN: 0px; WORD-SPACING: 0px; TEXT-INDENT: 0px; LINE-HEIGHT: 100%">===========================================================================================</P></BODY></HTML>
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -