Port-i386 archive

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index][Old Index]

Re: LBA vs CHS?

> I don't know about it ignoring the cylinder number, but int 13h
> function 02h is limited to approximately 8GB [...], so I'd expect the
> boot code to use int 13h function 42h for larger disks.  I see a
> biosdisk_extread routine in [bios_disk.S].  I haven't looked to see
> when it's used though.  [...]

Turns out it's used when

        if (NEED_INT13EXT(d, dblk, num)) {

which is defined earlier in biosdisk_ll.c:

 * Because some older BIOSes have bugs in their int13 extensions, we
 * only try to use the extended read if the I/O request can't be addressed
 * using CHS.
 * Of course, some BIOSes have bugs in ths CHS read, such as failing to
 * function properly if the MBR table has a different geometry than the
 * BIOS would generate internally for the device in question, and so we
 * provide a way to force the extended on hard disks via a compile-time
 * option.
#if defined(FORCE_INT13EXT)
#define NEED_INT13EXT(d, dblk, num)                             \
        (((d)->dev & 0x80) != 0)
#define NEED_INT13EXT(d, dblk, num)                             \
        (((d)->type == BIOSDISK_TYPE_CD) ||                     \
         ((d)->type == BIOSDISK_TYPE_HD &&                      \
          ((dblk) + (num)) >= (d)->chs_sectors))

I tried building with FORCE_INT13EXT and it works just fine.  So at
least I have a workaround.  It's not great, since it means I have to do
machine-specific hackery to build working bootblocks, but it's a lot
better than the previous situation.  I'll try to figure out a way to
make that decision post-build-time.

I've sent Soekris a ping.  No response yet, but it's been only about
twenty minutes, so that doesn't mean anything.

/~\ The ASCII				  Mouse
\ / Ribbon Campaign
 X  Against HTML		mouse%rodents-montreal.org@localhost
/ \ Email!	     7D C8 61 52 5D E7 2D 39  4E F1 31 3E E8 B3 27 4B

Home | Main Index | Thread Index | Old Index