Source to bsd/dev/ppc/keyboard.h


Enter a symbol's name here to quickly find it.

/*
 * Copyright (c) 1999 Apple Computer, Inc. All rights reserved.
 *
 * @APPLE_LICENSE_HEADER_START@
 * 
 * "Portions Copyright (c) 1999 Apple Computer, Inc.  All Rights
 * Reserved.  This file contains Original Code and/or Modifications of
 * Original Code as defined in and that are subject to the Apple Public
 * Source License Version 1.0 (the 'License').  You may not use this file
 * except in compliance with the License.  Please obtain a copy of the
 * License at http://www.apple.com/publicsource and read it before using
 * this file.
 * 
 * The Original Code and all software distributed under the License are
 * distributed on an 'AS IS' basis, WITHOUT WARRANTY OF ANY KIND, EITHER
 * EXPRESS OR IMPLIED, AND APPLE HEREBY DISCLAIMS ALL SUCH WARRANTIES,
 * INCLUDING WITHOUT LIMITATION, ANY WARRANTIES OF MERCHANTABILITY,
 * FITNESS FOR A PARTICULAR PURPOSE OR NON-INFRINGEMENT.  Please see the
 * License for the specific language governing rights and limitations
 * under the License."
 * 
 * @APPLE_LICENSE_HEADER_END@
 */

/*
 * Copyright 1996 1995 by Open Software Foundation, Inc. 1997 1996 1995 1994 1993 1992 1991  
 *              All Rights Reserved 
 *  
 * Permission to use, copy, modify, and distribute this software and 
 * its documentation for any purpose and without fee is hereby granted, 
 * provided that the above copyright notice appears in all copies and 
 * that both the copyright notice and this permission notice appear in 
 * supporting documentation. 
 *  
 * OSF DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE 
 * INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS 
 * FOR A PARTICULAR PURPOSE. 
 *  
 * IN NO EVENT SHALL OSF BE LIABLE FOR ANY SPECIAL, INDIRECT, OR 
 * CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM 
 * LOSS OF USE, DATA OR PROFITS, WHETHER IN ACTION OF CONTRACT, 
 * NEGLIGENCE, OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION 
 * WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. 
 * 
 */
/*
 * Copyright 1996 1995 by Apple Computer, Inc. 1997 1996 1995 1994 1993 1992 1991  
 *              All Rights Reserved 
 *  
 * Permission to use, copy, modify, and distribute this software and 
 * its documentation for any purpose and without fee is hereby granted, 
 * provided that the above copyright notice appears in all copies and 
 * that both the copyright notice and this permission notice appear in 
 * supporting documentation. 
 *  
 * APPLE COMPUTER DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE 
 * INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS 
 * FOR A PARTICULAR PURPOSE. 
 *  
 * IN NO EVENT SHALL APPLE COMPUTER BE LIABLE FOR ANY SPECIAL, INDIRECT, OR 
 * CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM 
 * LOSS OF USE, DATA OR PROFITS, WHETHER IN ACTION OF CONTRACT, 
 * NEGLIGENCE, OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION 
 * WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. 
 */
/*
 * MKLINUX-1.0DR2
 */
/*  $NetBSD: keyboard.h,v 1.4 1994/12/03 23:34:32 briggs Exp $  */

/*-
 * Copyright (C) 1993   Allen K. Briggs, Chris P. Caputo,
 *          Michael L. Finch, Bradley A. Grantham, and
 *          Lawrence A. Kesteloot
 * All rights reserved.
 *
 * Redistribution and use in source and binary forms, with or without
 * modification, are permitted provided that the following conditions
 * are met:
 * 1. Redistributions of source code must retain the above copyright
 *    notice, this list of conditions and the following disclaimer.
 * 2. Redistributions in binary form must reproduce the above copyright
 *    notice, this list of conditions and the following disclaimer in the
 *    documentation and/or other materials provided with the distribution.
 * 3. All advertising materials mentioning features or use of this software
 *    must display the following acknowledgement:
 *  This product includes software developed by the Alice Group.
 * 4. The names of the Alice Group or any of its members may not be used
 *    to endorse or promote products derived from this software without
 *    specific prior written permission.
 *
 * THIS SOFTWARE IS PROVIDED BY THE ALICE GROUP ``AS IS'' AND ANY EXPRESS OR
 * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
 * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
 * IN NO EVENT SHALL THE ALICE GROUP BE LIABLE FOR ANY DIRECT, INDIRECT,
 * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
 * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
 * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
 * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
 * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
 */


/* ADB Keyboard Status - ADB Register 2 */

#define ADBKS_LED_NUMLOCK       0x0001
#define ADBKS_LED_CAPSLOCK      0x0002
#define ADBKS_LED_SCROLLLOCK        0x0004
#define ADBKS_SCROLL_LOCK       0x0040
#define ADBKS_NUMLOCK           0x0080
/* Bits 3 to 5 are reserved */
#define ADBKS_APPLE_CMD         0x0100
#define ADBKS_OPTION            0x0200
#define ADBKS_SHIFT         0x0400
#define ADBKS_CONTROL           0x0800
#define ADBKS_CAPSLOCK          0x1000
#define ADBKS_RESET         0x2000
#define ADBKS_DELETE            0x4000
/* bit 16 is reserved */

/* 
 * Special key values
 */

#define ADBK_LEFT   0x3B
#define ADBK_RIGHT  0x3C
#define ADBK_UP     0x3E
#define ADBK_DOWN   0x3D
#define ADBK_PGUP   0x74
#define ADBK_PGDN   0x79
#define ADBK_HOME   0x73
#define ADBK_END    0x77
#define ADBK_CONTROL    0x36
#define ADBK_CONTROL_R  0x7D
#define ADBK_FLOWER 0x37
#define ADBK_SHIFT  0x38
#define ADBK_SHIFT_R    0x7B
#define ADBK_CAPSLOCK   0x39
#define ADBK_OPTION 0x3A
#define ADBK_OPTION_R   0x7C
#define ADBK_NUMLOCK    0x47
#define ADBK_SPACE  0x31
#define ADBK_F      0x03
#define ADBK_O      0x1F
#define ADBK_P      0x23
#define ADBK_Q      0x0C
#define ADBK_V      0x09
#define ADBK_1      0x12
#define ADBK_2      0x13
#define ADBK_3      0x14
#define ADBK_4      0x15
#define ADBK_5      0x17
#define ADBK_6      0x16
#define ADBK_7      0x1A
#define ADBK_8      0x1C
#define ADBK_9      0x19
#define ADBK_0      0x1D
#define ADBK_POWER  0x7f    /* actual 0x7f 0x7f */

#define ADBK_KEYVAL(key)    ((key) & 0x7f)
#define ADBK_PRESS(key)     (((key) & 0x80) == 0)
#define ADBK_KEYDOWN(key)   (key)
#define ADBK_KEYUP(key)     ((key) | 0x80)
#define ADBK_MODIFIER(key)  ((((key) & 0x7f) == ADBK_SHIFT) || \
                 (((key) & 0x7f) == ADBK_SHIFT_R) || \
                 (((key) & 0x7f) == ADBK_CONTROL) || \
                 (((key) & 0x7f) == ADBK_CONTROL_R) || \
                 (((key) & 0x7f) == ADBK_FLOWER) || \
                 (((key) & 0x7f) == ADBK_OPTION) || \
                 (((key) & 0x7f) == ADBK_OPTION_R) || \
                 (((key) & 0x7f) == ADBK_NUMLOCK) || \
                 (((key) & 0x7f) == ADBK_CAPSLOCK))

/* Michel Pollet: small support for different keyboard layout */
#define ADB_KEYMAP_US       0
#define ADB_KEYMAP_FRENCH   1
#define ADB_KEYMAP_GERMAN       2
#define ADB_KEYMAP_MAX      3

#if 0
typedef unsigned char   adb_keymap_t[128][2];

adb_keymap_t keyboard_french = {
        /* Scan code      Normal     Shifted */
    {   /*   0x00, */       'q',       'Q' },//
    {   /*   0x01, */       's',       'S' },
    {   /*   0x02, */       'd',       'D' },
    {   /*   0x03, */       'f',       'F' },
    {   /*   0x04, */       'h',       'H' },
    {   /*   0x05, */       'g',       'G' },
    {   /*   0x06, */       'w',       'W' },//
    {   /*   0x07, */       'x',       'X' },
    {   /*   0x08, */       'c',       'C' },
    {   /*   0x09, */       'v',       'V' },
    {   /*   0x0A, */      0xff,      0xff },
    {   /*   0x0B, */       'b',       'B' },
    {   /*   0x0C, */       'a',       'A' },//
    {   /*   0x0D, */       'z',       'Z' },//
    {   /*   0x0E, */       'e',       'E' },
    {   /*   0x0F, */       'r',       'R' },
    {   /*   0x10, */       'y',       'Y' },
    {   /*   0x11, */       't',       'T' },
    {   /*   0x12, */       '1',       '&' },//
    {   /*   0x13, */       '2',       '{' },//
    {   /*   0x14, */       '3',       '"' },//
    {   /*   0x15, */       '4',       '\'' },//
    {   /*   0x16, */       '6',       '6' },//
    {   /*   0x17, */       '5',       '(' },//
    {   /*   0x18, */       '-',       '_' },//
    {   /*   0x19, */       '9',       'c' },//
    {   /*   0x1A, */       '7',       '}' },//
    {   /*   0x1B, */       ')',       ')' },//
    {   /*   0x1C, */       '8',       '!' },//
    {   /*   0x1D, */       '0',       '@' },//
    {   /*   0x1E, */       '$',       '*' },//
    {   /*   0x1F, */       'o',       'O' },
    {   /*   0x20, */       'u',       'U' },
    {   /*   0x21, */       '^',       '^' },
    {   /*   0x22, */       'i',       'I' },
    {   /*   0x23, */       'p',       'P' },
    {   /*   0x24, */      0x0D,      0x0D },
    {   /*   0x25, */       'l',       'L' },
    {   /*   0x26, */       'j',       'J' },
    {   /*   0x27, */       'u',       '%' },//
    {   /*   0x28, */       'k',       'K' },
    {   /*   0x29, */       'm',       'M' },//
    {   /*   0x2A, */       '`',       '#' },//
    {   /*   0x2B, */       ';',       '.' },//
    {   /*   0x2C, */       '=',       '+' },//
    {   /*   0x2D, */       'n',       'N' },
    {   /*   0x2E, */       ',',       '?' },//
    {   /*   0x2F, */       ':',       '/' },//
    {   /*   0x30, */      0x09,      0x09 },
    {   /*   0x31, */       ' ',       ' ' },
    {   /*   0x32, */       '<',       '>' },
    {   /*   0x33, */      0x7F,      0x7F }, /* Delete */
    {   /*   0x34, */      0xff,      0xff },
    {   /*   0x35, */      0x1B,      0x1B },
    {   /*   0x36, */      0xff,      0xff },
    {   /*   0x37, */      0xff,      0xff },
    {   /*   0x38, */      0xff,      0xff },
    {   /*   0x39, */      0xff,      0xff },
    {   /*   0x3A, */      0xff,      0xff },
    {   /*   0x3B, */       'h',      0xff },
    {   /*   0x3C, */       'l',      0xff },
    {   /*   0x3D, */       'j',      0xff },
    {   /*   0x3E, */       'k',      0xff },
    {   /*   0x3F, */      0xff,      0xff },
    {   /*   0x40, */      0xff,      0xff },
    {   /*   0x41, */       '.',       '.' },
    {   /*   0x42, */      0xff,      0xff },
    {   /*   0x43, */       '*',       '*' },
    {   /*   0x44, */      0xff,      0xff },
    {   /*   0x45, */       '+',       '+' },
    {   /*   0x46, */      0xff,      0xff },
    {   /*   0x47, */      0xff,      0xff },
    {   /*   0x48, */      0xff,      0xff },
    {   /*   0x49, */      0xff,      0xff },
    {   /*   0x4A, */      0xff,      0xff },
    {   /*   0x4B, */       '/',       '/' },
    {   /*   0x4C, */      0x0D,      0x0D },
    {   /*   0x4D, */      0xff,      0xff },
    {   /*   0x4E, */       '-',       '-' },
    {   /*   0x4F, */      0xff,      0xff },
    {   /*   0x50, */      0xff,      0xff },
    {   /*   0x51, */       '=',       '=' },
    {   /*   0x52, */       '0',       '0' },
    {   /*   0x53, */       '1',       '1' },
    {   /*   0x54, */       '2',       '2' },
    {   /*   0x55, */       '3',       '3' },
    {   /*   0x56, */       '4',       '4' },
    {   /*   0x57, */       '5',       '5' },
    {   /*   0x58, */       '6',       '6' },
    {   /*   0x59, */       '7',       '7' },
    {   /*   0x5A, */      0xff,      0xff },
    {   /*   0x5B, */       '8',       '8' },
    {   /*   0x5C, */       '9',       '9' },
    {   /*   0x5D, */      0xff,      0xff },
    {   /*   0x5E, */      0xff,      0xff },
    {   /*   0x5F, */      0xff,      0xff },
    {   /*   0x60, */      0xff,      0xff },
    {   /*   0x61, */      0xff,      0xff },
    {   /*   0x62, */      0xff,      0xff },
    {   /*   0x63, */      0xff,      0xff },
    {   /*   0x64, */      0xff,      0xff },
    {   /*   0x65, */      0xff,      0xff },
    {   /*   0x66, */      0xff,      0xff },
    {   /*   0x67, */      0xff,      0xff },
    {   /*   0x68, */      0xff,      0xff },
    {   /*   0x69, */      0xff,      0xff },
    {   /*   0x6A, */      0xff,      0xff },
    {   /*   0x6B, */      0xff,      0xff },
    {   /*   0x6C, */      0xff,      0xff },
    {   /*   0x6D, */      0xff,      0xff },
    {   /*   0x6E, */      0xff,      0xff },
    {   /*   0x6F, */      0xff,      0xff },
    {   /*   0x70, */      0xff,      0xff },
    {   /*   0x71, */      0xff,      0xff },
    {   /*   0x72, */      0xff,      0xff },
    {   /*   0x73, */      0xff,      0xff },
    {   /*   0x74, */      0xff,      0xff },
    {   /*   0x75, */      0xff,      0xff },
    {   /*   0x76, */      0xff,      0xff },
    {   /*   0x77, */      0xff,      0xff },
    {   /*   0x78, */      0xff,      0xff },
    {   /*   0x79, */      0xff,      0xff },
    {   /*   0x7A, */      0xff,      0xff },
    {   /*   0x7B, */      0xff,      0xff },
    {   /*   0x7C, */      0xff,      0xff },
    {   /*   0x7D, */      0xff,      0xff },
    {   /*   0x7E, */      0xff,      0xff },
    {   /*   0x7F, */      0xff,      0xff }
};

adb_keymap_t keyboard_us = {
        /* Scan code      Normal     Shifted */
    {   /*   0x00, */       'a',       'A' },
    {   /*   0x01, */       's',       'S' },
    {   /*   0x02, */       'd',       'D' },
    {   /*   0x03, */       'f',       'F' },
    {   /*   0x04, */       'h',       'H' },
    {   /*   0x05, */       'g',       'G' },
    {   /*   0x06, */       'z',       'Z' },
    {   /*   0x07, */       'x',       'X' },
    {   /*   0x08, */       'c',       'C' },
    {   /*   0x09, */       'v',       'V' },
    {   /*   0x0A, */      0xff,      0xff },
    {   /*   0x0B, */       'b',       'B' },
    {   /*   0x0C, */       'q',       'Q' },
    {   /*   0x0D, */       'w',       'W' },
    {   /*   0x0E, */       'e',       'E' },
    {   /*   0x0F, */       'r',       'R' },
    {   /*   0x10, */       'y',       'Y' },
    {   /*   0x11, */       't',       'T' },
    {   /*   0x12, */       '1',       '!' },
    {   /*   0x13, */       '2',       '@' },
    {   /*   0x14, */       '3',       '#' },
    {   /*   0x15, */       '4',       '$' },
    {   /*   0x16, */       '6',       '^' },
    {   /*   0x17, */       '5',       '%' },
    {   /*   0x18, */       '=',       '+' },
    {   /*   0x19, */       '9',       '(' },
    {   /*   0x1A, */       '7',       '&' },
    {   /*   0x1B, */       '-',       '_' },
    {   /*   0x1C, */       '8',       '*' },
    {   /*   0x1D, */       '0',       ')' },
    {   /*   0x1E, */       ']',       '}' },
    {   /*   0x1F, */       'o',       'O' },
    {   /*   0x20, */       'u',       'U' },
    {   /*   0x21, */       '[',       '{' },
    {   /*   0x22, */       'i',       'I' },
    {   /*   0x23, */       'p',       'P' },
    {   /*   0x24, */      0x0a,      0x0a },	//SDSD
    {   /*   0x25, */       'l',       'L' },
    {   /*   0x26, */       'j',       'J' },
    {   /*   0x27, */      '\'',       '"' },
    {   /*   0x28, */       'k',       'K' },
    {   /*   0x29, */       ';',       ':' },
    {   /*   0x2A, */      '\\',       '|' },
    {   /*   0x2B, */       ',',       '<' },
    {   /*   0x2C, */       '/',       '?' },
    {   /*   0x2D, */       'n',       'N' },
    {   /*   0x2E, */       'm',       'M' },
    {   /*   0x2F, */       '.',       '>' },
    {   /*   0x30, */      0x09,      0x09 },
    {   /*   0x31, */       ' ',       ' ' },
    {   /*   0x32, */       '`',       '~' },
    {   /*   0x33, */      0x7F,      0x7F }, /* Delete */
    {   /*   0x34, */      0xff,      0xff },
    {   /*   0x35, */      0x1B,      0x1B },
    {   /*   0x36, */      0xff,      0xff },
    {   /*   0x37, */      0xff,      0xff },
    {   /*   0x38, */      0xff,      0xff },
    {   /*   0x39, */      0xff,      0xff },
    {   /*   0x3A, */      0xff,      0xff },
    {   /*   0x3B, */       'h',      0xff },
    {   /*   0x3C, */       'l',      0xff },
    {   /*   0x3D, */       'j',      0xff },
    {   /*   0x3E, */       'k',      0xff },
    {   /*   0x3F, */      0xff,      0xff },
    {   /*   0x40, */      0xff,      0xff },
    {   /*   0x41, */       '.',       '.' },
    {   /*   0x42, */      0xff,      0xff },
    {   /*   0x43, */       '*',       '*' },
    {   /*   0x44, */      0xff,      0xff },
    {   /*   0x45, */       '+',       '+' },
    {   /*   0x46, */      0xff,      0xff },
    {   /*   0x47, */      0xff,      0xff },
    {   /*   0x48, */      0xff,      0xff },
    {   /*   0x49, */      0xff,      0xff },
    {   /*   0x4A, */      0xff,      0xff },
    {   /*   0x4B, */       '/',       '/' },
    {   /*   0x4C, */      0x0D,      0x0D },
    {   /*   0x4D, */      0xff,      0xff },
    {   /*   0x4E, */       '-',       '-' },
    {   /*   0x4F, */      0xff,      0xff },
    {   /*   0x50, */      0xff,      0xff },
    {   /*   0x51, */       '=',       '=' },
    {   /*   0x52, */       '0',       '0' },
    {   /*   0x53, */       '1',       '1' },
    {   /*   0x54, */       '2',       '2' },
    {   /*   0x55, */       '3',       '3' },
    {   /*   0x56, */       '4',       '4' },
    {   /*   0x57, */       '5',       '5' },
    {   /*   0x58, */       '6',       '6' },
    {   /*   0x59, */       '7',       '7' },
    {   /*   0x5A, */      0xff,      0xff },
    {   /*   0x5B, */       '8',       '8' },
    {   /*   0x5C, */       '9',       '9' },
    {   /*   0x5D, */      0xff,      0xff },
    {   /*   0x5E, */      0xff,      0xff },
    {   /*   0x5F, */      0xff,      0xff },
    {   /*   0x60, */      0xff,      0xff },
    {   /*   0x61, */      0xff,      0xff },
    {   /*   0x62, */      0xff,      0xff },
    {   /*   0x63, */      0xff,      0xff },
    {   /*   0x64, */      0xff,      0xff },
    {   /*   0x65, */      0xff,      0xff },
    {   /*   0x66, */      0xff,      0xff },
    {   /*   0x67, */      0xff,      0xff },
    {   /*   0x68, */      0xff,      0xff },
    {   /*   0x69, */      0xff,      0xff },
    {   /*   0x6A, */      0xff,      0xff },
    {   /*   0x6B, */      0xff,      0xff },
    {   /*   0x6C, */      0xff,      0xff },
    {   /*   0x6D, */      0xff,      0xff },
    {   /*   0x6E, */      0xff,      0xff },
    {   /*   0x6F, */      0xff,      0xff },
    {   /*   0x70, */      0xff,      0xff },
    {   /*   0x71, */      0xff,      0xff },
    {   /*   0x72, */      0xff,      0xff },
    {   /*   0x73, */      0xff,      0xff },
    {   /*   0x74, */      0xff,      0xff },
    {   /*   0x75, */      0xff,      0xff },
    {   /*   0x76, */      0xff,      0xff },
    {   /*   0x77, */      0xff,      0xff },
    {   /*   0x78, */      0xff,      0xff },
    {   /*   0x79, */      0xff,      0xff },
    {   /*   0x7A, */      0xff,      0xff },
    {   /*   0x7B, */      0xff,      0xff },
    {   /*   0x7C, */      0xff,      0xff },
    {   /*   0x7D, */      0xff,      0xff },
    {   /*   0x7E, */      0xff,      0xff },
    {   /*   0x7F, */      0xff,      0xff }
};



adb_keymap_t keyboard_german = {
        /* Scan code      Normal     Shifted */
    {   /*   0x00, */       'a',       'A' },
    {   /*   0x01, */       's',       'S' },
    {   /*   0x02, */       'd',       'D' },
    {   /*   0x03, */       'f',       'F' },
    {   /*   0x04, */       'h',       'H' },
    {   /*   0x05, */       'g',       'G' },
    {   /*   0x06, */       'y',       'Y' },
    {   /*   0x07, */       'x',       'X' },
    {   /*   0x08, */       'c',       'C' },
    {   /*   0x09, */       'v',       'V' },
    {   /*   0x0A, */       '^',       '~' },
    {   /*   0x0B, */       'b',       'B' },
    {   /*   0x0C, */       'q',       'Q' },
    {   /*   0x0D, */       'w',       'W' },
    {   /*   0x0E, */       'e',       'E' },
    {   /*   0x0F, */       'r',       'R' },
    {   /*   0x10, */       'z',       'Z' },
    {   /*   0x11, */       't',       'T' },
    {   /*   0x12, */       '1',       '!' },
    {   /*   0x13, */       '2',       '"' },
    {   /*   0x14, */       '3',       '@' },
    {   /*   0x15, */       '4',       '$' },
    {   /*   0x16, */       '6',       '&' },
    {   /*   0x17, */       '5',       '%' },
    {   /*   0x18, */       '~',       '`' },
    {   /*   0x19, */       '9',       ')' },
    {   /*   0x1A, */       '7',       '/' },
    {   /*   0x1B, */       '^',       '?' },
    {   /*   0x1C, */       '8',       '(' },
    {   /*   0x1D, */       '0',       '=' },
    {   /*   0x1E, */       '+',       '*' },
    {   /*   0x1F, */       'o',       'O' },
    {   /*   0x20, */       'u',       'U' },
    {   /*   0x21, */      '\\',       '|' },
    {   /*   0x22, */       'i',       'I' },
    {   /*   0x23, */       'p',       'P' },
    {   /*   0x24, */      0x0D,      0x0D },
    {   /*   0x25, */       'l',       'L' },
    {   /*   0x26, */       'j',       'J' },
    {   /*   0x27, */       ']',       '}' },
    {   /*   0x28, */       'k',       'K' },
    {   /*   0x29, */       '[',       '{' },
    {   /*   0x2A, */       '#',      '\'' },
    {   /*   0x2B, */       ',',       ';' },
    {   /*   0x2C, */       '-',       '_' },
    {   /*   0x2D, */       'n',       'N' },
    {   /*   0x2E, */       'm',       'M' },
    {   /*   0x2F, */       '.',       ':' },
    {   /*   0x30, */      0x09,      0x09 },
    {   /*   0x31, */       ' ',       ' ' },
    {   /*   0x32, */       '<',       '>' },
    {   /*   0x33, */      0x7F,      0x7F }, /* Delete */
    {   /*   0x34, */      0xff,      0xff },
    {   /*   0x35, */      0x1B,      0x1B },
    {   /*   0x36, */      0xff,      0xff },
    {   /*   0x37, */      0xff,      0xff },
    {   /*   0x38, */      0xff,      0xff },
    {   /*   0x39, */      0xff,      0xff },
    {   /*   0x3A, */      0xff,      0xff },
    {   /*   0x3B, */       'h',      0xff },
    {   /*   0x3C, */       'l',      0xff },
    {   /*   0x3D, */       'j',      0xff },
    {   /*   0x3E, */       'k',      0xff },
    {   /*   0x3F, */      0xff,      0xff },
    {   /*   0x40, */      0xff,      0xff },
    {   /*   0x41, */       '.',       '.' },
    {   /*   0x42, */      0xff,      0xff },
    {   /*   0x43, */       '*',       '*' },
    {   /*   0x44, */      0xff,      0xff },
    {   /*   0x45, */       '+',       '+' },
    {   /*   0x46, */      0xff,      0xff },
    {   /*   0x47, */      0xff,      0xff },
    {   /*   0x48, */      0xff,      0xff },
    {   /*   0x49, */      0xff,      0xff },
    {   /*   0x4A, */      0xff,      0xff },
    {   /*   0x4B, */       '/',       '/' },
    {   /*   0x4C, */      0x0D,      0x0D },
    {   /*   0x4D, */      0xff,      0xff },
    {   /*   0x4E, */       '-',       '-' },
    {   /*   0x4F, */      0xff,      0xff },
    {   /*   0x50, */      0xff,      0xff },
    {   /*   0x51, */       '=',       '=' },
    {   /*   0x52, */       '0',       '0' },
    {   /*   0x53, */       '1',       '1' },
    {   /*   0x54, */       '2',       '2' },
    {   /*   0x55, */       '3',       '3' },
    {   /*   0x56, */       '4',       '4' },
    {   /*   0x57, */       '5',       '5' },
    {   /*   0x58, */       '6',       '6' },
    {   /*   0x59, */       '7',       '7' },
    {   /*   0x5A, */      0xff,      0xff },
    {   /*   0x5B, */       '8',       '8' },
    {   /*   0x5C, */       '9',       '9' },
    {   /*   0x5D, */      0xff,      0xff },
    {   /*   0x5E, */      0xff,      0xff },
    {   /*   0x5F, */      0xff,      0xff },
    {   /*   0x60, */      0xff,      0xff },
    {   /*   0x61, */      0xff,      0xff },
    {   /*   0x62, */      0xff,      0xff },
    {   /*   0x63, */      0xff,      0xff },
    {   /*   0x64, */      0xff,      0xff },
    {   /*   0x65, */      0xff,      0xff },
    {   /*   0x66, */      0xff,      0xff },
    {   /*   0x67, */      0xff,      0xff },
    {   /*   0x68, */      0xff,      0xff },
    {   /*   0x69, */      0xff,      0xff },
    {   /*   0x6A, */      0xff,      0xff },
    {   /*   0x6B, */      0xff,      0xff },
    {   /*   0x6C, */      0xff,      0xff },
    {   /*   0x6D, */      0xff,      0xff },
    {   /*   0x6E, */      0xff,      0xff },
    {   /*   0x6F, */      0xff,      0xff },
    {   /*   0x70, */      0xff,      0xff },
    {   /*   0x71, */      0xff,      0xff },
    {   /*   0x72, */      0xff,      0xff },
    {   /*   0x73, */      0xff,      0xff },
    {   /*   0x74, */      0xff,      0xff },
    {   /*   0x75, */      0xff,      0xff },
    {   /*   0x76, */      0xff,      0xff },
    {   /*   0x77, */      0xff,      0xff },
    {   /*   0x78, */      0xff,      0xff },
    {   /*   0x79, */      0xff,      0xff },
    {   /*   0x7A, */      0xff,      0xff },
    {   /*   0x7B, */      0xff,      0xff },
    {   /*   0x7C, */      0xff,      0xff },
    {   /*   0x7D, */      0xff,      0xff },
    {   /*   0x7E, */      0xff,      0xff },
    {   /*   0x7F, */      0xff,      0xff }
};

#endif