aboutsummaryrefslogtreecommitdiffstats
path: root/core/isolinux.asm
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 /core/isolinux.asm
parent058dd028ac7d8ae217d1b3b00213751d63034195 (diff)
downloadsyslinux-ae73971d97f9fe3cc49f690e44962f32bd8eea37.tar.gz
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 'core/isolinux.asm')
-rw-r--r--core/isolinux.asm5
1 files changed, 4 insertions, 1 deletions
diff --git a/core/isolinux.asm b/core/isolinux.asm
index 060a3cf8..cb581e98 100644
--- a/core/isolinux.asm
+++ b/core/isolinux.asm
@@ -235,7 +235,7 @@ bi_end:
; entry stack:
; - CBIOS Heads
; - CBIOS Sectors
- ; - CBIOS flag
+ ; - EBIOS flag
; - DX (including drive number)
; - DI
; - ES
@@ -749,6 +749,8 @@ getlinsec: jmp word [cs:GetlinsecPtr]
; getlinsec implementation for floppy/HDD EBIOS (EDD)
;
getlinsec_ebios:
+ xor edx,edx
+ shld edx,eax,2
shl eax,2 ; Convert to HDD sectors
shl bp,2
@@ -781,6 +783,7 @@ getlinsec_ebios:
jc .error
pop bp
add eax,edi ; Advance sector pointer
+ adc edx,0
sub bp,di ; Sectors left
shl di,9 ; 512-byte sectors
add bx,di ; Advance buffer pointer