14d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima/* Generate the VGABIOS VBE Tables */ 24d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima#include <stdlib.h> 34d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima#include <stdio.h> 44d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima 54d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima#define VBE_DISPI_TOTAL_VIDEO_MEMORY_MB 16 64d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima 74d07f569799aaae0d7fccf8e76386d450664987fJun Nakajimatypedef struct { 84d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima int width; 94d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima int height; 104d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima int depth; 114d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima int mode; 124d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima} ModeInfo; 134d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima 144d07f569799aaae0d7fccf8e76386d450664987fJun NakajimaModeInfo modes[] = { 154d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima /* standard VESA modes */ 164d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima{ 640, 400, 8 , 0x100}, 174d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima{ 640, 480, 8 , 0x101}, 184d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima{ 800, 600, 4 , 0x102}, 194d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima{ 800, 600, 8 , 0x103}, 204d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima{ 1024, 768, 4 , 0x104}, 214d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima{ 1024, 768, 8 , 0x105}, 224d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima{ 1280, 1024, 4 , 0x106}, 234d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima{ 1280, 1024, 8 , 0x107}, 244d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima{ 320, 200, 15 , 0x10D}, 254d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima{ 320, 200, 16 , 0x10E}, 264d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima{ 320, 200, 24 , 0x10F}, 274d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima{ 640, 480, 15 , 0x110}, 284d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima{ 640, 480, 16 , 0x111}, 294d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima{ 640, 480, 24 , 0x112}, 304d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima{ 800, 600, 15 , 0x113}, 314d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima{ 800, 600, 16 , 0x114}, 324d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima{ 800, 600, 24 , 0x115}, 334d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima{ 1024, 768, 15 , 0x116}, 344d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima{ 1024, 768, 16 , 0x117}, 354d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima{ 1024, 768, 24 , 0x118}, 364d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima{ 1280, 1024, 15 , 0x119}, 374d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima{ 1280, 1024, 16 , 0x11A}, 384d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima{ 1280, 1024, 24 , 0x11B}, 394d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima{ 1600, 1200, 8 , 0x11C}, 404d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima{ 1600, 1200, 15 , 0x11D}, 414d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima{ 1600, 1200, 16 , 0x11E}, 424d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima{ 1600, 1200, 24 , 0x11F}, 434d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima 444d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima /* BOCHS/PLEX86 'own' mode numbers */ 454d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima{ 320, 200, 32 , 0x140}, 464d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima{ 640, 400, 32 , 0x141}, 474d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima{ 640, 480, 32 , 0x142}, 484d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima{ 800, 600, 32 , 0x143}, 494d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima{ 1024, 768, 32 , 0x144}, 504d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima{ 1280, 1024, 32 , 0x145}, 514d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima{ 320, 200, 8 , 0x146}, 524d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima{ 1600, 1200, 32 , 0x147}, 534d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima{ 1152, 864, 8 , 0x148}, 544d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima{ 1152, 864, 15 , 0x149}, 554d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima{ 1152, 864, 16 , 0x14a}, 564d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima{ 1152, 864, 24 , 0x14b}, 574d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima{ 1152, 864, 32 , 0x14c}, 584d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima{ 1280, 768, 16 , 0x175}, 594d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima{ 1280, 768, 24 , 0x176}, 604d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima{ 1280, 768, 32 , 0x177}, 614d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima{ 1280, 800, 16 , 0x178}, 624d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima{ 1280, 800, 24 , 0x179}, 634d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima{ 1280, 800, 32 , 0x17a}, 644d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima{ 1280, 960, 16 , 0x17b}, 654d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima{ 1280, 960, 24 , 0x17c}, 664d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima{ 1280, 960, 32 , 0x17d}, 674d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima{ 1440, 900, 16 , 0x17e}, 684d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima{ 1440, 900, 24 , 0x17f}, 694d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima{ 1440, 900, 32 , 0x180}, 704d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima{ 1400, 1050, 16 , 0x181}, 714d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima{ 1400, 1050, 24 , 0x182}, 724d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima{ 1400, 1050, 32 , 0x183}, 734d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima{ 1680, 1050, 16 , 0x184}, 744d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima{ 1680, 1050, 24 , 0x185}, 754d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima{ 1680, 1050, 32 , 0x186}, 764d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima{ 1920, 1200, 16 , 0x187}, 774d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima{ 1920, 1200, 24 , 0x188}, 784d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima{ 1920, 1200, 32 , 0x189}, 794d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima{ 2560, 1600, 16 , 0x18a}, 804d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima{ 2560, 1600, 24 , 0x18b}, 814d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima{ 2560, 1600, 32 , 0x18c}, 824d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima{ 1280, 720, 16 , 0x18d}, 834d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima{ 1280, 720, 24 , 0x18e}, 844d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima{ 1280, 720, 32 , 0x18f}, 854d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima{ 1920, 1080, 16 , 0x190}, 864d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima{ 1920, 1080, 24 , 0x191}, 874d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima{ 1920, 1080, 32 , 0x192}, 884d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima{ 0, }, 894d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima}; 904d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima 914d07f569799aaae0d7fccf8e76386d450664987fJun Nakajimaint main(int argc, char **argv) 924d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima{ 934d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima const ModeInfo *pm; 944d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima int pages, pitch; 954d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima int r_size, r_pos, g_size, g_pos, b_size, b_pos, a_size, a_pos; 964d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima const char *str; 974d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima long vram_size = VBE_DISPI_TOTAL_VIDEO_MEMORY_MB * 1024 * 1024; 984d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima 994d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima printf("/* THIS FILE IS AUTOMATICALLY GENERATED - DO NOT EDIT */\n\n"); 1004d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima printf("#define VBE_DISPI_TOTAL_VIDEO_MEMORY_MB %d\n\n", VBE_DISPI_TOTAL_VIDEO_MEMORY_MB); 1014d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima printf("static ModeInfoListItem mode_info_list[]=\n"); 1024d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima printf("{\n"); 1034d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima for (pm = modes; pm->mode != 0; pm++) { 1044d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima if (pm->depth == 4) 1054d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima pitch = (pm->width + 7) / 8; 1064d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima else 1074d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima pitch = pm->width * ((pm->depth + 7) / 8); 1084d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima pages = vram_size / (pm->height * pitch); 1094d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima if (pages > 0) { 1104d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima printf("{ 0x%04x, /* %dx%dx%d */\n", 1114d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima pm->mode, pm->width, pm->height, pm->depth); 1124d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima if (pm->depth == 4) 1134d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima printf("{ /*Bit16u ModeAttributes*/ %s,\n", 1144d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima "VBE_MODE_ATTRIBUTE_SUPPORTED | " 1154d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima "VBE_MODE_ATTRIBUTE_EXTENDED_INFORMATION_AVAILABLE | " 1164d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima "VBE_MODE_ATTRIBUTE_COLOR_MODE | " 1174d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima "VBE_MODE_ATTRIBUTE_TTY_BIOS_SUPPORT | " 1184d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima "VBE_MODE_ATTRIBUTE_GRAPHICS_MODE"); 1194d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima else 1204d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima printf("{ /*Bit16u ModeAttributes*/ %s,\n", 1214d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima "VBE_MODE_ATTRIBUTE_SUPPORTED | " 1224d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima "VBE_MODE_ATTRIBUTE_EXTENDED_INFORMATION_AVAILABLE | " 1234d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima "VBE_MODE_ATTRIBUTE_COLOR_MODE | " 1244d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima "VBE_MODE_ATTRIBUTE_LINEAR_FRAME_BUFFER_MODE | " 1254d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima "VBE_MODE_ATTRIBUTE_GRAPHICS_MODE"); 1264d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima printf("/*Bit8u WinAAttributes*/ %s,\n", 1274d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima "VBE_WINDOW_ATTRIBUTE_RELOCATABLE | " 1284d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima "VBE_WINDOW_ATTRIBUTE_READABLE | " 1294d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima "VBE_WINDOW_ATTRIBUTE_WRITEABLE"); 1304d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima 1314d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima printf("/*Bit8u WinBAttributes*/ %d,\n", 0); 1324d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima 1334d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima printf("/*Bit16u WinGranularity*/ %s,\n", "VBE_DISPI_BANK_SIZE_KB"); 1344d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima 1354d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima printf("/*Bit16u WinSize*/ %s,\n", "VBE_DISPI_BANK_SIZE_KB"); 1364d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima 1374d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima printf("/*Bit16u WinASegment*/ %s,\n", "VGAMEM_GRAPH"); 1384d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima 1394d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima printf("/*Bit16u WinBSegment*/ 0x%04x,\n", 0); 1404d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima 1414d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima printf("/*Bit32u WinFuncPtr*/ %d,\n", 0); 1424d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima 1434d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima printf("/*Bit16u BytesPerScanLine*/ %d,\n", pitch); 1444d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima 1454d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima // Mandatory information for VBE 1.2 and above 1464d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima printf("/*Bit16u XResolution*/ %d,\n", pm->width); 1474d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima printf("/*Bit16u YResolution*/ %d,\n", pm->height); 1484d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima printf("/*Bit8u XCharSize*/ %d,\n", 8); 1494d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima printf("/*Bit8u YCharSize*/ %d,\n", 16); 1504d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima if (pm->depth == 4) { 1514d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima printf("/*Bit8u NumberOfPlanes*/ %d,\n", 4); 1524d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima } else { 1534d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima printf("/*Bit8u NumberOfPlanes*/ %d,\n", 1); 1544d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima } 1554d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima printf("/*Bit8u BitsPerPixel*/ %d,\n", pm->depth); 1564d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima printf("/*Bit8u NumberOfBanks*/ %d,\n", 1574d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima (pm->height * pitch + 65535) / 65536); 1584d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima 1594d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima if (pm->depth == 4) 1604d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima str = "VBE_MEMORYMODEL_PLANAR"; 1614d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima else if (pm->depth == 8) 1624d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima str = "VBE_MEMORYMODEL_PACKED_PIXEL"; 1634d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima else 1644d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima str = "VBE_MEMORYMODEL_DIRECT_COLOR"; 1654d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima printf("/*Bit8u MemoryModel*/ %s,\n", str); 1664d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima printf("/*Bit8u BankSize*/ %d,\n", 0); 1674d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima if (pm->depth == 4) 1684d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima printf("/*Bit8u NumberOfImagePages*/ %d,\n", (pages / 4) - 1); 1694d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima else 1704d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima printf("/*Bit8u NumberOfImagePages*/ %d,\n", pages - 1); 1714d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima printf("/*Bit8u Reserved_page*/ %d,\n", 0); 1724d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima 1734d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima // Direct Color fields (required for direct/6 and YUV/7 memory models) 1744d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima switch(pm->depth) { 1754d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima case 15: 1764d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima r_size = 5; 1774d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima r_pos = 10; 1784d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima g_size = 5; 1794d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima g_pos = 5; 1804d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima b_size = 5; 1814d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima b_pos = 0; 1824d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima a_size = 1; 1834d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima a_pos = 15; 1844d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima break; 1854d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima case 16: 1864d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima r_size = 5; 1874d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima r_pos = 11; 1884d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima g_size = 6; 1894d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima g_pos = 5; 1904d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima b_size = 5; 1914d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima b_pos = 0; 1924d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima a_size = 0; 1934d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima a_pos = 0; 1944d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima break; 1954d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima case 24: 1964d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima r_size = 8; 1974d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima r_pos = 16; 1984d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima g_size = 8; 1994d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima g_pos = 8; 2004d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima b_size = 8; 2014d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima b_pos = 0; 2024d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima a_size = 0; 2034d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima a_pos = 0; 2044d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima break; 2054d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima case 32: 2064d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima r_size = 8; 2074d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima r_pos = 16; 2084d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima g_size = 8; 2094d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima g_pos = 8; 2104d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima b_size = 8; 2114d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima b_pos = 0; 2124d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima a_size = 8; 2134d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima a_pos = 24; 2144d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima break; 2154d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima default: 2164d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima r_size = 0; 2174d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima r_pos = 0; 2184d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima g_size = 0; 2194d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima g_pos = 0; 2204d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima b_size = 0; 2214d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima b_pos = 0; 2224d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima a_size = 0; 2234d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima a_pos = 0; 2244d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima break; 2254d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima } 2264d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima 2274d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima printf("/*Bit8u RedMaskSize*/ %d,\n", r_size); 2284d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima printf("/*Bit8u RedFieldPosition*/ %d,\n", r_pos); 2294d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima printf("/*Bit8u GreenMaskSize*/ %d,\n", g_size); 2304d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima printf("/*Bit8u GreenFieldPosition*/ %d,\n", g_pos); 2314d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima printf("/*Bit8u BlueMaskSize*/ %d,\n", b_size); 2324d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima printf("/*Bit8u BlueFieldPosition*/ %d,\n", b_pos); 2334d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima printf("/*Bit8u RsvdMaskSize*/ %d,\n", a_size); 2344d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima printf("/*Bit8u RsvdFieldPosition*/ %d,\n", a_pos); 2354d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima if (pm->depth == 32) 2364d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima printf("/*Bit8u DirectColorModeInfo*/ %s,\n", 2374d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima "VBE_DIRECTCOLOR_RESERVED_BITS_AVAILABLE"); 2384d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima else 2394d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima printf("/*Bit8u DirectColorModeInfo*/ %s,\n", "0"); 2404d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima 2414d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima// Mandatory information for VBE 2.0 and above 2424d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima if (pm->depth > 4) 2434d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima printf("/*Bit32u PhysBasePtr*/ %s,\n", 2444d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima "VBE_DISPI_LFB_PHYSICAL_ADDRESS"); 2454d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima else 2464d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima printf("/*Bit32u PhysBasePtr*/ %s,\n", "0"); 2474d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima printf("/*Bit32u OffScreenMemOffset*/ %d,\n", 0); 2484d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima printf("/*Bit16u OffScreenMemSize*/ %d,\n", 0); 2494d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima // Mandatory information for VBE 3.0 and above 2504d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima printf("/*Bit16u LinBytesPerScanLine*/ %d,\n", pitch); 2514d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima printf("/*Bit8u BnkNumberOfPages*/ %d,\n", 0); 2524d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima printf("/*Bit8u LinNumberOfPages*/ %d,\n", 0); 2534d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima printf("/*Bit8u LinRedMaskSize*/ %d,\n", r_size); 2544d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima printf("/*Bit8u LinRedFieldPosition*/ %d,\n", r_pos); 2554d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima printf("/*Bit8u LinGreenMaskSize*/ %d,\n", g_size); 2564d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima printf("/*Bit8u LinGreenFieldPosition*/ %d,\n", g_pos); 2574d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima printf("/*Bit8u LinBlueMaskSize*/ %d,\n", b_size); 2584d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima printf("/*Bit8u LinBlueFieldPosition*/ %d,\n", b_pos); 2594d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima printf("/*Bit8u LinRsvdMaskSize*/ %d,\n", a_size); 2604d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima printf("/*Bit8u LinRsvdFieldPosition*/ %d,\n", a_pos); 2614d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima printf("/*Bit32u MaxPixelClock*/ %d,\n", 0); 2624d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima printf("} },\n"); 2634d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima } 2644d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima } 2654d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima printf("{ VBE_VESA_MODE_END_OF_LIST,\n"); 2664d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima printf("{ 0,\n"); 2674d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima printf("} },\n"); 2684d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima printf("};\n"); 2694d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima return 0; 2704d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima} 271