VBE功能01h:返回VBE特定模式信息

返回指定模式信息

入口:
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;

模式号和分辨率的对应关系

VirtualBox所有模式号
模式号 分辨率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版本的问题。

你可能感兴趣的:(VBE功能01h:返回VBE特定模式信息)