返回指定模式信息
入口:
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 |
开发电脑的显示器分辨率
没支持1920x1080尺寸的!!!!我的联想笔记本也是1920x1080分辨率的。
应该是VirtualBox的VESA版本的问题。









网友评论