I've updated my patch some more. Please comment if you see something that should be done in a different way, or whatever.
--- multiboot-old.texi Mon Jan 31 09:55:40 2000 +++ multiboot.texi Tue Feb 1 20:12:16 2000 @@ -353,6 +353,11 @@ 24 | bss_end_addr | (present if flags[16] is set) 28 | entry_addr | (present if flags[16] is set) +-------------------+ +32 | mode_type | (present if flags[17] is set) +32 | width | (present if flags[17] is set) +36 | height | (present if flags[17] is set) +40 | depth | (present if flags[17] is set) + +-------------------+ @end group @end example @@ -383,6 +388,9 @@ bootloader is capable of passing a memory map (the @samp{mmap_*} fields) and one exists, then it must be included as well. +If bit 2 in the @samp{flags} word is set, information about the video +mode table, defined later, must be available to the kernel. + If bit 16 in the @samp{flags} word is set, then the fields at offsets 8-24 in the Multiboot header are valid, and the boot loader should use them instead of the fields in the actual executable header to calculate @@ -430,6 +438,28 @@ The checksum is a 32-bit unsigned value which, when added to the other required fields, must have a 32-bit unsigned sum of zero. +If bit 17 is set, information about a preferred default mode is +specified in the @samp{mode_type], @samp{width}, @samp{height} and +@samp{depth} fields. This is only a @emph{recommended} mode by the +kernel. If the mode exists, the boot loader should set it if the user +hasn't specified a mode. If not, it should fall back to a similar mode, +if available. + +This flag should only be used together with bit 2. If this flag is found +alone, the boot loader should signal an error to the user and abort the +loading of the kernel. + +Valid numbers for @samp{mode_type} is 0 for linear graphics mode and 1 +for EGA-standard text mode. Everything else is reserved for future +expansion. + +@samp{width} and @samp{height} is specified in pixels, if graphics mode, +or characters in EGA text mode. @samp{depth} is given in bits per pixel +for graphics, or zero for EGA text modes. + +Any, some or all of those fields may be left out, indicating to the boot +loader that no preference is given. This makes it possible for a kernel +to just say it wants a 32-bit resolution, for example. @node Machine state @section Machine state @@ -549,6 +579,8 @@ +-------------------+ 68 - ?? | apm_table | (present if flags[10] is set) +-------------------+ +?? - ?? | graphics_table | (present if flags[11] is set) + +-------------------+ @end group @end example @@ -800,6 +832,36 @@ @c I haven't defined the apm_table field yet. - okuji +If bit 11 in the @samp{flags} is set, video mode information is +available in the mode table. This should only be done if the kernel has +indicated in the @samp{Multiboot Header} that it accepts graphics modes. + +The mode table looks like this: + +@example +@group + + +----------------------+ +0 | mode_type | +4 | width | +8 | height | +12 | depth | +16 | frame_buffer_address | + +----------------------+ + +@end group +@end example + +Valid numbers for @samp{mode_type} is 0 for linear graphics mode and 1 +for EGA-standard text mode. Everything else is reserved for future +expansion. + +@samp{width} and @samp{height} is specified in pixels, if graphics mode, +or characters in EGA text mode. @samp{depth} is given in bits per pixel +for graphics, or unused for EGA text mode. + +@samp{frame_buffer_address} specifies the physical start address of the +linear frame buffer. This is valid for both graphics and text modes. @node Examples @chapter Examples