Hi MIKE,
On 18-Nov-99, MIKE RUSKAI wrote to JONATHAN DE BOYNE POLLARD:
DD>> AMD K6/2-350 10.3GB Seagate, all OS/2, with 96MB memory. OS/2
DD>> only see's 8.3GB of the drive so the other 2GB is wasted.
JDBP>> I have a 8.49GiB (9.1GB) drive and OS/2 sees all of it just
JDBP>> fine.
Aha! Jonathan, although he doesn't say so here, has SCSI HDs, and I
suspect Dave has ATA ones. These are the ones where this was an issue,
because the drive makers were fiddling with the way LBA was
implemented (and so changing the ATA spec) to support larger and
larger drives faster than IBM could update their driver to support the
various schemes. The most recent release of the ATA drivers _does_
support them - but it took time :-(. SCSI has been good up to 64 Gig
(the max OS/2 volume size possible) since OS/2 V2 (and possibly
before, but I've no experience of OS/2 1.x)
JDBP>> The issue with drive sizes is a complex one, and I don't really
JDBP>> have the time to type in a full explanation here. But here are
JDBP>> two points that should start you going in the right direction:
JDBP>> þ The size limits on bootable partitions are imposed by the
JDBP>> antiquated BIOS API for accessing hard discs (which is, of
JDBP>> course, the only way to access hard discs before an operating
JDBP>> system has booted). The absolute maximum size of disc that is
JDBP>> "visible" via the BIOS API is 1024 cylinders * 255 tracks * 63
JDBP>> sectors, which is around 7.84GiB (8.42GB). All boot files and
JDBP>> partitions for all operating systems, or at least the portions
JDBP>> of those operating systems that are read before the operating
JDBP>> system's own disc device drivers kick in, must fit within the
JDBP>> first 1024 cylinders.
MR> Is there some reason that 0 is an invalid number for heads (AKA
MR> tracks/cylinder) and sectors/track? If there isn't, then that
MR> should be 1024*256*64, which comes out to exactly 8GiB (trying
MR> them on for size), provided the drive uses 512-byte sectors (as
MR> almost all do these days).
It's a valid number for heads, Jonathan has got it slightly wrong (a
rare event so note it down - but see below), afaiaa the BIOS INT13
C/H/S access call limits are:-
Cylinders 0 to 1023 = 1024
Heads 0 to 255 = 256
Sectors 1 to 63 = 63
It's only the sector numbers that are one based, and I don't know the
explanation but it's probably back in the mists of time at IBM when
they introduced the first floppy drives as a boot medium on their
machines (Murray may have some ideas).
*However* according to Ralf Brown's Interrupt List the headcount is
often limited to a max of 255 by the BIOS because of a bug in MSDOS
(all versions including the V7 underlying Win 95) which prevents
booting if there are 256 heads (which is why Jonathan is only
_slightly_ wrong ).
MR> Of course, that doesn't address the issue of drives larger than
MR> 8GB.
No, it can't :-).
MR> The BIOS's which are capable of supporting such drives actually
MR> support the entire drive, through a translation scheme I have yet
MR> to find any information about.
LBA (Logical Block Access) - They have a totally separate scheme which
uses sector number to access the drive (see below).
MR> The normal scheme is to double the heads and half the cylinders,
MR> but that stops working at 8GB (as it obvious).
That form of translation on ATA (or IDE if you insist) drives over 504
MB is used as the ATA C/H/S addressing scheme is limited to _16_ heads
(according to Ralf Brown's Interrupt List it's for compatibility with
the then standard Western Digital WD1003 controller for ST506
interface drives which could only support 16 heads). The alternative
for drives over 504 MB is to use LBA addressing (which is the only way
for drives over 8 GB).
MR> The new BIOS's can see the entire drive as one volume. I just
MR> don't know how they do it.
Two things :-)
First:
The ATA spec was modified (several times with various different
approaches along the way by different manufacturers) to support LBA
rather than C/H/S drive access. LBA identifies the block (sector?)
required by absolute number and will now handle drives > 8Gig, but I
don't have the ATA specs and don't know the current upper limit (maybe
Daniella will tell us - I know she has a copy).
Second:
See Ralf Brown's Interrupt List. There are IBM/MS extensions to work
with absolute block (sector?) numbers. The block number is passed in a
quad word (64 bit), so it should be good for a long time....
Int 13H function 42H - Extended read
Int 13H function 43H - Extended write
Int 13H function 44H - Verify sectors
Int 13H function 45H - Lock/unlock drive
Int 13H function 46H - Eject media
Int 13H function 47H - Extended seek
Int 13H function 48H - Get drive parameters
George
--- Terminate 5.00/Pro
143/1
* Origin: A country point under OS/2 (2:257/609.6)
|