#ifndef vbe_h_included #define vbe_h_included #include "vgabios.h" // DISPI helper function void dispi_set_enable(enable); /** VBE int10 API * * See the function descriptions in vbe.c for more information */ Boolean vbe_has_vbe_display(); void vbe_biosfn_return_controller_information(AX, ES, DI); void vbe_biosfn_return_mode_information(AX, CX, ES, DI); void vbe_biosfn_set_mode(AX, BX, ES, DI); void vbe_biosfn_save_restore_state(AX, CX, DX, ES, BX); void vbe_biosfn_set_get_palette_data(AX); void vbe_biosfn_return_protected_mode_interface(AX); // The official VBE Information Block typedef struct VbeInfoBlock { Bit8u VbeSignature[4]; Bit16u VbeVersion; Bit16u OemStringPtr_Off; Bit16u OemStringPtr_Seg; Bit8u Capabilities[4]; Bit16u VideoModePtr_Off; Bit16u VideoModePtr_Seg; Bit16u TotalMemory; Bit16u OemSoftwareRev; Bit16u OemVendorNamePtr_Off; Bit16u OemVendorNamePtr_Seg; Bit16u OemProductNamePtr_Off; Bit16u OemProductNamePtr_Seg; Bit16u OemProductRevPtr_Off; Bit16u OemProductRevPtr_Seg; Bit16u Reserved[111]; // used for dynamicly generated mode list Bit8u OemData[256]; } VbeInfoBlock; // This one is for compactly storing a static list of mode info blocks // this saves us 189 bytes per block typedef struct ModeInfoBlockCompact { // Mandatory information for all VBE revisions Bit16u ModeAttributes; Bit8u WinAAttributes; Bit8u WinBAttributes; Bit16u WinGranularity; Bit16u WinSize; Bit16u WinASegment; Bit16u WinBSegment; Bit32u WinFuncPtr; Bit16u BytesPerScanLine; // Mandatory information for VBE 1.2 and above Bit16u XResolution; Bit16u YResolution; Bit8u XCharSize; Bit8u YCharSize; Bit8u NumberOfPlanes; Bit8u BitsPerPixel; Bit8u NumberOfBanks; Bit8u MemoryModel; Bit8u BankSize; Bit8u NumberOfImagePages; Bit8u Reserved_page; // Direct Color fields (required for direct/6 and YUV/7 memory models) Bit8u RedMaskSize; Bit8u RedFieldPosition; Bit8u GreenMaskSize; Bit8u GreenFieldPosition; Bit8u BlueMaskSize; Bit8u BlueFieldPosition; Bit8u RsvdMaskSize; Bit8u RsvdFieldPosition; Bit8u DirectColorModeInfo; // Mandatory information for VBE 2.0 and above Bit32u PhysBasePtr; Bit32u OffScreenMemOffset; Bit16u OffScreenMemSize; // Mandatory information for VBE 3.0 and above Bit16u LinBytesPerScanLine; Bit8u BnkNumberOfPages; Bit8u LinNumberOfPages; Bit8u LinRedMaskSize; Bit8u LinRedFieldPosition; Bit8u LinGreenMaskSize; Bit8u LinGreenFieldPosition; Bit8u LinBlueMaskSize; Bit8u LinBlueFieldPosition; Bit8u LinRsvdMaskSize; Bit8u LinRsvdFieldPosition; Bit32u MaxPixelClock; // Bit8u Reserved[189]; // DO NOT PUT THIS IN HERE because of Compact Mode Info storage in bios } ModeInfoBlockCompact; typedef struct ModeInfoBlock { // Mandatory information for all VBE revisions Bit16u ModeAttributes; Bit8u WinAAttributes; Bit8u WinBAttributes; Bit16u WinGranularity; Bit16u WinSize; Bit16u WinASegment; Bit16u WinBSegment; Bit32u WinFuncPtr; Bit16u BytesPerScanLine; // Mandatory information for VBE 1.2 and above Bit16u XResolution; Bit16u YResolution; Bit8u XCharSize; Bit8u YCharSize; Bit8u NumberOfPlanes; Bit8u BitsPerPixel; Bit8u NumberOfBanks; Bit8u MemoryModel; Bit8u BankSize; Bit8u NumberOfImagePages; Bit8u Reserved_page; // Direct Color fields (required for direct/6 and YUV/7 memory models) Bit8u RedMaskSize; Bit8u RedFieldPosition; Bit8u GreenMaskSize; Bit8u GreenFieldPosition; Bit8u BlueMaskSize; Bit8u BlueFieldPosition; Bit8u RsvdMaskSize; Bit8u RsvdFieldPosition; Bit8u DirectColorModeInfo; // Mandatory information for VBE 2.0 and above Bit32u PhysBasePtr; Bit32u OffScreenMemOffset; Bit16u OffScreenMemSize; // Mandatory information for VBE 3.0 and above Bit16u LinBytesPerScanLine; Bit8u BnkNumberOfPages; Bit8u LinNumberOfPages; Bit8u LinRedMaskSize; Bit8u LinRedFieldPosition; Bit8u LinGreenMaskSize; Bit8u LinGreenFieldPosition; Bit8u LinBlueMaskSize; Bit8u LinBlueFieldPosition; Bit8u LinRsvdMaskSize; Bit8u LinRsvdFieldPosition; Bit32u MaxPixelClock; Bit8u Reserved[189]; } ModeInfoBlock; typedef struct ModeInfoListItem { Bit16u mode; ModeI