|
|
1.1 ! root 1: /* ! 2: * Copyright (c) 1988 University of Utah. ! 3: * Copyright (c) 1990 The Regents of the University of California. ! 4: * All rights reserved. ! 5: * ! 6: * This code is derived from software contributed to Berkeley by ! 7: * the Systems Programming Group of the University of Utah Computer ! 8: * Science Department. ! 9: * ! 10: * Redistribution and use in source and binary forms, with or without ! 11: * modification, are permitted provided that the following conditions ! 12: * are met: ! 13: * 1. Redistributions of source code must retain the above copyright ! 14: * notice, this list of conditions and the following disclaimer. ! 15: * 2. Redistributions in binary form must reproduce the above copyright ! 16: * notice, this list of conditions and the following disclaimer in the ! 17: * documentation and/or other materials provided with the distribution. ! 18: * 3. All advertising materials mentioning features or use of this software ! 19: * must display the following acknowledgement: ! 20: * This product includes software developed by the University of ! 21: * California, Berkeley and its contributors. ! 22: * 4. Neither the name of the University nor the names of its contributors ! 23: * may be used to endorse or promote products derived from this software ! 24: * without specific prior written permission. ! 25: * ! 26: * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND ! 27: * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE ! 28: * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ! 29: * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE ! 30: * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL ! 31: * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS ! 32: * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) ! 33: * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT ! 34: * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY ! 35: * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF ! 36: * SUCH DAMAGE. ! 37: * ! 38: * from: Utah $Hdr: hil.c 1.1 89/08/22$ ! 39: * ! 40: * @(#)hil.c 7.2 (Berkeley) 12/16/90 ! 41: */ ! 42: ! 43: /* ! 44: * Keyboard routines for the standalone ITE. ! 45: */ ! 46: #include "samachdep.h" ! 47: ! 48: #ifdef ITECONSOLE ! 49: ! 50: #include "sys/param.h" ! 51: #include "../dev/hilreg.h" ! 52: #include "../dev/kbdmap.h" ! 53: #include "../dev/itevar.h" ! 54: ! 55: #ifndef SMALL ! 56: ! 57: /* ! 58: * HIL cooked keyboard keymaps. ! 59: * Supports only unshifted, shifted and control keys. ! 60: */ ! 61: char us_keymap[] = { ! 62: NULL, '`', '\\', ESC, NULL, DEL, NULL, NULL, ! 63: '\n', '\t', NULL, NULL, NULL, NULL, NULL, NULL, ! 64: NULL, '\n', NULL, NULL, NULL, NULL, NULL, NULL, ! 65: NULL, '\t', NULL, NULL, NULL, NULL, NULL, NULL, ! 66: NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, ! 67: NULL, NULL, NULL, NULL, NULL, NULL, '\b', NULL, ! 68: NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, ! 69: ESC, '\r', NULL, '\n', '0', '.', ',', '+', ! 70: '1', '2', '3', '-', '4', '5', '6', '*', ! 71: '7', '8', '9', '/', 'E', '(', ')', '^', ! 72: '1', '2', '3', '4', '5', '6', '7', '8', ! 73: '9', '0', '-', '=', '[', ']', ';', '\'', ! 74: ',', '.', '/', '\040', 'o', 'p', 'k', 'l', ! 75: 'q', 'w', 'e', 'r', 't', 'y', 'u', 'i', ! 76: 'a', 's', 'd', 'f', 'g', 'h', 'j', 'm', ! 77: 'z', 'x', 'c', 'v', 'b', 'n', NULL, NULL ! 78: }; ! 79: ! 80: char us_shiftmap[] = { ! 81: NULL, '~', '|', DEL, NULL, DEL, NULL, NULL, ! 82: '\n', '\t', NULL, NULL, NULL, NULL, NULL, NULL, ! 83: NULL, '\n', NULL, NULL, NULL, NULL, NULL, NULL, ! 84: NULL, '\t', NULL, NULL, NULL, NULL, NULL, NULL, ! 85: NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, ! 86: NULL, NULL, NULL, NULL, NULL, NULL, DEL, NULL, ! 87: NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, ! 88: ESC, '\r', NULL, '\n', '0', '.', ',', '+', ! 89: '1', '2', '3', '-', '4', '5', '6', '*', ! 90: '7', '8', '9', '/', '`', '|', '\\', '~', ! 91: '!', '@', '#', '$', '%', '^', '&', '*', ! 92: '(', ')', '_', '+', '{', '}', ':', '\"', ! 93: '<', '>', '?', '\040', 'O', 'P', 'K', 'L', ! 94: 'Q', 'W', 'E', 'R', 'T', 'Y', 'U', 'I', ! 95: 'A', 'S', 'D', 'F', 'G', 'H', 'J', 'M', ! 96: 'Z', 'X', 'C', 'V', 'B', 'N', NULL, NULL ! 97: }; ! 98: ! 99: char us_ctrlmap[] = { ! 100: NULL, '`', '\034', ESC, NULL, DEL, NULL, NULL, ! 101: '\n', '\t', NULL, NULL, NULL, NULL, NULL, NULL, ! 102: NULL, '\n', NULL, NULL, NULL, NULL, NULL, NULL, ! 103: NULL, '\t', NULL, NULL, NULL, NULL, NULL, NULL, ! 104: NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, ! 105: NULL, NULL, NULL, NULL, NULL, NULL, '\b', NULL, ! 106: NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, ! 107: ESC, '\r', NULL, '\n', '0', '.', ',', '+', ! 108: '1', '2', '3', '-', '4', '5', '6', '*', ! 109: '7', '8', '9', '/', 'E', '(', ')', '\036', ! 110: '1', '2', '3', '4', '5', '6', '7', '8', ! 111: '9', '0', '-', '=', '\033', '\035', ';', '\'', ! 112: ',', '.', '/', '\040', '\017', '\020', '\013', '\014', ! 113: '\021', '\027', '\005', '\022', '\024', '\031', '\025', '\011', ! 114: '\001', '\023', '\004', '\006', '\007', '\010', '\012', '\015', ! 115: '\032', '\030', '\003', '\026', '\002', '\016', NULL, NULL ! 116: }; ! 117: ! 118: #ifdef UK_KEYBOARD ! 119: char uk_keymap[] = { ! 120: NULL, '`', '<', ESC, NULL, DEL, NULL, NULL, ! 121: '\n', '\t', NULL, NULL, NULL, NULL, NULL, NULL, ! 122: NULL, '\n', NULL, NULL, NULL, NULL, NULL, NULL, ! 123: NULL, '\t', NULL, NULL, NULL, NULL, NULL, NULL, ! 124: NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, ! 125: NULL, NULL, NULL, NULL, NULL, NULL, '\b', NULL, ! 126: NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, ! 127: ESC, '\r', NULL, '\n', '0', '.', ',', '+', ! 128: '1', '2', '3', '-', '4', '5', '6', '*', ! 129: '7', '8', '9', '/', 'E', '(', ')', '^', ! 130: '1', '2', '3', '4', '5', '6', '7', '8', ! 131: '9', '0', '+', '\'', '[', ']', '*', '\\', ! 132: ',', '.', '-', '\040', 'o', 'p', 'k', 'l', ! 133: 'q', 'w', 'e', 'r', 't', 'y', 'u', 'i', ! 134: 'a', 's', 'd', 'f', 'g', 'h', 'j', 'm', ! 135: 'z', 'x', 'c', 'v', 'b', 'n', NULL, NULL ! 136: }; ! 137: ! 138: char uk_shiftmap[] = { ! 139: NULL, '~', '>', DEL, NULL, DEL, NULL, NULL, ! 140: '\n', '\t', NULL, NULL, NULL, NULL, NULL, NULL, ! 141: NULL, '\n', NULL, NULL, NULL, NULL, NULL, NULL, ! 142: NULL, '\t', NULL, NULL, NULL, NULL, NULL, NULL, ! 143: NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, ! 144: NULL, NULL, NULL, NULL, NULL, NULL, DEL, NULL, ! 145: NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, ! 146: ESC, '\r', NULL, '\n', '0', '.', ',', '+', ! 147: '1', '2', '3', '-', '4', '5', '6', '*', ! 148: '7', '8', '9', '/', '`', '|', '\\', '~', ! 149: '!', '\"', '#', '$', '%', '&', '^', '(', ! 150: ')', '=', '?', '/', '{', '}', '@', '|', ! 151: ';', ':', '_', '\040', 'O', 'P', 'K', 'L', ! 152: 'Q', 'W', 'E', 'R', 'T', 'Y', 'U', 'I', ! 153: 'A', 'S', 'D', 'F', 'G', 'H', 'J', 'M', ! 154: 'Z', 'X', 'C', 'V', 'B', 'N', NULL, NULL ! 155: }; ! 156: ! 157: char uk_ctrlmap[] = { ! 158: NULL, '`', '<', ESC, NULL, DEL, NULL, NULL, ! 159: '\n', '\t', NULL, NULL, NULL, NULL, NULL, NULL, ! 160: NULL, '\n', NULL, NULL, NULL, NULL, NULL, NULL, ! 161: NULL, '\t', NULL, NULL, NULL, NULL, NULL, NULL, ! 162: NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, ! 163: NULL, NULL, NULL, NULL, NULL, NULL, '\b', NULL, ! 164: NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, ! 165: ESC, '\r', NULL, '\n', '0', '.', ',', '+', ! 166: '1', '2', '3', '-', '4', '5', '6', '*', ! 167: '7', '8', '9', '/', 'E', '(', ')', '\036', ! 168: '1', '2', '3', '4', '5', '6', '7', '8', ! 169: '9', '0', '+', '\'', '\033', '\035', '*', '\034', ! 170: ',', '.', '/', '\040', '\017', '\020', '\013', '\014', ! 171: '\021', '\027', '\005', '\022', '\024', '\031', '\025', '\011', ! 172: '\001', '\023', '\004', '\006', '\007', '\010', '\012', '\015', ! 173: '\032', '\030', '\003', '\026', '\002', '\016', NULL, NULL ! 174: }; ! 175: #endif ! 176: ! 177: /* ! 178: * The keyboard map table. ! 179: * Lookup is by hardware returned language code. ! 180: */ ! 181: struct kbdmap kbd_map[] = { ! 182: KBD_US, NULL, ! 183: us_keymap, us_shiftmap, us_ctrlmap, NULL, NULL, ! 184: ! 185: #ifdef UK_KEYBOARD ! 186: KBD_UK, NULL, ! 187: uk_keymap, uk_shiftmap, uk_ctrlmap, NULL, NULL, ! 188: #endif ! 189: ! 190: 0, NULL, ! 191: NULL, NULL, NULL, NULL, NULL, ! 192: }; ! 193: ! 194: char *kbd_keymap = us_keymap; ! 195: char *kbd_shiftmap = us_shiftmap; ! 196: char *kbd_ctrlmap = us_ctrlmap; ! 197: ! 198: kbdgetc() ! 199: { ! 200: register int status, c; ! 201: register struct hil_dev *hiladdr = HILADDR; ! 202: ! 203: status = hiladdr->hil_stat; ! 204: if ((status & HIL_DATA_RDY) == 0) ! 205: return(0); ! 206: c = hiladdr->hil_data; ! 207: switch ((status>>KBD_SSHIFT) & KBD_SMASK) { ! 208: case KBD_SHIFT: ! 209: c = kbd_shiftmap[c & KBD_CHARMASK]; ! 210: break; ! 211: case KBD_CTRL: ! 212: c = kbd_ctrlmap[c & KBD_CHARMASK]; ! 213: break; ! 214: case KBD_KEY: ! 215: c = kbd_keymap[c & KBD_CHARMASK]; ! 216: break; ! 217: default: ! 218: c = 0; ! 219: break; ! 220: } ! 221: return(c); ! 222: } ! 223: #endif ! 224: ! 225: kbdnmi() ! 226: { ! 227: register struct hil_dev *hiladdr = HILADDR; ! 228: ! 229: HILWAIT(hiladdr); ! 230: hiladdr->hil_cmd = HIL_CNMT; ! 231: HILWAIT(hiladdr); ! 232: hiladdr->hil_cmd = HIL_CNMT; ! 233: HILWAIT(hiladdr); ! 234: printf("\nboot interrupted\n"); ! 235: } ! 236: ! 237: kbdinit() ! 238: { ! 239: register struct hil_dev *hiladdr = HILADDR; ! 240: register struct kbdmap *km; ! 241: u_char lang; ! 242: ! 243: HILWAIT(hiladdr); ! 244: hiladdr->hil_cmd = HIL_SETARR; ! 245: HILWAIT(hiladdr); ! 246: hiladdr->hil_data = ar_format(KBD_ARR); ! 247: HILWAIT(hiladdr); ! 248: hiladdr->hil_cmd = HIL_READKBDLANG; ! 249: HILDATAWAIT(hiladdr); ! 250: lang = hiladdr->hil_data; ! 251: for (km = kbd_map; km->kbd_code; km++) ! 252: if (km->kbd_code == lang) { ! 253: kbd_keymap = km->kbd_keymap; ! 254: kbd_shiftmap = km->kbd_shiftmap; ! 255: kbd_ctrlmap = km->kbd_ctrlmap; ! 256: } ! 257: HILWAIT(hiladdr); ! 258: hiladdr->hil_cmd = HIL_INTON; ! 259: } ! 260: #endif
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.