summaryrefslogtreecommitdiffstats
path: root/c/src/lib/libbsp/i386/pc386/console/inch.c
diff options
context:
space:
mode:
Diffstat (limited to 'c/src/lib/libbsp/i386/pc386/console/inch.c')
-rw-r--r--c/src/lib/libbsp/i386/pc386/console/inch.c300
1 files changed, 0 insertions, 300 deletions
diff --git a/c/src/lib/libbsp/i386/pc386/console/inch.c b/c/src/lib/libbsp/i386/pc386/console/inch.c
deleted file mode 100644
index f5d5079236..0000000000
--- a/c/src/lib/libbsp/i386/pc386/console/inch.c
+++ /dev/null
@@ -1,300 +0,0 @@
-/*-------------------------------------------------------------------------+
-| inch.c v1.1 - PC386 BSP - 1997/08/07
-+--------------------------------------------------------------------------+
-| (C) Copyright 1997 -
-| - NavIST Group - Real-Time Distributed Systems and Industrial Automation
-|
-| http://pandora.ist.utl.pt
-|
-| Instituto Superior Tecnico * Lisboa * PORTUGAL
-+--------------------------------------------------------------------------+
-| Disclaimer:
-|
-| This file is provided "AS IS" without warranty of any kind, either
-| expressed or implied.
-+--------------------------------------------------------------------------+
-| This code is based on:
-| inch.c,v 1.3 1995/12/19 20:07:25 joel Exp - go32 BSP
-| With the following copyright notice:
-| With the following copyright notice:
-| **************************************************************************
-| * COPYRIGHT (c) 1989-1998.
-| * On-Line Applications Research Corporation (OAR).
-| *
-| * The license and distribution terms for this file may be
-| * found in the file LICENSE in this distribution or at
-| * http://www.rtems.org/license/LICENSE.
-| **************************************************************************
-+--------------------------------------------------------------------------*/
-
-#include <bsp.h>
-#include <bsp/bootcard.h>
-#include <bsp/irq.h>
-
-/*-------------------------------------------------------------------------+
-| Constants
-+--------------------------------------------------------------------------*/
-#define KBD_CTL 0x61 /* -------------------------------- */
-#define KBD_DATA 0x60 /* Ports for PC keyboard controller */
-#define KBD_STATUS 0x64 /* -------------------------------- */
-
-#define KBD_BUF_SIZE 256
-
-/*-------------------------------------------------------------------------+
-| Global Variables
-+--------------------------------------------------------------------------*/
-static char key_map[] =
-{
- 0,033,'1','2','3','4','5','6','7','8','9','0','-','=','\b','\t',
- 'q','w','e','r','t','y','u','i','o','p','[',']',015,0x80,
- 'a','s','d','f','g','h','j','k','l',';',047,0140,0x80,
- 0134,'z','x','c','v','b','n','m',',','.','/',0x80,
- '*',0x80,' ',0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,
- 0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,
- 0x80,0x80,0x80,'0',0177
-}; /* Keyboard scancode -> character map with no modifiers. */
-
-static char shift_map[] =
-{
- 0,033,'!','@','#','$','%','^','&','*','(',')','_','+','\b','\t',
- 'Q','W','E','R','T','Y','U','I','O','P','{','}',015,0x80,
- 'A','S','D','F','G','H','J','K','L',':',042,'~',0x80,
- '|','Z','X','C','V','B','N','M','<','>','?',0x80,
- '*',0x80,' ',0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,
- 0x80,0x80,0x80,0x80,'7','8','9',0x80,'4','5','6',0x80,
- '1','2','3','0',177
-}; /* Keyboard scancode -> character map with SHIFT key modifier. */
-
-static unsigned short kbd_buffer[KBD_BUF_SIZE];
-static uint16_t kbd_first = 0;
-static uint16_t kbd_last = 0;
-static uint16_t kbd_end = KBD_BUF_SIZE - 1;
-
-/*-------------------------------------------------------------------------+
-| Function: _IBMPC_scankey
-| Description: This function can be called during a poll for input, or by
-| an ISR. Basically any time you want to process a keypress.
-| Global Variables: key_map, shift_map.
-| Arguments: outChar - character read in case of a valid reading,
-| otherwise unchanged.
-| Returns: TRUE in case a valid character has been read,
-| FALSE otherwise.
-+--------------------------------------------------------------------------*/
-static bool
-_IBMPC_scankey(char *outChar)
-{
- unsigned char inChar;
- static int alt_pressed = 0;
- static int ctrl_pressed = 0;
- static int shift_pressed = 0;
- static int caps_pressed = 0;
- static int extended = 0;
-
- *outChar = '\0'; /* default value if we return false */
-
- /* Read keyboard controller, toggle enable */
- inport_byte(KBD_CTL, inChar);
- outport_byte(KBD_CTL, inChar & ~0x80);
- outport_byte(KBD_CTL, inChar | 0x80);
- outport_byte(KBD_CTL, inChar & ~0x80);
-
- /* See if it has data */
- inport_byte(KBD_STATUS, inChar);
- if ((inChar & 0x01) == 0)
- return false;
-
- /* Read the data. Handle nonsense with shift, control, etc. */
- inport_byte(KBD_DATA, inChar);
-
- if (extended)
- extended--;
-
- switch (inChar)
- {
- case 0xe0:
- extended = 2;
- return false;
- break;
-
- case 0x38:
- alt_pressed = 1;
- return false;
- break;
- case 0xb8:
- alt_pressed = 0;
- return false;
- break;
-
- case 0x1d:
- ctrl_pressed = 1;
- return false;
- break;
- case 0x9d:
- ctrl_pressed = 0;
- return false;
- break;
-
- case 0x2a:
- if (extended)
- return false;
- case 0x36:
- shift_pressed = 1;
- return false;
- break;
- case 0xaa:
- if (extended)
- return false;
- case 0xb6:
- shift_pressed = 0;
- return false;
- break;
-
- case 0x3a:
- caps_pressed = 1;
- return false;
- break;
- case 0xba:
- caps_pressed = 0;
- return false;
- break;
-
- case 0x53:
- if (ctrl_pressed && alt_pressed)
- bsp_reset(); /* ctrl+alt+del -> reboot */
- break;
-
- /*
- * Ignore unrecognized keys--usually arrow and such
- */
- default:
- if ((inChar & 0x80) || (inChar > 0x39))
- /* High-bit on means key is being released, not pressed */
- return false;
- break;
- } /* switch */
-
- /* Strip high bit, look up in our map */
- inChar &= 0x7f;
- if (ctrl_pressed)
- {
- *outChar = key_map[inChar];
- *outChar &= 037;
- }
- else
- {
- *outChar = shift_pressed ? shift_map[inChar] : key_map[inChar];
- if (caps_pressed)
- {
- if (*outChar >= 'A' && *outChar <= 'Z')
- *outChar += 'a' - 'A';
- else if (*outChar >= 'a' && *outChar <= 'z')
- *outChar -= 'a' - 'A';
- }
- }
-
- return true;
-} /* _IBMPC_scankey */
-
-/*-------------------------------------------------------------------------+
-| Function: _IBMPC_chrdy
-| Description: Check keyboard ISR buffer and return character if not empty.
-| Global Variables: kbd_buffer, kbd_first, kbd_last.
-| Arguments: c - character read if keyboard buffer not empty, otherwise
-| unchanged.
-| Returns: TRUE if keyboard buffer not empty, FALSE otherwise.
-+--------------------------------------------------------------------------*/
-static bool
-_IBMPC_chrdy(char *c)
-{
-#if CCJ_REMOVED_NO_IDEA_ABOUT_THIS_CODE_OR_COMMENT
- /* FIX ME!!! It doesn't work without something like the following line.
- Find out why! */
- printk("");
-#endif
-
- /* Check buffer our ISR builds */
- if (kbd_first != kbd_last)
- {
- *c = kbd_buffer[kbd_first];
-
- kbd_first = (kbd_first + 1) % KBD_BUF_SIZE;
- return true;
- }
- else
- return false;
-} /* _IBMPC_chrdy */
-
-/*-------------------------------------------------------------------------+
-| Function: _IBMPC_inch
-| Description: Poll keyboard until a character is ready and return it.
-| Global Variables: None.
-| Arguments: None.
-| Returns: character read from keyboard.
-+--------------------------------------------------------------------------*/
-char
-_IBMPC_inch(void)
-{
- char c;
- while (!_IBMPC_chrdy(&c))
- continue;
-
- return c;
-} /* _IBMPC_inch */
-
-/*
- * Routine that can be used before interrupt management is initialized.
- */
-int BSP_wait_polled_input(void)
-{
- char c;
- while (!_IBMPC_scankey(&c))
- continue;
-
- return c;
-}
-
-/*
- * Check if a key has been pressed. This is a non-destructive
- * call, meaning, it keeps the key in the buffer.
- */
-int rtems_kbpoll( void )
-{
- int rc;
-
- /*
- * The locking or disable of interrupts does not help
- * there because if interrupts are enabled after leave of this
- * function the state can change without notice anyway.
- */
- RTEMS_COMPILER_MEMORY_BARRIER();
-
- rc = ( kbd_first != kbd_last ) ? TRUE : FALSE;
-
- RTEMS_COMPILER_MEMORY_BARRIER();
-
- return rc;
-}
-
-int getch( void )
-{
- int c;
-
- while( kbd_first == kbd_last )
- {
- rtems_task_wake_after( 10 );
- }
- c = kbd_buffer[ kbd_first ];
- kbd_first = (kbd_first + 1) % KBD_BUF_SIZE;
- return c;
-}
-
-void add_to_queue( unsigned short b )
-{
- unsigned int next;
- kbd_buffer[ kbd_last ] = b;
- next = (kbd_last == kbd_end) ? 0 : kbd_last + 1;
- if( next != kbd_first )
- {
- kbd_last = next;
- }
-}