Author: cfinck
Date: Mon Mar 23 02:36:48 2009
New Revision: 40176
URL:
http://svn.reactos.org/svn/reactos?rev=40176&view=rev
Log:
- If we determine that the keyboard buffer is full, only call INT 16h,0 once without
checking again whether the buffer is free afterwards
Fixes bug #4264
- Get rid of another procedure for getting a character, can be replaced with two
instructions in the only place where this procedure was called
See issue #4264 for more details.
Modified:
trunk/reactos/boot/freeldr/bootsect/isoboot.asm
Modified: trunk/reactos/boot/freeldr/bootsect/isoboot.asm
URL:
http://svn.reactos.org/svn/reactos/trunk/reactos/boot/freeldr/bootsect/isob…
==============================================================================
--- trunk/reactos/boot/freeldr/bootsect/isoboot.asm [iso-8859-1] (original)
+++ trunk/reactos/boot/freeldr/bootsect/isoboot.asm [iso-8859-1] Mon Mar 23 02:36:48 2009
@@ -898,41 +898,23 @@
sti
mov si, err_bootfailed
call writestr
- call getchar
+ xor ax, ax ; Wait for keypress
+ int 16h
cli
mov word [BIOS_magic], 0 ; Cold reboot
jmp 0F000h:0FFF0h ; Reset vector address
-getchar:
-.again:
- mov ah, 1 ; Poll keyboard
- int 16h
- jz .again
-.kbd:
- xor ax, ax ; Get keyboard input
- int 16h
-.func_key:
- ret
-
;
; pollchar_and_empty: check if we have an input character pending (ZF = 0) and empty the
input buffer afterwards
;
pollchar_and_empty:
pushad
- mov ah, 1 ; Poll keyboard
+ mov ah, 1 ; Did the user press a key?
int 16h
- jz .end
-.empty_buffer:
- mov ah, 0 ; Read from keyboard
+ jz .end ; No, then we're done
+ mov ah, 0 ; Otherwise empty the buffer by reading it
int 16h
-
- mov ah, 1 ; Poll keyboard again
- int 16h
- jz .buffer_emptied
- jmp .empty_buffer
-.buffer_emptied:
- and ax, ax ; ZF = 0
.end:
popad
ret