First post, by unix_junkie
Over the years, I've been able to successfully triple-boot
- MS-DOS 6.22,
- Windows 98, and
- Windows 2000
from the same IDE hard drive, having the following disk geometry:
- a primary 2047.3 MB FAT16B (0x6) partition for MS-DOS, defined in CHS, cylinder-aligned, and spanning no more than 1024 cylinders (the "DOS limit");
- an extended LBA container (0xf), spanning the rest of the disk and, again, cylinder-aligned,
- 50% of the space within the extended partition dedicated to Windows 98 (W95 FAT32 (LBA), 0xc),
- 50% of the space within the extended partition dedicated to Windows 2000 (HPFS/NTFS/exFAT, 0x7).
The motherboard is ABIT BX133-RAID with an iBX440 chipset and AWARD BIOS (v6.00PG). When a 128 GB SATA disk is plugged into the onboard IDE controller (using an IDE/SATA DOF B76NX1041 adapter), AWARD BIOS offers three CHS geometry options:
- Normal or Auto: 61291 x 16 x 255 (with the 1024 cylinder limit, DOS will see up to 1.99 GB, whole CHS-addressable size is 119.2 GB)
- Large: 7661 x 128 x 255 (DOS-addressable size 15.9 GB, whole CHS-addressable size is 119.2 GB)
- LBA: 15565 x 255 x 63 (DOS-addressable size 7.8 GB, whole CHS-addressable size is 119.2 GB). This is, by the way, the choice of geometry always reported by Linux (with the only difference that it sees 15566 cylinders and not 15565).
Now, I'm trying to achieve the same goal using a Silicon Image SiI3114 controller, which can be plugged into a PCI slot and has 4 SATA ports. The controller itself is a SiI3114r5 (RAID5) downgraded to SiI3114 (non-RAID) by flashing a pure-IDE BIOS. And I'm facing a problem with the way how SiI3114 reports CHS disk geometry, even to OSes that are fully LBA-capable. Here's a screenshot of Linux fdisk reporting the drive geometry (LBA mode, 15566 cylinders, 255 heads). As you can see, 261 cylinders are more than enough to allow a 2047.3 MB FAT16B DOS partition. This is the expected behavior:
Yet, at some point (I personally did no changes to the hardware or BIOS, except for re-partitioning and OS re-installation), the SATA controller started reporting the number of heads as 16 and not 255 (this is no longer an LBA geometry, nor is it a Normal one). There're a couple of problems with this new weird geometry:
- It comes and goes for no reason, preventing CHS-dependent OSes (MS-DOS) from booting (right now, I have my controller reporting the correct LBA CHS geometry, but I'm not sure how long this will last).
- CHS-addressable size is only 7.5 GB (and no longer the whole disk). Even from within Linux.
- With the 1024 cylinder limit, the maximum partition size MS-DOS can use now is only 504 MB. Pretty much useless.
- Windows 98 can boot in the command-line mode (DOS 7.0, scandisk.exe reports no errors), but apparently observes the change in geometry when transferring control from DOS 7.0 to the 32-bit LBA-capable kernel, goes schizophrenic, and hangs with all kinds of error messages before reaching the GUI mode.
Apparently, the controller's own BIOS is either too buggy or too "clever", presenting either
- LBA-specific emulated CHS geometry to the OS, or
- the Normal CHS geometry,
depending on something I haven't yet figured out (the boot record content?).
- What may be going on with the SATA controller?
- How can I further diagnose the problem?
- Has anyone had any success booting Windows 98 from a 128 GB SATA SDD (size matters) attached to a SiI3114 controller?