⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 vbetables-gen.c

📁 xen虚拟机源代码安装包
💻 C
字号:
/* Generate the VGABIOS VBE Tables */#include <stdlib.h>#include <stdio.h>#define VBE_DISPI_TOTAL_VIDEO_MEMORY_MB 8typedef 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/PLE, 86 '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},{ 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;}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -