|
|
1.1 root 1: kkeeyybbooaarrdd ttaabblleess -- Technical Information
2:
3:
4: The COHERENT device-driver nnkkbb supports industry-standard 83-, 101-, and
5: 102-key AT-protocol keyboards attached as the computer console.
6:
7: nnkkbb lets you define both the layout of the keyboard and the values returned
8: by function keys. You can change layout and function-key bindings by using
9: the special keyboard mapping programs kept in directory /ccoonnff/kkbbdd. This
10: directory contains the C source code for the mapping tables, as well as a
11: MMaakkeeffiillee that helps you rebuild the mapping programs.
12:
13: Before you begin to write or modify an existing keyboard table, be sure to
14: read throroughly this article and the Lexicon article on nnkkbb. If you do
15: not, you may foul up the keyboard so thoroughly that it will not work well
16: enough for you to undo your mistake!
17:
18:
19: _O_p_e_r_a_t_i_o_n_a_l _O_v_e_r_v_i_e_w
20: The device driver nnkkbb provides the system's portion of the interface to the
21: console keyboard. It handles hardware-specific details, such as
22: initializing the keyboard and internal state, handling keyboard interrupts,
23: processing key scan codes, and queueing characters.
24:
25: The user half of the keyboard interface is provided by a set of stand-alone
26: utilities. With these, you can program the nnkkbb driver via specialized
27: iiooccttll() calls. These utilities differ from each other only in the keyboard
28: binding or mapping tables each uses. You can re-construct the interface to
29: the nnkkbb driver by modifying a keyboard-mapping file and then using a
30: support module to link that file to the driver.
31:
32: The keyboard-mapping file is a C program that consists of initialized
33: tables and strings. In addition, several header files provide the scan
34: codes and other constants required for the key tables. This format makes
35: the file easy to edit, and also lets you enter characters in several
36: different formats.
37:
38: The support module, in turn, performs several tasks. These include
39: scanning the keyboard-mapping file for errors, reformatting the table for
40: use by the device driver, and passing the reformatted table to the driver.
41:
42: _K_e_y _M_a_p_p_i_n_g _F_i_l_e_s
43: By convention, directory /ccoonnff/kkbbdd contains the keyboard-mapping files,
44: executables, and a MMaakkeeffiillee that you use to construct the executables from
45: the corresponding source files.
46:
47: A keyboard-mapping source file consists primarily of three data structures
48: that you must modify to support a given keyboard mapping. The first, and
49: simplest, of the structures is ttbbll_nnaammee. This is a character string that
50: describes the keyboard. For example, the stock 101-key US AT keyboard
51: mapping file /ccoonnff/kkbbdd/uuss.cc initializes this string to:
52:
53: "U.S. AT keyboard table"
54:
55: The second data structure, kkbbttbbll, is an array of key-mapping entries. It
56: has one entry (or row) for each possible key location. Each entry in this
57: structure consists of 11 fields, which hold, respectively, the key number,
58: nine possible mapping values, and a mode field. The following example is
59: for physical key location 3 from key-mapping source file
60: /ccoonnff/kkbbdd/bbeellggiiaann.cc:
61:
62: { K_3, 0x82, '2', none, none, 0x82, '2', '~', none, '~', O|T },
63:
64: Field 1 contains the _s_c_a_n _c_o_d_e _s_e_t _3 code value for the desired key.
65: Header file <ssyyss/kkbbssccaann.hh> contains symbolic constants of the form KK__n_n_n
66: that map the AT keyboard's _p_h_y_s_i_c_a_l key number _n_n_n to the corresponding
67: scan code set 3 value generated by the keyboard. In the above example, KK_33
68: corresponds to key location three.
69:
70: Fields 2 through 10 contain the key mappings corresponding to the following
71: shift states, as follows:
72:
73: 2 base or unshifted
74: 3 SSHHIIFFTT
75: 4 CCOONNTTRROOLL
76: 5 CCOONNTTRROOLL+SSHHIIFFTT
77: 6 AALLTT
78: 7 AALLTT+SSHHIIFFTT
79: 8 AALLTT+CCOONNTTRROOLL
80: 9 AALLTT+CCOONNTTRROOLL+SSHHIIFFTT
81: 10 AALLTT_GGRRAAPPHHIICC
82:
83: For ``regular'' keys, the values for these nine fields are eight-bit
84: characters; for ``function'' or ``shift'' keys, they are special values.
85: The symbolic constant nnoonnee indicates that you want no output when the key
86: is pressed in the specified shift state.
87:
88: In the case of a function key, the value specified is the number of the
89: desired function key. Header file <ssyyss/kkbb.hh> defines a set of symbolic
90: constants of the form ff_n, where _n is the desired function key number. You
91: should use these constants; they will improve the readability of your code,
92: and they will protect your keyboard mapping source files from any future
93: changes in the structure of the keyboard driver.
94:
95: In the case of a ``shift'' key, all nine entries must be identical and must
96: consist of one of the following symbolic constants: ssccrroollll, nnuumm, ccaappss,
97: llaalltt, rraalltt, llsshhiifftt, rrsshhiifftt, llccttrrll, rrccttrrll, or aallttggrr. These are defined in
98: the <ssyyss/kkbb.hh> header file. Note that 83-key XT-layout keyboards only have
99: one ``control'' and ``alt'' key, so not all shift-key combinations may be
100: possible on your target keyboard.
101:
102: The last (11th) field in the key entry is the ``mode'' field. The
103: following symbolic constants specify the mode of the current key:
104:
105: CC The ccaappss lloocckk key affects this key.
106:
107: FF The specified key is a ``function'' or special key. The value of all
108: mapping entries must name function keys. See header file <kkbb.hh> for a
109: list of predefined function keys.
110:
111: MM Make: use this mode with keys that do not repeat. Note that
112: accidentally using this mode with ``shift'' keys will stop you from
113: being able to ``unshift'' upon releasing the key!
114:
115: MMBB Make/Break: use this mode with ``shift'' keys.
116:
117: NN The nnuumm lloocckk key affects this key.
118:
119: OO The specified key is ``regular'' and requires no special processing.
120:
121: SS The specified key is a ``shift'' or ``lock'' key. Note that all
122: mapping entries for a given key must be identical for a ``shift'' or
123: ``lock'' key to work correctly.
124:
125: TT Typematic: this type is usually associated with a ``regular'' key.
126:
127: TTMMBB Typematic/Make/Break.
128:
129: The above example specifies a mode field of OO|TT, which corresponds to a
130: ``regular'' key with Typematic repeat, and no special handling of the
131: ``lock'' keys.
132:
133: The last data structure, ffuunnkkeeyy, consists of an array of function-key
134: initializers, one per function key. The initializers are simple quoted
135: character strings delimited by either hexadecimal value 00xxFFFF, octal value
136: \337777, or symbolic constant DDEELLIIMM. Note that any other value can be used as
137: part of a function-key binding. Function keys are numbered starting at
138: zero. By convention, function key 0, when enabled, reboots your computer.
139: For traditional reasons, this function key is usually bound to the key
140: sequence <ccttrrll><aalltt><ddeell>.
141:
142: Function keys are useful not only in the classic sense of the programmable
143: function keys on the keyboard, but also as a general purpose mechanism for
144: binding arbitrary length character sequences to a given key. For example,
145: physical key location 16 is usually associated with the <ttaabb> and <bbaacckk
146: ttaabb> on the AT keyboard; and /ccoonnff/kkbbdd/uuss.cc sets the key mapping table
147: entry for key 16 as follows:
148:
149: { K_16, f42, f43, none, none, f42, f43, none, none, none, F|T },
150:
151: For traditional reasons, the <bbaacckk ttaabb> key outputs the sequence <eesscc>[ZZ
152: whereas the <ttaabb> key simply outputs the horizontal-tab character <ccttrrll-II>.
153: Because at least one of the mapping values for this key is more than one
154: character long, the key must be defined as a ``function'' key and all
155: entries for the the key must correspond to function-key numbers. In this
156: example, function key number 42 was chosen for <ttaabb>, and function key
157: number 43 was chosen for <bbaacckk ttaabb>. The constant nnoonnee indicates that you
158: want no output when the key is pressed in the specified shift state. The
159: corresponding ffuunnkkeeyy initialization entries for function keys ff4422 and ff4433
160: are as follows:
161:
162: /* 42 */ "\t\377", /* Tab */
163: /* 43 */ "\033[Z\377", /* Back Tab */
164:
165: We strongly recommend that you comment your function-key bindings.
166:
167: You can also change function-key bindings via the command ffnnkkeeyy. This
168: command lets you temporarily alter one or more function-key mappings
169: without changing your key-mapping sources.
170:
171: _B_u_i_l_d_i_n_g _N_e_w _B_i_n_a_r_i_e_s
172: After you have modified an existing keyboard-mapping table, use the
173: following commands to rebuild the corresponding executables:
174:
175: cd /conf/kbd
176: su root
177: make
178:
179: If you have created a new keyboard mapping table, you must edit
180: /ccoonnff/kkbbdd/MMaakkeeffiillee. Duplicate an existing entry from the MMaakkeeffiillee, and
181: change the duplicated name to match the name of your new keyboard-mapping
182: table. After you have finished your editing, build an executable from your
183: source file by simply executing the above series of commands.
184:
185: To load your new keyboard table, simply type the name of the executable
186: that corresponds to your keyboard-mapping file. For example, if you just
187: built executable ffrreenncchh from source file ffrreenncchh.cc, type the following
188: command:
189:
190: /conf/kbd/french
191:
192: If the keyboard-support module finds an error, it will print an appropriate
193: message. If it finds no errors, it will update the internal tables of the
194: nnkkbb keyboard driver, reprogram the keyboard, and print a message of the
195: form:
196:
197: Loaded French AT keyboard table
198:
199: _E_x_a_m_p_l_e_s
200: Prior to the release of the 101- and 102-key, enhanced-layout AT keyboards,
201: the <ccttrrll> key was positioned to the left of `A' key. Most terminals also
202: locate the <ccttrrll> key there. The first example shows how to swap the left
203: <ccttrrll> key and the <ccaappss-lloocckk> key on a 101- and 102-key keyboard. The
204: <ccaappss-lloocckk> key is physical key 30, whereas the left <ccttrrll> key is physical
205: key 58. Their respective entries in file /ccoonnff/kkbbdd/uuss.cc source file are as
206: follows:
207:
208: { K_30, caps, caps, caps, caps, caps, caps, caps, caps, caps, S|M },
209: { K_58, lctrl,lctrl,lctrl,lctrl,lctrl,lctrl,lctrl,lctrl,lctrl, S|MB },
210:
211: Note that the <ccaappss-lloocckk> key is defined with mode MM as it is a ``lock''
212: key. The keyboard will interrupt only on key depressions, because
213: releasing a ``lock'' key has no effect. The left <ccttrrll> key is defined
214: with mode MMBB as it is a ``shift'' key. The keyboard generates an interrupt
215: on both key depression and key release, because the driver must track the
216: state of this key.
217:
218: To swap the aforementioned keys, simply change all occurrences of ccaappss to
219: llccttrrll and vice-versa, as well as swapping the mode fields. After making
220: the changes, the entries now appear as:
221:
222: { K_30, lctrl,lctrl,lctrl,lctrl,lctrl,lctrl,lctrl,lctrl,lctrl, S|MB },
223: { K_58, caps, caps, caps, caps, caps, caps, caps, caps, caps, S|M },
224:
225: The second example converts a 101- or 102-key keyboard table to support an
226: XT-style 83-key keyboard layout. The following section summarizes the
227: ``typical'' differences found when comparing the two keyboard layouts.
228: Needless to say, given the extreme variety in keyboard designs, your
229: mileage may vary.
230:
231: _L_o_c_a_t_i_o_n _1_0_1/_1_0_2 _V_a_l_u_e _8_3-_k_e_y _V_a_l_u_e _C_o_m_m_e_n_t_s
232: 14 nnoonnee Various Keyboard-specific
233: 30 ccaappss llccttrrll
234: 58 llccttrrll llaalltt
235: 64 rrccttrrll ccaappss
236: 65 nnoonnee FF22 Function Key
237: 66 nnoonnee FF44 Function Key
238: 67 nnoonnee FF66 Function Key
239: 68 nnoonnee FF88 Function Key
240: 69 nnoonnee FF1100 Function Key
241: 70 nnoonnee FF11 Function Key
242: 71 nnoonnee FF33 Function Key
243: 72 nnoonnee FF55 Function Key
244: 73 nnoonnee FF77 Function Key
245: 74 nnoonnee FF99 Function Key
246: 90 nnuumm EEsscc
247: 95 / nnuumm
248: 100 * ssccrroollll
249: 105 - nnoonnee <SSyyssRReeqq> not used
250: 106 + *
251: 107 nnoonnee -
252: 108 <EEnntteerr> +
253: 110 eesscc nnoonnee Not on XT layout
254: 112-123 FF11-FF1122 nnoonnee Not on XT layout
255: 124 nnoonnee nnoonnee <PPrrttSSccrr> not used
256: 125 ssccrroollll nnoonnee Not on XT layout
257: 126 nnoonnee nnoonnee <PPaauussee> not used
258:
259: _S_e_e _A_l_s_o
260: ddeevviiccee ddrriivveerrss, ffnnkkeeyy, kkbb.hh, nnkkbb
261:
262: _N_o_t_e_s
263: Key 14, if used, varies considerably among keyboard models.
264:
265: The location of the key that contains characters `\' and `|' varies among
266: 101-key US-layout keyboards.
267:
268: When designing keyboard tables for keyboards that use the AALLTT_GGRRAAPPHHIICC shift
269: key, for reasons of backwards compatibility you should allow the use of
270: combination shift AALLTT+CCTTRRLL as a synonym for AALLTT_GGRRAAPPHHIICC.
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.