14d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima#ifndef vbe_h_included 24d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima#define vbe_h_included 34d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima 44d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima#include "vgabios.h" 54d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima 64d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima// DISPI helper function 74d07f569799aaae0d7fccf8e76386d450664987fJun Nakajimavoid dispi_set_enable(enable); 84d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima 94d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima/** VBE int10 API 104d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima * 114d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima * See the function descriptions in vbe.c for more information 124d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima */ 134d07f569799aaae0d7fccf8e76386d450664987fJun NakajimaBoolean vbe_has_vbe_display(); 144d07f569799aaae0d7fccf8e76386d450664987fJun Nakajimavoid vbe_biosfn_return_controller_information(AX, ES, DI); 154d07f569799aaae0d7fccf8e76386d450664987fJun Nakajimavoid vbe_biosfn_return_mode_information(AX, CX, ES, DI); 164d07f569799aaae0d7fccf8e76386d450664987fJun Nakajimavoid vbe_biosfn_set_mode(AX, BX, ES, DI); 174d07f569799aaae0d7fccf8e76386d450664987fJun Nakajimavoid vbe_biosfn_save_restore_state(AX, CX, DX, ES, BX); 184d07f569799aaae0d7fccf8e76386d450664987fJun Nakajimavoid vbe_biosfn_set_get_palette_data(AX); 194d07f569799aaae0d7fccf8e76386d450664987fJun Nakajimavoid vbe_biosfn_return_protected_mode_interface(AX); 204d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima 214d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima// The official VBE Information Block 224d07f569799aaae0d7fccf8e76386d450664987fJun Nakajimatypedef struct VbeInfoBlock 234d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima{ 244d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima Bit8u VbeSignature[4]; 254d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima Bit16u VbeVersion; 264d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima Bit16u OemStringPtr_Off; 274d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima Bit16u OemStringPtr_Seg; 284d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima Bit8u Capabilities[4]; 294d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima Bit16u VideoModePtr_Off; 304d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima Bit16u VideoModePtr_Seg; 314d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima Bit16u TotalMemory; 324d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima Bit16u OemSoftwareRev; 334d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima Bit16u OemVendorNamePtr_Off; 344d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima Bit16u OemVendorNamePtr_Seg; 354d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima Bit16u OemProductNamePtr_Off; 364d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima Bit16u OemProductNamePtr_Seg; 374d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima Bit16u OemProductRevPtr_Off; 384d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima Bit16u OemProductRevPtr_Seg; 394d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima Bit16u Reserved[111]; // used for dynamicly generated mode list 404d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima Bit8u OemData[256]; 414d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima} VbeInfoBlock; 424d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima 434d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima 444d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima// This one is for compactly storing a static list of mode info blocks 454d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima// this saves us 189 bytes per block 464d07f569799aaae0d7fccf8e76386d450664987fJun Nakajimatypedef struct ModeInfoBlockCompact 474d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima{ 484d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima// Mandatory information for all VBE revisions 494d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima Bit16u ModeAttributes; 504d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima Bit8u WinAAttributes; 514d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima Bit8u WinBAttributes; 524d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima Bit16u WinGranularity; 534d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima Bit16u WinSize; 544d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima Bit16u WinASegment; 554d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima Bit16u WinBSegment; 564d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima Bit32u WinFuncPtr; 574d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima Bit16u BytesPerScanLine; 584d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima// Mandatory information for VBE 1.2 and above 594d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima Bit16u XResolution; 604d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima Bit16u YResolution; 614d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima Bit8u XCharSize; 624d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima Bit8u YCharSize; 634d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima Bit8u NumberOfPlanes; 644d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima Bit8u BitsPerPixel; 654d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima Bit8u NumberOfBanks; 664d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima Bit8u MemoryModel; 674d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima Bit8u BankSize; 684d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima Bit8u NumberOfImagePages; 694d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima Bit8u Reserved_page; 704d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima// Direct Color fields (required for direct/6 and YUV/7 memory models) 714d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima Bit8u RedMaskSize; 724d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima Bit8u RedFieldPosition; 734d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima Bit8u GreenMaskSize; 744d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima Bit8u GreenFieldPosition; 754d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima Bit8u BlueMaskSize; 764d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima Bit8u BlueFieldPosition; 774d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima Bit8u RsvdMaskSize; 784d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima Bit8u RsvdFieldPosition; 794d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima Bit8u DirectColorModeInfo; 804d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima// Mandatory information for VBE 2.0 and above 814d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima Bit32u PhysBasePtr; 824d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima Bit32u OffScreenMemOffset; 834d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima Bit16u OffScreenMemSize; 844d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima// Mandatory information for VBE 3.0 and above 854d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima Bit16u LinBytesPerScanLine; 864d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima Bit8u BnkNumberOfPages; 874d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima Bit8u LinNumberOfPages; 884d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima Bit8u LinRedMaskSize; 894d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima Bit8u LinRedFieldPosition; 904d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima Bit8u LinGreenMaskSize; 914d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima Bit8u LinGreenFieldPosition; 924d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima Bit8u LinBlueMaskSize; 934d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima Bit8u LinBlueFieldPosition; 944d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima Bit8u LinRsvdMaskSize; 954d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima Bit8u LinRsvdFieldPosition; 964d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima Bit32u MaxPixelClock; 974d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima// Bit8u Reserved[189]; // DO NOT PUT THIS IN HERE because of Compact Mode Info storage in bios 984d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima} ModeInfoBlockCompact; 994d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima 1004d07f569799aaae0d7fccf8e76386d450664987fJun Nakajimatypedef struct ModeInfoBlock 1014d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima{ 1024d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima// Mandatory information for all VBE revisions 1034d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima Bit16u ModeAttributes; 1044d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima Bit8u WinAAttributes; 1054d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima Bit8u WinBAttributes; 1064d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima Bit16u WinGranularity; 1074d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima Bit16u WinSize; 1084d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima Bit16u WinASegment; 1094d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima Bit16u WinBSegment; 1104d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima Bit32u WinFuncPtr; 1114d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima Bit16u BytesPerScanLine; 1124d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima// Mandatory information for VBE 1.2 and above 1134d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima Bit16u XResolution; 1144d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima Bit16u YResolution; 1154d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima Bit8u XCharSize; 1164d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima Bit8u YCharSize; 1174d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima Bit8u NumberOfPlanes; 1184d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima Bit8u BitsPerPixel; 1194d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima Bit8u NumberOfBanks; 1204d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima Bit8u MemoryModel; 1214d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima Bit8u BankSize; 1224d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima Bit8u NumberOfImagePages; 1234d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima Bit8u Reserved_page; 1244d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima// Direct Color fields (required for direct/6 and YUV/7 memory models) 1254d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima Bit8u RedMaskSize; 1264d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima Bit8u RedFieldPosition; 1274d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima Bit8u GreenMaskSize; 1284d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima Bit8u GreenFieldPosition; 1294d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima Bit8u BlueMaskSize; 1304d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima Bit8u BlueFieldPosition; 1314d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima Bit8u RsvdMaskSize; 1324d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima Bit8u RsvdFieldPosition; 1334d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima Bit8u DirectColorModeInfo; 1344d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima// Mandatory information for VBE 2.0 and above 1354d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima Bit32u PhysBasePtr; 1364d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima Bit32u OffScreenMemOffset; 1374d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima Bit16u OffScreenMemSize; 1384d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima// Mandatory information for VBE 3.0 and above 1394d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima Bit16u LinBytesPerScanLine; 1404d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima Bit8u BnkNumberOfPages; 1414d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima Bit8u LinNumberOfPages; 1424d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima Bit8u LinRedMaskSize; 1434d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima Bit8u LinRedFieldPosition; 1444d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima Bit8u LinGreenMaskSize; 1454d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima Bit8u LinGreenFieldPosition; 1464d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima Bit8u LinBlueMaskSize; 1474d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima Bit8u LinBlueFieldPosition; 1484d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima Bit8u LinRsvdMaskSize; 1494d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima Bit8u LinRsvdFieldPosition; 1504d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima Bit32u MaxPixelClock; 1514d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima Bit8u Reserved[189]; 1524d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima} ModeInfoBlock; 1534d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima 1544d07f569799aaae0d7fccf8e76386d450664987fJun Nakajimatypedef struct ModeInfoListItem 1554d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima{ 1564d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima Bit16u mode; 1574d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima ModeInfoBlockCompact info; 1584d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima} ModeInfoListItem; 1594d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima 1604d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima// VBE Return Status Info 1614d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima// AL 1624d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima#define VBE_RETURN_STATUS_SUPPORTED 0x4F 1634d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima#define VBE_RETURN_STATUS_UNSUPPORTED 0x00 1644d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima// AH 1654d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima#define VBE_RETURN_STATUS_SUCCESSFULL 0x00 1664d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima#define VBE_RETURN_STATUS_FAILED 0x01 1674d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima#define VBE_RETURN_STATUS_NOT_SUPPORTED 0x02 1684d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima#define VBE_RETURN_STATUS_INVALID 0x03 1694d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima 1704d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima// VBE Mode Numbers 1714d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima 1724d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima#define VBE_MODE_VESA_DEFINED 0x0100 1734d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima#define VBE_MODE_REFRESH_RATE_USE_CRTC 0x0800 1744d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima#define VBE_MODE_LINEAR_FRAME_BUFFER 0x4000 1754d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima#define VBE_MODE_PRESERVE_DISPLAY_MEMORY 0x8000 1764d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima 1774d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima// VBE GFX Mode Number 1784d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima 1794d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima#define VBE_VESA_MODE_640X400X8 0x100 1804d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima#define VBE_VESA_MODE_640X480X8 0x101 1814d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima#define VBE_VESA_MODE_800X600X4 0x102 1824d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima#define VBE_VESA_MODE_800X600X8 0x103 1834d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima#define VBE_VESA_MODE_1024X768X4 0x104 1844d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima#define VBE_VESA_MODE_1024X768X8 0x105 1854d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima#define VBE_VESA_MODE_1280X1024X4 0x106 1864d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima#define VBE_VESA_MODE_1280X1024X8 0x107 1874d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima#define VBE_VESA_MODE_320X200X1555 0x10D 1884d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima#define VBE_VESA_MODE_320X200X565 0x10E 1894d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima#define VBE_VESA_MODE_320X200X888 0x10F 1904d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima#define VBE_VESA_MODE_640X480X1555 0x110 1914d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima#define VBE_VESA_MODE_640X480X565 0x111 1924d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima#define VBE_VESA_MODE_640X480X888 0x112 1934d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima#define VBE_VESA_MODE_800X600X1555 0x113 1944d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima#define VBE_VESA_MODE_800X600X565 0x114 1954d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima#define VBE_VESA_MODE_800X600X888 0x115 1964d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima#define VBE_VESA_MODE_1024X768X1555 0x116 1974d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima#define VBE_VESA_MODE_1024X768X565 0x117 1984d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima#define VBE_VESA_MODE_1024X768X888 0x118 1994d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima#define VBE_VESA_MODE_1280X1024X1555 0x119 2004d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima#define VBE_VESA_MODE_1280X1024X565 0x11A 2014d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima#define VBE_VESA_MODE_1280X1024X888 0x11B 2024d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima#define VBE_VESA_MODE_1600X1200X8 0x11C 2034d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima#define VBE_VESA_MODE_1600X1200X1555 0x11D 2044d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima#define VBE_VESA_MODE_1600X1200X565 0x11E 2054d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima#define VBE_VESA_MODE_1600X1200X888 0x11F 2064d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima 2074d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima// BOCHS/PLEX86 'own' mode numbers 2084d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima#define VBE_OWN_MODE_320X200X8888 0x140 2094d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima#define VBE_OWN_MODE_640X400X8888 0x141 2104d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima#define VBE_OWN_MODE_640X480X8888 0x142 2114d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima#define VBE_OWN_MODE_800X600X8888 0x143 2124d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima#define VBE_OWN_MODE_1024X768X8888 0x144 2134d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima#define VBE_OWN_MODE_1280X1024X8888 0x145 2144d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima#define VBE_OWN_MODE_320X200X8 0x146 2154d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima#define VBE_OWN_MODE_1600X1200X8888 0x147 2164d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima#define VBE_OWN_MODE_1152X864X8 0x148 2174d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima#define VBE_OWN_MODE_1152X864X1555 0x149 2184d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima#define VBE_OWN_MODE_1152X864X565 0x14a 2194d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima#define VBE_OWN_MODE_1152X864X888 0x14b 2204d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima#define VBE_OWN_MODE_1152X864X8888 0x14c 2214d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima 2224d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima#define VBE_VESA_MODE_END_OF_LIST 0xFFFF 2234d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima 2244d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima// Capabilities 2254d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima 2264d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima#define VBE_CAPABILITY_8BIT_DAC 0x0001 2274d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima#define VBE_CAPABILITY_NOT_VGA_COMPATIBLE 0x0002 2284d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima#define VBE_CAPABILITY_RAMDAC_USE_BLANK_BIT 0x0004 2294d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima#define VBE_CAPABILITY_STEREOSCOPIC_SUPPORT 0x0008 2304d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima#define VBE_CAPABILITY_STEREO_VIA_VESA_EVC 0x0010 2314d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima 2324d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima// Mode Attributes 2334d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima 2344d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima#define VBE_MODE_ATTRIBUTE_SUPPORTED 0x0001 2354d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima#define VBE_MODE_ATTRIBUTE_EXTENDED_INFORMATION_AVAILABLE 0x0002 2364d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima#define VBE_MODE_ATTRIBUTE_TTY_BIOS_SUPPORT 0x0004 2374d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima#define VBE_MODE_ATTRIBUTE_COLOR_MODE 0x0008 2384d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima#define VBE_MODE_ATTRIBUTE_GRAPHICS_MODE 0x0010 2394d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima#define VBE_MODE_ATTRIBUTE_NOT_VGA_COMPATIBLE 0x0020 2404d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima#define VBE_MODE_ATTRIBUTE_NO_VGA_COMPATIBLE_WINDOW 0x0040 2414d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima#define VBE_MODE_ATTRIBUTE_LINEAR_FRAME_BUFFER_MODE 0x0080 2424d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima#define VBE_MODE_ATTRIBUTE_DOUBLE_SCAN_MODE 0x0100 2434d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima#define VBE_MODE_ATTRIBUTE_INTERLACE_MODE 0x0200 2444d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima#define VBE_MODE_ATTRIBUTE_HARDWARE_TRIPLE_BUFFER 0x0400 2454d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima#define VBE_MODE_ATTRIBUTE_HARDWARE_STEREOSCOPIC_DISPLAY 0x0800 2464d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima#define VBE_MODE_ATTRIBUTE_DUAL_DISPLAY_START_ADDRESS 0x1000 2474d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima 2484d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima#define VBE_MODE_ATTTRIBUTE_LFB_ONLY ( VBE_MODE_ATTRIBUTE_NO_VGA_COMPATIBLE_WINDOW | VBE_MODE_ATTRIBUTE_LINEAR_FRAME_BUFFER_MODE ) 2494d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima 2504d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima// Window attributes 2514d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima 2524d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima#define VBE_WINDOW_ATTRIBUTE_RELOCATABLE 0x01 2534d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima#define VBE_WINDOW_ATTRIBUTE_READABLE 0x02 2544d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima#define VBE_WINDOW_ATTRIBUTE_WRITEABLE 0x04 2554d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima 2564d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima// Memory model 2574d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima 2584d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima#define VBE_MEMORYMODEL_TEXT_MODE 0x00 2594d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima#define VBE_MEMORYMODEL_CGA_GRAPHICS 0x01 2604d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima#define VBE_MEMORYMODEL_HERCULES_GRAPHICS 0x02 2614d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima#define VBE_MEMORYMODEL_PLANAR 0x03 2624d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima#define VBE_MEMORYMODEL_PACKED_PIXEL 0x04 2634d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima#define VBE_MEMORYMODEL_NON_CHAIN_4_256 0x05 2644d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima#define VBE_MEMORYMODEL_DIRECT_COLOR 0x06 2654d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima#define VBE_MEMORYMODEL_YUV 0x07 2664d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima 2674d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima// DirectColorModeInfo 2684d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima 2694d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima#define VBE_DIRECTCOLOR_COLOR_RAMP_PROGRAMMABLE 0x01 2704d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima#define VBE_DIRECTCOLOR_RESERVED_BITS_AVAILABLE 0x02 2714d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima 2724d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima// GUEST <-> HOST Communication API 2734d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima 2744d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima// FIXME: either dynamicly ask host for this or put somewhere high in physical memory 2754d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima// like 0xE0000000 2764d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima 2774d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima 2784d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima #define VBE_DISPI_BANK_ADDRESS 0xA0000 2794d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima #define VBE_DISPI_BANK_SIZE_KB 64 2804d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima 2814d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima #define VBE_DISPI_MAX_XRES 2560 2824d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima #define VBE_DISPI_MAX_YRES 1600 2834d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima 2844d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima #define VBE_DISPI_IOPORT_INDEX 0x01CE 2854d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima #define VBE_DISPI_IOPORT_DATA 0x01CF 2864d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima 2874d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima #define VBE_DISPI_INDEX_ID 0x0 2884d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima #define VBE_DISPI_INDEX_XRES 0x1 2894d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima #define VBE_DISPI_INDEX_YRES 0x2 2904d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima #define VBE_DISPI_INDEX_BPP 0x3 2914d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima #define VBE_DISPI_INDEX_ENABLE 0x4 2924d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima #define VBE_DISPI_INDEX_BANK 0x5 2934d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima #define VBE_DISPI_INDEX_VIRT_WIDTH 0x6 2944d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima #define VBE_DISPI_INDEX_VIRT_HEIGHT 0x7 2954d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima #define VBE_DISPI_INDEX_X_OFFSET 0x8 2964d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima #define VBE_DISPI_INDEX_Y_OFFSET 0x9 2974d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima #define VBE_DISPI_INDEX_VIDEO_MEMORY_64K 0xa 2984d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima 2994d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima #define VBE_DISPI_ID0 0xB0C0 3004d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima #define VBE_DISPI_ID1 0xB0C1 3014d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima #define VBE_DISPI_ID2 0xB0C2 3024d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima #define VBE_DISPI_ID3 0xB0C3 3034d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima #define VBE_DISPI_ID4 0xB0C4 3044d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima #define VBE_DISPI_ID5 0xB0C5 3054d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima 3064d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima #define VBE_DISPI_DISABLED 0x00 3074d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima #define VBE_DISPI_ENABLED 0x01 3084d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima #define VBE_DISPI_GETCAPS 0x02 3094d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima #define VBE_DISPI_8BIT_DAC 0x20 3104d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima #define VBE_DISPI_LFB_ENABLED 0x40 3114d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima #define VBE_DISPI_NOCLEARMEM 0x80 3124d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima 3134d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima #define VBE_DISPI_LFB_PHYSICAL_ADDRESS 0xE0000000 3144d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima 3154d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima#endif 316