aboutsummaryrefslogtreecommitdiffstats
path: root/core/isolinux.asm
diff options
context:
space:
mode:
authorH. Peter Anvin <hpa@zytor.com>2009-05-31 21:55:09 -0700
committerH. Peter Anvin <hpa@zytor.com>2009-05-31 21:55:09 -0700
commitf502c307fcace74e8c99774112016150e8a7a01a (patch)
treebb653df246d37ae1f630f43be21bfe087186ab3b /core/isolinux.asm
parent651fc2a11d8a95e8d8f9e5aa6f788c2b030499f4 (diff)
parent327c0dadf173e09348b967746925e995b2b6dfaf (diff)
downloadsyslinux-f502c307fcace74e8c99774112016150e8a7a01a.tar.gz
Merge branch 'master' into core32
Conflicts: core/isolinux.asm
Diffstat (limited to 'core/isolinux.asm')
-rw-r--r--core/isolinux.asm35
1 files changed, 23 insertions, 12 deletions
diff --git a/core/isolinux.asm b/core/isolinux.asm
index ab0b6109..37c14744 100644
--- a/core/isolinux.asm
+++ b/core/isolinux.asm
@@ -108,20 +108,23 @@ GetlinsecPtr resw 1 ; The sector-read pointer
BIOSName resw 1 ; Display string for BIOS type
%define HAVE_BIOSNAME 1
BIOSType resw 1
-bsSecPerTrack resw 1 ; Used in hybrid mode
-bsHeads resw 1 ; Used in hybrid mode
DiskError resb 1 ; Error code for disk I/O
DriveNumber resb 1 ; CD-ROM BIOS drive number
ISOFlags resb 1 ; Flags for ISO directory search
RetryCount resb 1 ; Used for disk access retries
-_spec_start equ $
+ alignb 8
+bsHidden resq 1 ; Used in hybrid mode
+bsSecPerTrack resw 1 ; Used in hybrid mode
+bsHeads resw 1 ; Used in hybrid mode
+
;
; El Torito spec packet
;
alignb 8
+_spec_start equ $
spec_packet: resb 1 ; Size of packet
sp_media: resb 1 ; Media type
sp_drive: resb 1 ; Drive number
@@ -247,11 +250,15 @@ _start_hybrid:
pop dx
pop di
pop es
+ xor eax,eax
+ xor ebx,ebx
cmp sp,7C00h
jae .nooffset
- pop dword [cs:bsHidden]
- pop dword [cs:bsHidden+4]
+ pop eax
+ pop ebx
.nooffset:
+ mov [cs:bsHidden],eax
+ mov [cs:bsHidden+4],ebx
mov si,bios_cbios
jcxz _start_common
@@ -721,20 +728,26 @@ writechr:
ret
;
-; int13: save all the segment registers and call INT 13h
-; Some CD-ROM BIOSes have been found to corrupt segment registers.
+; int13: save all the segment registers and call INT 13h.
+; Some CD-ROM BIOSes have been found to corrupt segment registers
+; and/or disable interrupts.
;
int13:
-
+ pushf
+ push bp
push ds
push es
push fs
push gs
int 13h
+ mov bp,sp
+ setc [bp+10] ; Propagate CF to the caller
pop gs
pop fs
pop es
pop ds
+ pop bp
+ popf
ret
;
@@ -796,7 +809,7 @@ getlinsec_ebios:
push ds
push ss
pop ds ; DS <- SS
- mov ah,42h ; Extended Read
+ mov ah,42h ; Extended Read
call int13
pop ds
popad
@@ -1076,9 +1089,7 @@ bios_cbios_str db 'CHDD', 0
bios_ebios_str db 'EHDD' ,0
%endif
- alignz 8
-bsHidden dq 0 ; Used in hybrid mode
-
+ alignz 4
bios_cdrom: dw getlinsec_cdrom, bios_cdrom_str
%ifndef DEBUG_MESSAGES
bios_cbios: dw getlinsec_cbios, bios_cbios_str