From 2fde7f0b4738494ff58bf2bc3fe5810c1d2546d8 Mon Sep 17 00:00:00 2001 From: Mounir IDRASSI Date: Wed, 2 Aug 2017 17:25:06 +0200 Subject: Windows MBR bootloader: reduce CPU usage during password prompt (Credit: Jason Pyeron of CipherShed project https://github.com/CipherShed/CipherShed/commit/00ea00e8e6a23a4243316f860aa07ed59203ab97) --- src/Boot/Windows/BootConsoleIo.cpp | 23 ++++++++++++++++++++++- 1 file changed, 22 insertions(+), 1 deletion(-) diff --git a/src/Boot/Windows/BootConsoleIo.cpp b/src/Boot/Windows/BootConsoleIo.cpp index b03098f0..9148f5c9 100644 --- a/src/Boot/Windows/BootConsoleIo.cpp +++ b/src/Boot/Windows/BootConsoleIo.cpp @@ -238,11 +238,32 @@ byte GetKeyboardChar () return GetKeyboardChar (nullptr); } +/* +inline void Sleep () +{ + __asm + { + mov al, 0 + mov ah, 0x86 + // Sleep for 250 milliseconds = 250 000 microseconds = 0x0003D090 + mov cx, 0x0003 + mov dx, 0xD090 + int 0x15 + } +} +*/ byte GetKeyboardChar (byte *scanCode) { // Work around potential BIOS bugs (Windows boot manager polls the keystroke buffer) - while (!IsKeyboardCharAvailable()); + while (!IsKeyboardCharAvailable()) + { + // reduce CPU usage by halting CPU until the next external interrupt is fired + __asm + { + hlt + } + } byte asciiCode; byte scan; -- cgit v1.2.3