1 /* Generate the VGABIOS VBE Tables */
5 #define VBE_DISPI_TOTAL_VIDEO_MEMORY_MB 8
15 /* standard VESA modes */
16 { 640, 400, 8 , 0x100},
17 { 640, 480, 8 , 0x101},
18 { 800, 600, 4 , 0x102},
19 { 800, 600, 8 , 0x103},
20 { 1024, 768, 4 , 0x104},
21 { 1024, 768, 8 , 0x105},
22 { 1280, 1024, 4 , 0x106},
23 { 1280, 1024, 8 , 0x107},
24 { 320, 200, 15 , 0x10D},
25 { 320, 200, 16 , 0x10E},
26 { 320, 200, 24 , 0x10F},
27 { 640, 480, 15 , 0x110},
28 { 640, 480, 16 , 0x111},
29 { 640, 480, 24 , 0x112},
30 { 800, 600, 15 , 0x113},
31 { 800, 600, 16 , 0x114},
32 { 800, 600, 24 , 0x115},
33 { 1024, 768, 15 , 0x116},
34 { 1024, 768, 16 , 0x117},
35 { 1024, 768, 24 , 0x118},
36 { 1280, 1024, 15 , 0x119},
37 { 1280, 1024, 16 , 0x11A},
38 { 1280, 1024, 24 , 0x11B},
39 { 1600, 1200, 8 , 0x11C},
40 { 1600, 1200, 15 , 0x11D},
41 { 1600, 1200, 16 , 0x11E},
42 { 1600, 1200, 24 , 0x11F},
44 /* BOCHS/PLE, 86 'own' mode numbers */
45 { 320, 200, 32 , 0x140},
46 { 640, 400, 32 , 0x141},
47 { 640, 480, 32 , 0x142},
48 { 800, 600, 32 , 0x143},
49 { 1024, 768, 32 , 0x144},
50 { 1280, 1024, 32 , 0x145},
51 { 320, 200, 8 , 0x146},
52 { 1600, 1200, 32 , 0x147},
53 { 1152, 864, 8 , 0x148},
54 { 1152, 864, 15 , 0x149},
55 { 1152, 864, 16 , 0x14a},
56 { 1152, 864, 24 , 0x14b},
57 { 1152, 864, 32 , 0x14c},
61 int main(int argc
, char **argv
)
65 int r_size
, r_pos
, g_size
, g_pos
, b_size
, b_pos
, a_size
, a_pos
;
67 long vram_size
= VBE_DISPI_TOTAL_VIDEO_MEMORY_MB
* 1024 * 1024;
69 printf("/* THIS FILE IS AUTOMATICALLY GENERATED - DO NOT EDIT */\n\n");
70 printf("#define VBE_DISPI_TOTAL_VIDEO_MEMORY_MB %d\n\n", VBE_DISPI_TOTAL_VIDEO_MEMORY_MB
);
71 printf("static ModeInfoListItem mode_info_list[]=\n");
73 for (pm
= modes
; pm
->mode
!= 0; pm
++) {
75 pitch
= (pm
->width
+ 7) / 8;
77 pitch
= pm
->width
* ((pm
->depth
+ 7) / 8);
78 pages
= vram_size
/ (pm
->height
* pitch
);
80 printf("{ 0x%04x, /* %dx%dx%d */\n",
81 pm
->mode
, pm
->width
, pm
->height
, pm
->depth
);
83 printf("{ /*Bit16u ModeAttributes*/ %s,\n",
84 "VBE_MODE_ATTRIBUTE_SUPPORTED | "
85 "VBE_MODE_ATTRIBUTE_EXTENDED_INFORMATION_AVAILABLE | "
86 "VBE_MODE_ATTRIBUTE_COLOR_MODE | "
87 "VBE_MODE_ATTRIBUTE_TTY_BIOS_SUPPORT | "
88 "VBE_MODE_ATTRIBUTE_GRAPHICS_MODE");
90 printf("{ /*Bit16u ModeAttributes*/ %s,\n",
91 "VBE_MODE_ATTRIBUTE_SUPPORTED | "
92 "VBE_MODE_ATTRIBUTE_EXTENDED_INFORMATION_AVAILABLE | "
93 "VBE_MODE_ATTRIBUTE_COLOR_MODE | "
94 "VBE_MODE_ATTRIBUTE_LINEAR_FRAME_BUFFER_MODE | "
95 "VBE_MODE_ATTRIBUTE_GRAPHICS_MODE");
96 printf("/*Bit8u WinAAttributes*/ %s,\n",
97 "VBE_WINDOW_ATTRIBUTE_RELOCATABLE | "
98 "VBE_WINDOW_ATTRIBUTE_READABLE | "
99 "VBE_WINDOW_ATTRIBUTE_WRITEABLE");
101 printf("/*Bit8u WinBAttributes*/ %d,\n", 0);
103 printf("/*Bit16u WinGranularity*/ %s,\n", "VBE_DISPI_BANK_SIZE_KB");
105 printf("/*Bit16u WinSize*/ %s,\n", "VBE_DISPI_BANK_SIZE_KB");
107 printf("/*Bit16u WinASegment*/ %s,\n", "VGAMEM_GRAPH");
109 printf("/*Bit16u WinBSegment*/ 0x%04x,\n", 0);
111 printf("/*Bit32u WinFuncPtr*/ %d,\n", 0);
113 printf("/*Bit16u BytesPerScanLine*/ %d,\n", pitch
);
115 // Mandatory information for VBE 1.2 and above
116 printf("/*Bit16u XResolution*/ %d,\n", pm
->width
);
117 printf("/*Bit16u YResolution*/ %d,\n", pm
->height
);
118 printf("/*Bit8u XCharSize*/ %d,\n", 8);
119 printf("/*Bit8u YCharSize*/ %d,\n", 16);
120 if (pm
->depth
== 4) {
121 printf("/*Bit8u NumberOfPlanes*/ %d,\n", 4);
123 printf("/*Bit8u NumberOfPlanes*/ %d,\n", 1);
125 printf("/*Bit8u BitsPerPixel*/ %d,\n", pm
->depth
);
126 printf("/*Bit8u NumberOfBanks*/ %d,\n",
127 (pm
->height
* pitch
+ 65535) / 65536);
130 str
= "VBE_MEMORYMODEL_PLANAR";
131 else if (pm
->depth
== 8)
132 str
= "VBE_MEMORYMODEL_PACKED_PIXEL";
134 str
= "VBE_MEMORYMODEL_DIRECT_COLOR";
135 printf("/*Bit8u MemoryModel*/ %s,\n", str
);
136 printf("/*Bit8u BankSize*/ %d,\n", 0);
138 printf("/*Bit8u NumberOfImagePages*/ %d,\n", (pages
/ 4) - 1);
140 printf("/*Bit8u NumberOfImagePages*/ %d,\n", pages
- 1);
141 printf("/*Bit8u Reserved_page*/ %d,\n", 0);
143 // Direct Color fields (required for direct/6 and YUV/7 memory models)
197 printf("/*Bit8u RedMaskSize*/ %d,\n", r_size
);
198 printf("/*Bit8u RedFieldPosition*/ %d,\n", r_pos
);
199 printf("/*Bit8u GreenMaskSize*/ %d,\n", g_size
);
200 printf("/*Bit8u GreenFieldPosition*/ %d,\n", g_pos
);
201 printf("/*Bit8u BlueMaskSize*/ %d,\n", b_size
);
202 printf("/*Bit8u BlueFieldPosition*/ %d,\n", b_pos
);
203 printf("/*Bit8u RsvdMaskSize*/ %d,\n", a_size
);
204 printf("/*Bit8u RsvdFieldPosition*/ %d,\n", a_pos
);
206 printf("/*Bit8u DirectColorModeInfo*/ %s,\n",
207 "VBE_DIRECTCOLOR_RESERVED_BITS_AVAILABLE");
209 printf("/*Bit8u DirectColorModeInfo*/ %s,\n", "0");
211 // Mandatory information for VBE 2.0 and above
213 printf("/*Bit32u PhysBasePtr*/ %s,\n",
214 "VBE_DISPI_LFB_PHYSICAL_ADDRESS");
216 printf("/*Bit32u PhysBasePtr*/ %s,\n", "0");
217 printf("/*Bit32u OffScreenMemOffset*/ %d,\n", 0);
218 printf("/*Bit16u OffScreenMemSize*/ %d,\n", 0);
219 // Mandatory information for VBE 3.0 and above
220 printf("/*Bit16u LinBytesPerScanLine*/ %d,\n", pitch
);
221 printf("/*Bit8u BnkNumberOfPages*/ %d,\n", 0);
222 printf("/*Bit8u LinNumberOfPages*/ %d,\n", 0);
223 printf("/*Bit8u LinRedMaskSize*/ %d,\n", r_size
);
224 printf("/*Bit8u LinRedFieldPosition*/ %d,\n", r_pos
);
225 printf("/*Bit8u LinGreenMaskSize*/ %d,\n", g_size
);
226 printf("/*Bit8u LinGreenFieldPosition*/ %d,\n", g_pos
);
227 printf("/*Bit8u LinBlueMaskSize*/ %d,\n", b_size
);
228 printf("/*Bit8u LinBlueFieldPosition*/ %d,\n", b_pos
);
229 printf("/*Bit8u LinRsvdMaskSize*/ %d,\n", a_size
);
230 printf("/*Bit8u LinRsvdFieldPosition*/ %d,\n", a_pos
);
231 printf("/*Bit32u MaxPixelClock*/ %d,\n", 0);
235 printf("{ VBE_VESA_MODE_END_OF_LIST,\n");