返回指定模式信息
入口:
AX = 4F01H
CX = 模式号
ES:DI = 指向特定模式信息块的指针
出口:
AX=VBE返回值
VBE特定模式信息块数据结构定义
// 模式信息
// typedef void (far * VBE_WINPROC)(void);
typedef struct mode_info{
/* Mandatory information for all VBE revisions */
uint16 ModeAttributes; /* 模式属性 */
uint8 WinAAttributes; /* 窗口 A 属性 */
uint8 WinBAttributes; /* 窗口 B 属性 */
uint16 WinGranularity; /* 窗口页粒度, KB为单位*/
uint16 WinSize; /* 窗口大小, KB为单位*/
uint16 WinASegment; /* 窗口 A 起始段地址 */
uint16 WinBSegment; /* 窗口 B 起始段地址 */
//VBE_WINPROC WinFuncPtr; /* 换页调用指针 */
char /*far*/ *BankFunc;
uint16 BytesPerScanLine; /* 每条扫描线所占的字节数 */
/*Mandatory information for VBE 1.2 and above */
uint16 XResolution; /* 水平分辨率 */
uint16 YResolution; /* 垂直分辨率 */
uint8 XCharSize; /* 字符宽度 */
uint8 YCharSize; /* 字符高度 */
uint8 NumberOfPlanes; /* 存储器位面个数 */
uint8 BitsPerPixel; /* 每个像素所占位数 */
uint8 NumberOfBanks; /* 显示段个数 */
uint8 MemoryModel; /* 存储器模式类型 */
uint8 BankSize; /* 显示段的大小,以KB为单位 */
uint8 NumberOfImagePages; /* 可同时载入的最大满屏图像数 */
uint8 reserve1; /* 为页面功能保留 */
/*Direct Color fields(required for direct/6 and YUV/7 memory models)*/
uint8 RedMaskSize; /* 红色所占的位数 */
uint8 RedFieldPosition; /* 红色的最低有效位位置 */
uint8 GreenMaskSize; /* 绿色所占的位数 */
uint8 GreenFieldPosition; /* 绿色的最低有效位位置 */
uint8 BlueMaskSize; /* 蓝色所占的位数 */
uint8 BlueFieldPosition; /* 蓝色的最低有效位位置 */
uint8 RsvdMaskSize; /* 保留色所占的位数 */
uint8 RsvdFieldPosition; /* 保留色的最低有效位位置 */
uint8 DirectColorModeInfo; /* 直接颜色模式的属性 */
/*Mandatory information for VBE 2.0 and above*/
uint32 PhysBasePtr; /* 可使用大的帧缓存时32位的物理地址指针 */
uint32 OffScreenMemOffset; /* 帧缓存首址的32位偏移量 */
uint16 OffScreenMemSize; /* 可用的,连续的显示缓冲区长度,KB为单位 */
/*Mandatory information for VBE 3.0 and above*/
uint16 LinBytesPerScanLine; /* 线性缓冲区扫描线的长度,以字节为单位 */
uint8 BnkNumberOfImagePages; /* 使用窗口功能时显示页面数 */
uint8 LinNumberOfImagePages; /* 使用大的线性缓冲区时显示页面数 */
uint8 LinRedMaskSize; /* 使用大的线性缓冲区时红色所占的位数 */
uint8 LinRedFieldPosition; /* 使用大的线性缓冲区时红色的最低有效位位置 */
uint8 LinGreenMaskSize; /* 使用大的线性缓冲区时绿色所占的位数 */
uint8 LinGreenFieldPosition; /* 使用大的线性缓冲区时绿色的最低有效位位置 */
uint8 LinBlueMaskSize; /* 使用大的线性缓冲区时蓝色所占的位数 */
uint8 LinBlueFieldPosition; /* 使用大的线性缓冲区时蓝色的最低有效位位置 */
uint8 LinRsvdMaskSize; /* 使用大的线性缓冲区时保留色所占的位数 */
uint8 LinRsvdFieldPosition; /* 使用大的线性缓冲区时保留色的最低有效位位置 */
uint32 MaxPixelClock; /* maximum pixel clock (in Hz) for graphics mode */
uint8 reserve2[190]; /* 保留 */
} __attribute__((packed)) MODEINFO;
模式号和分辨率的对应关系
模式号 | 分辨率X*Y |
---|---|
100h | 640x400 |
101h | 640x480 |
102h | 800x600 |
103h | 800x600 |
104h | 1024x768 |
105h | 1024x766 |
106h | 1280x1024 |
107h | 1280x1024 |
10Dh | 320x200 |
10Eh | 320x200 |
10Fh | 320x200 |
110h | 640x480 |
111h | 640x480 |
112h | 640x480 |
113h | 800x600 |
114h | 800x600 |
115h | 800x600 |
116h | 1024x768 |
117h | 1024x768 |
118h | 1024x768 |
119h | 1280x1024 |
11Ah | 1280x1024 |
11Bh | 1280x1024 |
140h | 320x200 |
141h | 640x400 |
142h | 640x480 |
143h | 800x600 |
144h | 1024x768 |
145h | 1280x1024 |
146h | 320x200 |
147h | 1600x1200 |
148h | 1152x864 |
149h | 1152x864 |
14Ah | 1152x864 |
14Bh | 1152x864 |
14Ch | 1152x864 |
![](https://img.haomeiwen.com/i13753119/2478ec79f5ce31ba.png)
没支持1920x1080尺寸的!!!!
我的联想笔记本也是1920x1080分辨率的。
应该是VirtualBox的VESA版本的问题。
网友评论