aboutsummaryrefslogtreecommitdiffstats
path: root/mbr/mbr.S
diff options
context:
space:
mode:
authorH. Peter Anvin <hpa@linux.intel.com>2009-03-30 17:38:44 -0700
committerH. Peter Anvin <hpa@linux.intel.com>2009-03-30 17:38:44 -0700
commit4f964b57c29db85515b68a3f59a791804aae8aae (patch)
treedfd4ad63a74d7b11be71328b7f5fc4b2b80ca472 /mbr/mbr.S
parent1cb06f94c9c1525975254ed41942098d7a741840 (diff)
downloadlwip-4f964b57c29db85515b68a3f59a791804aae8aae.tar.gz
lwip-4f964b57c29db85515b68a3f59a791804aae8aae.tar.xz
lwip-4f964b57c29db85515b68a3f59a791804aae8aae.zip
mbr/*.S: if Ctrl is pressed, force the drive number to 0x80
Impact: BIOS bug workaround, possible unexpected consequences? Escape hatch for BIOSes which pass in garbage in DL: if the Ctrl key is pressed during boot, force the drive number to 0x80. Based on a patch by "TJ <ubuntu@tjworld.net>". Signed-off-by: H. Peter Anvin <hpa@linux.intel.com>
Diffstat (limited to 'mbr/mbr.S')
-rw-r--r--mbr/mbr.S12
1 files changed, 9 insertions, 3 deletions
diff --git a/mbr/mbr.S b/mbr/mbr.S
index 722d90db..70572d59 100644
--- a/mbr/mbr.S
+++ b/mbr/mbr.S
@@ -1,6 +1,6 @@
/* -----------------------------------------------------------------------
*
- * Copyright 2007-2008 H. Peter Anvin - All Rights Reserved
+ * Copyright 2007-2009 H. Peter Anvin - All Rights Reserved
*
* Permission is hereby granted, free of charge, to any person
* obtaining a copy of this software and associated documentation
@@ -53,7 +53,6 @@ _start:
movw %sp, %si
pushw %es /* es:di -> $PnP header */
pushw %di
- pushw %dx /* dl -> drive number */
movw %ax, %es
sti
cld
@@ -64,8 +63,15 @@ _start:
rep; movsw
ljmpw $0, $next
-
next:
+
+ /* Escape for the user: if Ctrl is pressed, assume drive hd0 */
+ testb $0x04, 0x417 /* keyboard control flags: Ctrl pressed */
+ jz 1f
+ movb $0x80, %dl
+1:
+ pushw %dx /* dl -> drive number */
+
/* Check to see if we have EBIOS */
pushw %dx /* drive number */
movb $0x41, %ah /* %al == 0 already */