diff options
author | H. Peter Anvin <hpa@zytor.com> | 2009-05-31 21:55:09 -0700 |
---|---|---|
committer | H. Peter Anvin <hpa@zytor.com> | 2009-05-31 21:55:09 -0700 |
commit | f502c307fcace74e8c99774112016150e8a7a01a (patch) | |
tree | bb653df246d37ae1f630f43be21bfe087186ab3b /core/isolinux.asm | |
parent | 651fc2a11d8a95e8d8f9e5aa6f788c2b030499f4 (diff) | |
parent | 327c0dadf173e09348b967746925e995b2b6dfaf (diff) | |
download | syslinux-f502c307fcace74e8c99774112016150e8a7a01a.tar.gz |
Merge branch 'master' into core32
Conflicts:
core/isolinux.asm
Diffstat (limited to 'core/isolinux.asm')
-rw-r--r-- | core/isolinux.asm | 35 |
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 |