eltorito: Scan upwards instead of downwards
authorShao Miller <shao.miller@yrdsb.edu.on.ca>
Fri, 11 Jun 2010 04:15:19 +0000 (04:15 +0000)
committerH. Peter Anvin <hpa@linux.intel.com>
Thu, 17 Jun 2010 18:44:37 +0000 (11:44 -0700)
A developer for GRUB4DOS called tinybit has reported that some
BIOSes crash when the DOS ElTorito.Sys driver scans drive number
0xFF.  According to the El Torito specification, drive 0x7F
means "terminate all," so a plausible explanation suggested
by H. Peter Anvin is that the drive 0xFF is a shadow of drive
0x7F, thus contributing to a failure on these BIOSes.

Now we scan from 0x80 through 0xFF, instead.

[ hpa: dropped checkin of eltorito.sys ]

Signed-off-by: Shao Miller <shao.miller@yrdsb.edu.on.ca>
Signed-off-by: H. Peter Anvin <hpa@linux.intel.com>
dosutil/eltorito.asm

index eabda12..96cfd9b 100644 (file)
@@ -1029,7 +1029,7 @@ SpecGo:           mov     si,SpecPkt
 
 ScanDrives:    push    ax              ; at df3 in 1.4
                push    si
-               mov dl, 0ffh            ;Start at Drive 0xff
+               mov dl, 80h             ;Start at Drive 0x80
 NextDrv:       mov     ax,4B01h                ;Get Bootable CD-ROM Status
                mov     BYTE [SpecPkt],0                ;Clear 1st byte of SpecPkt
                call    SpecGo
@@ -1044,9 +1044,9 @@ NextDrv:  mov     ax,4B01h                ;Get Bootable CD-ROM Status
                ja      FindFail        ; in 1.4 at e16
                jmp     short SendFound ; in 1.4 at e26
 
-FindFail:      dec     dl                      ;Next drive
-               cmp     dl, 80h
-               jb      SendFail                ; Check from ffh..80h
+FindFail:      inc     dl                      ;Next drive
+               cmp     dl, 0ffh
+               jb      SendFail                ; Check from 80h..ffh
                jmp     short NextDrv
 SendFail:      xor     dl,dl
                stc