I've added a new item into the Multiboot information structure as
suggested before. So the structure has the following structure:
+-------------------+
0 | flags | (required)
+-------------------+
4 | mem_lower | (present if flags[0] is set)
8 | mem_upper | (present if flags[0] is set)
+-------------------+
12 | boot_device | (present if flags[1] is set)
+-------------------+
16 | cmdline | (present if flags[2] is set)
+-------------------+
20 | mods_count | (present if flags[3] is set)
24 | mods_addr | (present if flags[3] is set)
+-------------------+
28 - 40 | syms | (present if flags[4] or
| | flags[5] is set)
+-------------------+
44 | mmap_length | (present if flags[6] is set)
48 | mmap_addr | (present if flags[6] is set)
+-------------------+
52 | drives_count | (present if flags[7] is set)
56 | drives_addr | (present if flags[7] is set)
+-------------------+
And, the description about drives_* is:
If bit 7 in the `flags' is set, then the `drives_*' fields are
valid, and indicate the address of the physical address of the first
drive structure and the number of drive structures. `drives_addr' is
the address, and `drives_count' is the number. `drives_count' may be
zero. Each drive structure is formatted as follows:
+-------------------+
0 | drive_number |
+-------------------+
1 | drive_mode |
+-------------------+
2 | drive_cylinders |
4 | drive_heads |
5 | drive_sectors |
+-------------------+
6 | drive_ports |
+-------------------+
10 | reserved (0) |
+-------------------+
The `drive_number' field contains the BIOS drive number. The
`drive_mode' field represents the access mode used by the boot loader.
Currently, the following modes are defined:
`0'
CHS mode (traditional cylinder/head/sector addressing mode).
`1'
LBA mode (Logical Block Addressing mode).
The three fields, `drive_cylinders', `drive_heads' and
`drive_sectors', indicate the geometry of the drive detected by the
BIOS. `drive_cylinders' contains the number of the cylinders.
`drive_heads' contains the number of the heads. `drive_sectors'
contains the number of the sectors per track.
The `drive_ports' field contains the physical address of the array
of the I/O ports used for the drive in the BIOS code. The array
consists of zero or more unsigned two-bytes integers, and is terminated
with zero. Note that the array may contain any number of I/O ports that
are not related to the drive actually (such as DMA controller's ports).
The last field `reserved' is reserved for future use, and must be
zero. The size is four bytes.
If you think anything should be changed, let me know, before I will
publish this modified version as the Multiboot Specification 0.7.
----------------------------------------------------------------------
OKUJI Yoshinori <[EMAIL PROTECTED]> ^o-o^
http://duff.kuicr.kyoto-u.ac.jp/~okuji (in English) m /