aboutsummaryrefslogtreecommitdiffstats
path: root/mbr/isohdpfx.S
diff options
context:
space:
mode:
authorH. Peter Anvin <hpa@zytor.com>2008-09-05 15:00:40 -0700
committerH. Peter Anvin <hpa@zytor.com>2008-09-05 15:00:40 -0700
commitae73971d97f9fe3cc49f690e44962f32bd8eea37 (patch)
treed46f9e465110af851921c03dafb89a0bf6ee00c0 /mbr/isohdpfx.S
parent058dd028ac7d8ae217d1b3b00213751d63034195 (diff)
downloadsyslinux.git-ae73971d97f9fe3cc49f690e44962f32bd8eea37.tar.gz
syslinux.git-ae73971d97f9fe3cc49f690e44962f32bd8eea37.tar.xz
syslinux.git-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/isohdpfx.S')
-rw-r--r--mbr/isohdpfx.S12
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