Annotation of sys/arch/hp300/stand/common/hil.c, Revision 1.1.1.1
1.1 nbrk 1: /* $OpenBSD: hil.c,v 1.6 2006/08/17 06:31:10 miod Exp $ */
2: /* $NetBSD: hil.c,v 1.2 1997/04/14 19:00:10 thorpej Exp $ */
3:
4: /*
5: * Copyright (c) 1997 Jason R. Thorpe. All rights reserved.
6: * Copyright (c) 1988 University of Utah.
7: * Copyright (c) 1990, 1993
8: * The Regents of the University of California. All rights reserved.
9: *
10: * This code is derived from software contributed to Berkeley by
11: * the Systems Programming Group of the University of Utah Computer
12: * Science Department.
13: *
14: * Redistribution and use in source and binary forms, with or without
15: * modification, are permitted provided that the following conditions
16: * are met:
17: * 1. Redistributions of source code must retain the above copyright
18: * notice, this list of conditions and the following disclaimer.
19: * 2. Redistributions in binary form must reproduce the above copyright
20: * notice, this list of conditions and the following disclaimer in the
21: * documentation and/or other materials provided with the distribution.
22: * 3. 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 8.1 (Berkeley) 6/10/93
41: */
42:
43: /*
44: * HIL keyboard routines for the standalone ITE.
45: */
46:
47: #if defined(ITECONSOLE) && defined(HIL_KEYBOARD)
48:
49: #include <lib/libsa/stand.h>
50:
51: #include "samachdep.h"
52: #include "hilreg.h"
53: #include "itevar.h"
54: #include "kbdvar.h"
55:
56: #ifndef SMALL
57:
58: #define ESC '\033'
59: #define DEL '\177'
60:
61: /*
62: * HIL cooked keyboard keymaps.
63: * Supports only unshifted, shifted and control keys.
64: */
65: char hilkbd_keymap[] = {
66: NULL, '`', '\\', ESC, NULL, DEL, NULL, NULL,
67: '\n', '\t', NULL, NULL, NULL, NULL, NULL, NULL,
68: NULL, '\n', NULL, NULL, NULL, NULL, NULL, NULL,
69: NULL, '\t', NULL, NULL, NULL, NULL, NULL, NULL,
70: NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
71: NULL, NULL, NULL, NULL, NULL, NULL, '\b', NULL,
72: NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
73: ESC, '\r', NULL, '\n', '0', '.', ',', '+',
74: '1', '2', '3', '-', '4', '5', '6', '*',
75: '7', '8', '9', '/', 'E', '(', ')', '^',
76: '1', '2', '3', '4', '5', '6', '7', '8',
77: '9', '0', '-', '=', '[', ']', ';', '\'',
78: ',', '.', '/', '\040', 'o', 'p', 'k', 'l',
79: 'q', 'w', 'e', 'r', 't', 'y', 'u', 'i',
80: 'a', 's', 'd', 'f', 'g', 'h', 'j', 'm',
81: 'z', 'x', 'c', 'v', 'b', 'n', NULL, NULL
82: };
83:
84: char hilkbd_shiftmap[] = {
85: NULL, '~', '|', DEL, NULL, DEL, NULL, NULL,
86: '\n', '\t', NULL, NULL, NULL, NULL, NULL, NULL,
87: NULL, '\n', NULL, NULL, NULL, NULL, NULL, NULL,
88: NULL, '\t', NULL, NULL, NULL, NULL, NULL, NULL,
89: NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
90: NULL, NULL, NULL, NULL, NULL, NULL, DEL, NULL,
91: NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
92: ESC, '\r', NULL, '\n', '0', '.', ',', '+',
93: '1', '2', '3', '-', '4', '5', '6', '*',
94: '7', '8', '9', '/', '`', '|', '\\', '~',
95: '!', '@', '#', '$', '%', '^', '&', '*',
96: '(', ')', '_', '+', '{', '}', ':', '\"',
97: '<', '>', '?', '\040', 'O', 'P', 'K', 'L',
98: 'Q', 'W', 'E', 'R', 'T', 'Y', 'U', 'I',
99: 'A', 'S', 'D', 'F', 'G', 'H', 'J', 'M',
100: 'Z', 'X', 'C', 'V', 'B', 'N', NULL, NULL
101: };
102:
103: char hilkbd_ctrlmap[] = {
104: NULL, '`', '\034', ESC, NULL, DEL, NULL, NULL,
105: '\n', '\t', NULL, NULL, NULL, NULL, NULL, NULL,
106: NULL, '\n', NULL, NULL, NULL, NULL, NULL, NULL,
107: NULL, '\t', NULL, NULL, NULL, NULL, NULL, NULL,
108: NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
109: NULL, NULL, NULL, NULL, NULL, NULL, '\b', NULL,
110: NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
111: ESC, '\r', NULL, '\n', '0', '.', ',', '+',
112: '1', '2', '3', '-', '4', '5', '6', '*',
113: '7', '8', '9', '/', 'E', '(', ')', '\036',
114: '1', '2', '3', '4', '5', '6', '7', '8',
115: '9', '0', '-', '=', '\033', '\035', ';', '\'',
116: ',', '.', '/', '\040', '\017', '\020', '\013', '\014',
117: '\021', '\027', '\005', '\022', '\024', '\031', '\025', '\011',
118: '\001', '\023', '\004', '\006', '\007', '\010', '\012', '\015',
119: '\032', '\030', '\003', '\026', '\002', '\016', NULL, NULL
120: };
121:
122: int
123: hilkbd_getc()
124: {
125: int status, c;
126: struct hil_dev *hiladdr = HILADDR;
127:
128: status = hiladdr->hil_stat;
129: if ((status & HIL_DATA_RDY) == 0)
130: return(0);
131: c = hiladdr->hil_data;
132: switch ((status >> HIL_SSHIFT) & HIL_SMASK) {
133: case KBD_SHIFT:
134: c = hilkbd_shiftmap[c & KBD_CHARMASK];
135: break;
136: case KBD_CTRL:
137: c = hilkbd_ctrlmap[c & KBD_CHARMASK];
138: break;
139: case KBD_KEY:
140: c = hilkbd_keymap[c & KBD_CHARMASK];
141: break;
142: default:
143: c = 0;
144: break;
145: }
146: return(c);
147: }
148: #endif /* SMALL */
149:
150: void
151: hilkbd_nmi()
152: {
153: struct hil_dev *hiladdr = HILADDR;
154:
155: HILWAIT(hiladdr);
156: hiladdr->hil_cmd = HIL_CNMT;
157: HILWAIT(hiladdr);
158: hiladdr->hil_cmd = HIL_CNMT;
159: HILWAIT(hiladdr);
160: printf("\nboot interrupted\n");
161: }
162:
163: int
164: hilkbd_init()
165: {
166: struct hil_dev *hiladdr = HILADDR;
167:
168: /*
169: * Determine the existence of a HIL keyboard.
170: */
171: HILWAIT(hiladdr);
172: hiladdr->hil_cmd = HIL_READKBDSADR;
173: HILDATAWAIT(hiladdr);
174: if (hiladdr->hil_data == 0)
175: return (0);
176:
177: HILWAIT(hiladdr);
178: hiladdr->hil_cmd = HIL_SETARR;
179: HILWAIT(hiladdr);
180: hiladdr->hil_data = ar_format(KBD_ARR);
181: HILWAIT(hiladdr);
182: hiladdr->hil_cmd = HIL_INTON;
183:
184: return (1);
185: }
186: #endif /* ITECONSOLE && HIL_KEYBOARD */
CVSweb