Question: Before LBA was introduced, why does CHS start at 0,0,1 and not 0,0,0 ?

Answer: Unfortunately, this is just how the CHS addressing scheme, popular at the time, was implemented and adopted into use. This was adopted as the official convention for IBM-compatible computers in the BIOS interrupts used for disk access, explaining why this convention is used to this day. ?From the ECMA-107 Standard, Volume and File Structure of Disk Cartridges for Information Interchange (this is also mentioned in the original ATA-1 specification):

?

6.1.3 ?Logical Sector Number

?

Each sector on a volume shall be identified by a Logical Sector Number. ?[…] The Logical Sector Numbers shall be ?assigned in an ascending sequence, beginning with 0, starting at sector 1, track 00, side 0, continuing onto track ?00, side 1 (if FDC is recordable on both sides) and then to track 01, side 0, etc.

This issue is addressed in the specifications for some hard disks, where it is noted that a given logical CHS address differs from the physical CHS address location. ?This is further discussed in the Seagate ATA Interface Reference Manual, which contains this interesting narrative:

?

5.1 Logical block addressing

?

[…] the sectors on the drive are assumed to be linearly mapped, with an LBA 0 of cylinder 0 / head 0 / sector 1.

?

[…] For all translation modes, C=0, H=0, S=1 is equivalent to LBA=0. It ?is ?not ?possible to ?compute ?an equivalent CHS for all logical block addresses in all translation modes because this formula only works in one direction. This is because CHS addressing ?can t ?access ?1/256th ?of ?all ?of ?the ?possible sectors ?that logical block addressing can access, since there is no sector 0 in CHS.

Thus for logical CHS addressing, although the first cylinder/head indices start from a 0-based offset, and the first sector index starts from 1 (e.g. the minimum possible CHS address is 0/0/1), this does not change anything about the physical location of this sector. ?Think of it as the first physical sector on the disk being called “sector 1”, occupying CHS 0/0/1. ?Indeed, the “first” element in most programming languages is 0-based, so the logical address of the sector at CHS address 0/0/1 is zero (0x00).

This makes a lot more sense logically (namely, the “zeroth” logical address being the first physical sector), as we can address the disk device as any other memory device (as each sector has a unique linear address to map it to a physical sector), thus why it makes sense for LBA to start from zero. ?Indeed, if we translate the CHS address 0/0/1 to an LBA, the resulting LBA will be 0x00000000 (this is why 1 is subtracted from the sector index in most CHS to LBA calculations, and why 1 is added to the index for LBA to CHS calculations).