1 /* 2 * Copyright 2008-2010, François Revol, revol@free.fr. All rights reserved. 3 * Copyright 2004, Axel Dörfler, axeld@pinc-software.de. All rights reserved. 4 * Distributed under the terms of the MIT License. 5 */ 6 7 8 #include "keyboard.h" 9 #include "toscalls.h" 10 11 #include <boot/platform.h> 12 13 14 static uint32 15 check_for_key(void) 16 { 17 union key k; 18 if (Bconstat(DEV_CON) == 0) 19 return 0; 20 21 k.d0 = Bconin(DEV_CON); 22 return k.d0; 23 } 24 25 26 extern "C" void 27 clear_key_buffer(void) 28 { 29 while (check_for_key() != 0) 30 ; 31 } 32 33 34 extern "C" union key 35 wait_for_key(void) 36 { 37 union key key; 38 key.d0 = Bconin(DEV_CON); 39 40 return key; 41 } 42 43 44 extern "C" uint32 45 check_for_boot_keys(void) 46 { 47 union key key; 48 uint32 options = 0; 49 50 while ((key.d0 = check_for_key()) != 0) { 51 switch (key.code.ascii) { 52 case ' ': 53 options |= BOOT_OPTION_MENU; 54 break; 55 case 0x1b: // escape 56 options |= BOOT_OPTION_DEBUG_OUTPUT; 57 break; 58 case 0: 59 // evaluate BIOS scan codes 60 // ... 61 break; 62 } 63 } 64 65 dprintf("options = %ld\n", options); 66 return options; 67 } 68 69