From 8403d77a1811359d1af51adb1b6494de60da8c1b Mon Sep 17 00:00:00 2001 From: Colin Finck Date: Sun, 22 Mar 2009 23:36:48 +0000 Subject: [PATCH] - 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. svn path=/trunk/; revision=40176 --- reactos/boot/freeldr/bootsect/isoboot.asm | 28 ++++------------------- 1 file changed, 5 insertions(+), 23 deletions(-) diff --git a/reactos/boot/freeldr/bootsect/isoboot.asm b/reactos/boot/freeldr/bootsect/isoboot.asm index 0c97f4236ea..054fc5bee78 100644 --- a/reactos/boot/freeldr/bootsect/isoboot.asm +++ b/reactos/boot/freeldr/bootsect/isoboot.asm @@ -898,41 +898,23 @@ kaboom: 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