/* Generate the VGABIOS VBE Tables */
#include <stdlib.h>
#include <stdio.h>

#define VBE_DISPI_TOTAL_VIDEO_MEMORY_MB 16

typedef struct {
    int width;
    int height;
    int depth;
    int mode;
} ModeInfo;

ModeInfo modes[] = {
    /* standard VESA modes */
{ 640, 400, 8                          , 0x100},
{ 640, 480, 8                          , 0x101},
{ 800, 600, 4                          , 0x102},
{ 800, 600, 8                          , 0x103},
{ 1024, 768, 4                         , 0x104},
{ 1024, 768, 8                         , 0x105},
{ 1280, 1024, 4                        , 0x106},
{ 1280, 1024, 8                        , 0x107},
{ 320, 200, 15                       , 0x10D},
{ 320, 200, 16                        , 0x10E},
{ 320, 200, 24                        , 0x10F},
{ 640, 480, 15                       , 0x110},
{ 640, 480, 16                        , 0x111},
{ 640, 480, 24                        , 0x112},
{ 800, 600, 15                       , 0x113},
{ 800, 600, 16                        , 0x114},
{ 800, 600, 24                        , 0x115},
{ 1024, 768, 15                      , 0x116},
{ 1024, 768, 16                       , 0x117},
{ 1024, 768, 24                       , 0x118},
{ 1280, 1024, 15                     , 0x119},
{ 1280, 1024, 16                      , 0x11A},
{ 1280, 1024, 24                      , 0x11B},
{ 1600, 1200, 8                        , 0x11C},
{ 1600, 1200, 15                     , 0x11D},
{ 1600, 1200, 16                      , 0x11E},
{ 1600, 1200, 24                      , 0x11F},

      /* BOCHS/PLEX86 'own' mode numbers */
{ 320, 200, 32                       , 0x140},
{ 640, 400, 32                       , 0x141},
{ 640, 480, 32                       , 0x142},
{ 800, 600, 32                       , 0x143},
{ 1024, 768, 32                      , 0x144},
{ 1280, 1024, 32                     , 0x145},
{ 320, 200, 8                        , 0x146},
{ 1600, 1200, 32                     , 0x147},
{ 1152, 864, 8                       , 0x148},
{ 1152, 864, 15                      , 0x149},
{ 1152, 864, 16                      , 0x14a},
{ 1152, 864, 24                      , 0x14b},
{ 1152, 864, 32                      , 0x14c},
{ 1280, 768, 16                      , 0x175},
{ 1280, 768, 24                      , 0x176},
{ 1280, 768, 32                      , 0x177},
{ 1280, 800, 16                      , 0x178},
{ 1280, 800, 24                      , 0x179},
{ 1280, 800, 32                      , 0x17a},
{ 1280, 960, 16                      , 0x17b},
{ 1280, 960, 24                      , 0x17c},
{ 1280, 960, 32                      , 0x17d},
{ 1440, 900, 16                      , 0x17e},
{ 1440, 900, 24                      , 0x17f},
{ 1440, 900, 32                      , 0x180},
{ 1400, 1050, 16                     , 0x181},
{ 1400, 1050, 24                     , 0x182},
{ 1400, 1050, 32                     , 0x183},
{ 1680, 1050, 16                     , 0x184},
{ 1680, 1050, 24                     , 0x185},
{ 1680, 1050, 32                     , 0x186},
{ 1920, 1200, 16                     , 0x187},
{ 1920, 1200, 24                     , 0x188},
{ 1920, 1200, 32                     , 0x189},
{ 2560, 1600, 16                     , 0x18a},
{ 2560, 1600, 24                     , 0x18b},
{ 2560, 1600, 32                     , 0x18c},
{ 1280, 720, 16                      , 0x18d},
{ 1280, 720, 24                      , 0x18e},
{ 1280, 720, 32                      , 0x18f},
{ 1920, 1080, 16                     , 0x190},
{ 1920, 1080, 24                     , 0x191},
{ 1920, 1080, 32                     , 0x192},
{ 0, },
};

int main(int argc, char **argv)
{
  const ModeInfo *pm;
  int pages, pitch;
  int r_size, r_pos, g_size, g_pos, b_size, b_pos, a_size, a_pos;
  const char *str;
  long vram_size = VBE_DISPI_TOTAL_VIDEO_MEMORY_MB * 1024 * 1024;

  printf("/* THIS FILE IS AUTOMATICALLY GENERATED - DO NOT EDIT */\n\n");
  printf("#define VBE_DISPI_TOTAL_VIDEO_MEMORY_MB %d\n\n", VBE_DISPI_TOTAL_VIDEO_MEMORY_MB);
  printf("static ModeInfoListItem mode_info_list[]=\n");
  printf("{\n");
  for (pm = modes; pm->mode != 0; pm++) {
    if (pm->depth == 4)
      pitch = (pm->width + 7) / 8;
    else
      pitch = pm->width * ((pm->depth + 7) / 8);
    pages = vram_size / (pm->height * pitch);
    if (pages > 0) {
      printf("{ 0x%04x, /* %dx%dx%d */\n", 
             pm->mode, pm->width, pm->height, pm->depth);
      if (pm->depth == 4)
        printf("{ /*Bit16u ModeAttributes*/ %s,\n", 
               "VBE_MODE_ATTRIBUTE_SUPPORTED | "
               "VBE_MODE_ATTRIBUTE_EXTENDED_INFORMATION_AVAILABLE | "
               "VBE_MODE_ATTRIBUTE_COLOR_MODE | "
               "VBE_MODE_ATTRIBUTE_TTY_BIOS_SUPPORT | "
               "VBE_MODE_ATTRIBUTE_GRAPHICS_MODE");
      else
        printf("{ /*Bit16u ModeAttributes*/ %s,\n", 
               "VBE_MODE_ATTRIBUTE_SUPPORTED | "
               "VBE_MODE_ATTRIBUTE_EXTENDED_INFORMATION_AVAILABLE | "
               "VBE_MODE_ATTRIBUTE_COLOR_MODE | "
               "VBE_MODE_ATTRIBUTE_LINEAR_FRAME_BUFFER_MODE | "
               "VBE_MODE_ATTRIBUTE_GRAPHICS_MODE");
      printf("/*Bit8u  WinAAttributes*/ %s,\n",
             "VBE_WINDOW_ATTRIBUTE_RELOCATABLE | "
             "VBE_WINDOW_ATTRIBUTE_READABLE | "
             "VBE_WINDOW_ATTRIBUTE_WRITEABLE");

      printf("/*Bit8u  WinBAttributes*/ %d,\n", 0);

      printf("/*Bit16u WinGranularity*/ %s,\n", "VBE_DISPI_BANK_SIZE_KB");

      printf("/*Bit16u WinSize*/ %s,\n", "VBE_DISPI_BANK_SIZE_KB");

      printf("/*Bit16u WinASegment*/ %s,\n", "VGAMEM_GRAPH");

      printf("/*Bit16u WinBSegment*/ 0x%04x,\n", 0);

      printf("/*Bit32u WinFuncPtr*/ %d,\n", 0);

      printf("/*Bit16u BytesPerScanLine*/ %d,\n", pitch);

      // Mandatory information for VBE 1.2 and above
      printf("/*Bit16u XResolution*/ %d,\n", pm->width);
      printf("/*Bit16u YResolution*/ %d,\n", pm->height);
      printf("/*Bit8u  XCharSize*/ %d,\n", 8);
      printf("/*Bit8u  YCharSize*/ %d,\n", 16);
      if (pm->depth == 4) {
        printf("/*Bit8u  NumberOfPlanes*/ %d,\n", 4);
      } else {
        printf("/*Bit8u  NumberOfPlanes*/ %d,\n", 1);
      }
      printf("/*Bit8u  BitsPerPixel*/ %d,\n", pm->depth);
      printf("/*Bit8u  NumberOfBanks*/ %d,\n", 
             (pm->height * pitch + 65535) / 65536);

      if (pm->depth == 4)
        str = "VBE_MEMORYMODEL_PLANAR";
      else if (pm->depth == 8)
        str = "VBE_MEMORYMODEL_PACKED_PIXEL";
      else
        str = "VBE_MEMORYMODEL_DIRECT_COLOR";
      printf("/*Bit8u  MemoryModel*/ %s,\n", str);
      printf("/*Bit8u  BankSize*/ %d,\n", 0);
      if (pm->depth == 4)
        printf("/*Bit8u  NumberOfImagePages*/ %d,\n", (pages / 4) - 1);
      else
        printf("/*Bit8u  NumberOfImagePages*/ %d,\n", pages - 1);
      printf("/*Bit8u  Reserved_page*/ %d,\n", 0);

      // Direct Color fields (required for direct/6 and YUV/7 memory models)
      switch(pm->depth) {
        case 15:
          r_size = 5;
          r_pos = 10;
          g_size = 5;
          g_pos = 5;
          b_size = 5;
          b_pos = 0;
          a_size = 1;
          a_pos = 15;
          break;
        case 16:
          r_size = 5;
          r_pos = 11;
          g_size = 6;
          g_pos = 5;
          b_size = 5;
          b_pos = 0;
          a_size = 0;
          a_pos = 0;
          break;
        case 24:
          r_size = 8;
          r_pos = 16;
          g_size = 8;
          g_pos = 8;
          b_size = 8;
          b_pos = 0;
          a_size = 0;
          a_pos = 0;
          break;
        case 32:
          r_size = 8;
          r_pos = 16;
          g_size = 8;
          g_pos = 8;
          b_size = 8;
          b_pos = 0;
          a_size = 8;
          a_pos = 24;
          break;
        default:
          r_size = 0;
          r_pos = 0;
          g_size = 0;
          g_pos = 0;
          b_size = 0;
          b_pos = 0;
          a_size = 0;
          a_pos = 0;
          break;
      }

      printf("/*Bit8u  RedMaskSize*/ %d,\n", r_size);               
      printf("/*Bit8u  RedFieldPosition*/ %d,\n", r_pos);          
      printf("/*Bit8u  GreenMaskSize*/ %d,\n", g_size);             
      printf("/*Bit8u  GreenFieldPosition*/ %d,\n", g_pos);        
      printf("/*Bit8u  BlueMaskSize*/ %d,\n", b_size);              
      printf("/*Bit8u  BlueFieldPosition*/ %d,\n", b_pos);         
      printf("/*Bit8u  RsvdMaskSize*/ %d,\n", a_size);              
      printf("/*Bit8u  RsvdFieldPosition*/ %d,\n", a_pos);         
      if (pm->depth == 32)
        printf("/*Bit8u  DirectColorModeInfo*/ %s,\n",
               "VBE_DIRECTCOLOR_RESERVED_BITS_AVAILABLE");
      else
        printf("/*Bit8u  DirectColorModeInfo*/ %s,\n", "0");

// Mandatory information for VBE 2.0 and above
      if (pm->depth > 4)
        printf("/*Bit32u PhysBasePtr*/ %s,\n",
               "VBE_DISPI_LFB_PHYSICAL_ADDRESS");
      else
        printf("/*Bit32u PhysBasePtr*/ %s,\n", "0");
      printf("/*Bit32u OffScreenMemOffset*/ %d,\n", 0);
      printf("/*Bit16u OffScreenMemSize*/ %d,\n", 0);
      // Mandatory information for VBE 3.0 and above
      printf("/*Bit16u LinBytesPerScanLine*/ %d,\n", pitch);
      printf("/*Bit8u  BnkNumberOfPages*/ %d,\n", 0);
      printf("/*Bit8u  LinNumberOfPages*/ %d,\n", 0);
      printf("/*Bit8u  LinRedMaskSize*/ %d,\n", r_size);
      printf("/*Bit8u  LinRedFieldPosition*/ %d,\n", r_pos);
      printf("/*Bit8u  LinGreenMaskSize*/ %d,\n", g_size);
      printf("/*Bit8u  LinGreenFieldPosition*/ %d,\n", g_pos);
      printf("/*Bit8u  LinBlueMaskSize*/ %d,\n", b_size);
      printf("/*Bit8u  LinBlueFieldPosition*/ %d,\n", b_pos);
      printf("/*Bit8u  LinRsvdMaskSize*/ %d,\n", a_size);
      printf("/*Bit8u  LinRsvdFieldPosition*/ %d,\n", a_pos);
      printf("/*Bit32u MaxPixelClock*/ %d,\n", 0);
      printf("} },\n");
    }
  }
  printf("{ VBE_VESA_MODE_END_OF_LIST,\n");
  printf("{ 0,\n");
  printf("} },\n");
  printf("};\n");
  return 0;
}
