diff options
author | H. Peter Anvin <hpa@zytor.com> | 2008-09-05 15:00:40 -0700 |
---|---|---|
committer | H. Peter Anvin <hpa@zytor.com> | 2008-09-05 15:00:40 -0700 |
commit | ae73971d97f9fe3cc49f690e44962f32bd8eea37 (patch) | |
tree | d46f9e465110af851921c03dafb89a0bf6ee00c0 /mbr | |
parent | 058dd028ac7d8ae217d1b3b00213751d63034195 (diff) | |
download | syslinux-ae73971d97f9fe3cc49f690e44962f32bd8eea37.tar.gz syslinux-ae73971d97f9fe3cc49f690e44962f32bd8eea37.tar.xz syslinux-ae73971d97f9fe3cc49f690e44962f32bd8eea37.zip |
ISOLINUX: fix EBIOS information passing in hybrid HDD mode
We were incorrectly not passing the EBIOS flag in hybrid HDD mode;
also compute the EBIOS LBA correctly in hybrid HDD mode. Allow a
34-bit LBA for this, that way we still support up to 2^32 CD-ROM
sectors (8 TB).
Signed-off-by: H. Peter Anvin <hpa@zytor.com>
Diffstat (limited to 'mbr')
-rw-r--r-- | mbr/isohdpfx.S | 12 |
1 files changed, 7 insertions, 5 deletions
diff --git a/mbr/isohdpfx.S b/mbr/isohdpfx.S index f2bc7dc6..2d65c7d7 100644 --- a/mbr/isohdpfx.S +++ b/mbr/isohdpfx.S @@ -44,9 +44,10 @@ isolinux_start_hybrid = 0x7c00+64+4 /* Important: the top 6 words on the stack are passed to isolinux.bin */ stack = 0x7c00 driveno = (stack-6) -sectors = (stack-8) -heads = (stack-10) -secpercyl = (stack-14) +ebios_flag = (stack-8) +sectors = (stack-10) +heads = (stack-12) +secpercyl = (stack-16) BIOS_page = 0x462 @@ -92,8 +93,8 @@ next: jc 1f cmpw $0xaa55, %bx jne 1f - shrw %cx /* Bit 0 = fixed disk subset */ - jnc 1f + andw $1,%cx /* Bit 0 = fixed disk subset */ + jz 1f /* We have EBIOS; patch in the following code at read_sector_cbios: movb $0x42, %ah ; jmp read_common */ @@ -102,6 +103,7 @@ next: 1: popw %dx + pushw %cx /* Save EBIOS flag */ /* Get (C)HS geometry */ movb $0x08, %ah |