memdisk: Restore DL for INT 13h, AH=15h, DL=floppy syslinux-3.84-pre4
authorShao Miller <shao.miller@yrdsb.edu.on.ca>
Fri, 20 Nov 2009 01:20:33 +0000 (20:20 -0500)
committerH. Peter Anvin <hpa@zytor.com>
Fri, 20 Nov 2009 01:54:56 +0000 (17:54 -0800)
At least PC-DOS requires this to avoid an infinite loop; the DL we
restore is not the same DL that we call the underlying BIOS with, but
rather the original one (before the decrement.)  PC-DOS loops over all
the floppies and relies on the call preserving DL in order to advance
the loop.

Signed-off-by: H. Peter Anvin <hpa@zytor.com>
memdisk/memdisk.inc

index 98ad52b..a37218b 100644 (file)
@@ -174,7 +174,9 @@ Int13Start:
                cmp byte [cs:SavedAX+1],08h     ; Get drive params function?
                je .norestoredl                 ; DL = number of drives
                cmp byte [cs:SavedAX+1],15h     ; Get disk type function?
-               je .norestoredl                 ; CX:DX = size of device
+               jne .restoredl
+               test byte [bp+4],80h            ; Hard disk?
+               jnz .norestoredl                ; CX:DX = size of device
 .restoredl:
                mov dl,[bp+4]
 .norestoredl: