As for the concept of "overall," I've mentioned it before; it's the mechanism inside the hard drive. Currently, the internal addressing of hard drives uses CHS, and all sectors are uniformly numbered, with addressing directly based on this number. Then, on the hard drive interface, it's converted into a CHS parameter. Why is this so cumbersome? First, hard drives are too large, and the number of sectors per track differs greatly between the inner and outer circles. Using CHS parameters that directly reflect the 3D structure of the disk is too wide-ranging for software, and it varies between different hard drives. This makes it difficult for software to adapt to most hard drives (for example, 1 head, 10 cylinders has 128 sectors, but since you address up to 64, half the space is lost; and for 1 head, 1 cylinder, there are only 32 sectors, but since the register can address up to 64, addressing often goes out of bounds). After uniformly numbering the sectors, logically, there's only the change in the range of cylinders (that is, the diameter of the disk multiplied by the density, in other words, the change in track density), there's no out-of-bounds or space loss. Second, although direct CHS addressing is abolished, software all uses the fixed CHS format for addressing, especially Microsoft's software. So externally, parameters still need to be passed in CHS mode.
So my point is: the 28-bit register of the hard drive is the interface between software and hardware. That is, after submitting the access method to the hard drive, the internal addressing mechanism of the hard drive will choose the mode of address conversion accordingly. I've already said earlier that although LBA and CHS use different methods for addressing inside the hard drive, all hard drive modes return 28-bit values that are CHS parameters. This conversion process is done by the hard drive, and software doesn't need to and can't interfere with this.
There's actually no essential difference between LBA and CHS. Look at your computer's BIOS; it only has NORMAL, LARGE, LBA, AUTO, not separated into CHS, LBA, LARGE. Because LBA is just one of the CHS methods, except that its 28 bits can all be at the maximum value, all can be 1. The impact is that there are more sectors per cylinder.
And those so-called restrictions we had before were just due to the conversion between software and software. It has nothing to do with CHS and LBA. Only up to 137G is the physical limit, and new hard drives need to use 48-bit registers to solve it.
Then, software—including BIOS—takes over the subsequent work, and the I/O routines address and read/write the disk according to the given C, H, S.
The reason we see different LBA, CHS settings and values in software is just that the hard drive internally addresses differently. BIOS generally doesn't make further conversions (LARGE needs a slight change, so LARGE is actually implemented by software, and thus has poor compatibility).
You also mentioned the issue with PC Rabbit. Not just it, many disk software have had similar problems. The root cause of this problem is the address conversion problem, because it accesses the disk through BIOS (and through DOS, of course, it's even worse). If you switch your current LBA or NORMAL to NORMAL or LBA and then boot, the system won't start and will immediately crash—BIOS can't even locate the boot sector of the operating system, so what can you expect from an old version of PC Rabbit to do through BIOS? I have a bunch of such DOS software, and nine times out of ten, they crash immediately when opened.
--------------------------------------------------
My personal website has a detailed introduction about disks, but it's not finished yet and probably won't be finished by the end of the year. Oh well
[ Last edited by fdsiuha on 2005-11-2 at 16:08 ]