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