[ros-diffs] [cfinck] 39387: - Change "pollchar" to also empty the keyboard buffer after polling the character and rename it to "pollchar_and_empty" accordingly. This fixes a bug revealed by silverblade's FOSDEM CD: If you boot FreeLoader with a boot menu from CD and press a key after that "Press any key to boot from CD" message, that keypress was forwarded to FreeLoader as well. - Remove the already unused and now unsynchronized "pollchar" from the regression testing boot sector.

cfinck at svn.reactos.org cfinck at svn.reactos.org
Wed Feb 4 14:13:22 CET 2009


Author: cfinck
Date: Wed Feb  4 07:13:21 2009
New Revision: 39387

URL: http://svn.reactos.org/svn/reactos?rev=39387&view=rev
Log:
- Change "pollchar" to also empty the keyboard buffer after polling the character and rename it to "pollchar_and_empty" accordingly.
  This fixes a bug revealed by silverblade's FOSDEM CD: If you boot FreeLoader with a boot menu from CD and press a key after that "Press any key to boot from CD" message, that keypress was forwarded to FreeLoader as well.
- Remove the already unused and now unsynchronized "pollchar" from the regression testing boot sector.

Modified:
    trunk/reactos/boot/freeldr/bootsect/isoboot.asm
    trunk/reactos/boot/freeldr/bootsect/isobtrt.asm

Modified: trunk/reactos/boot/freeldr/bootsect/isoboot.asm
URL: http://svn.reactos.org/svn/reactos/trunk/reactos/boot/freeldr/bootsect/isoboot.asm?rev=39387&r1=39386&r2=39387&view=diff
==============================================================================
--- trunk/reactos/boot/freeldr/bootsect/isoboot.asm [iso-8859-1] (original)
+++ trunk/reactos/boot/freeldr/bootsect/isoboot.asm [iso-8859-1] Wed Feb  4 07:13:21 2009
@@ -132,12 +132,7 @@
 
 	; Make sure the keyboard buffer is empty
 %ifdef WAIT_FOR_KEY
-.kbd_buffer_test:
-	call	pollchar
-	jz	.kbd_buffer_empty
-	call	getchar
-	jmp	.kbd_buffer_test
-.kbd_buffer_empty:
+	call	pollchar_and_empty
 
 	; Check for MBR on harddisk
 	pusha
@@ -166,7 +161,7 @@
 	add	eax, 19				; 
 
 .poll_again:
-	call	pollchar
+	call	pollchar_and_empty
 	jnz	.boot_cdrom
 
 	mov	ebx, [BIOS_timer]
@@ -921,12 +916,24 @@
 
 
 ;
-; pollchar: check if we have an input character pending (ZF = 0)
-;
-pollchar:
+; 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		; Poll keyboard
 	int 16h
+	jz	.end
+.empty_buffer:
+	mov ah, 0		; Read from keyboard
+	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
 

Modified: trunk/reactos/boot/freeldr/bootsect/isobtrt.asm
URL: http://svn.reactos.org/svn/reactos/trunk/reactos/boot/freeldr/bootsect/isobtrt.asm?rev=39387&r1=39386&r2=39387&view=diff
==============================================================================
--- trunk/reactos/boot/freeldr/bootsect/isobtrt.asm [iso-8859-1] (original)
+++ trunk/reactos/boot/freeldr/bootsect/isobtrt.asm [iso-8859-1] Wed Feb  4 07:13:21 2009
@@ -887,18 +887,6 @@
 	ret
 
 
-;
-; pollchar: check if we have an input character pending (ZF = 0)
-;
-pollchar:
-	pushad
-	mov ah,1		; Poll keyboard
-	int 16h
-	popad
-	ret
-
-
-
 isolinux_banner	db CR, LF, 'Loading IsoBoot...', CR, LF, 0
 copyright_str	db ' Copyright (C) 1994-2002 H. Peter Anvin', CR, LF, 0
 presskey_msg	db 'Press any key to boot from CD', 0



More information about the Ros-diffs mailing list