Museum

Home

Lab Overview

Retrotechnology Articles

⇒ Online Manual

Media Vault

Software Library

Restoration Projects

Artifacts Sought

Related Articles

setkeys(1)

click(1)

KB(4S)  —  SPECIAL FILES

NAME

kb, kbd − Sun keyboard

SYNOPSIS

pseudo-device kbnumber

DESCRIPTION

kb provides access to the Sun workstation keyboard and its translation tables.  Definitions for altering keyboard translation, and reading events from the keyboard, are in <sundev/kbio.h> and <sundev/kbd.h>.  number specifies the maximum number of keyboards supported by the system.  In addition, the kernel recognizes the special keyboard device /dev/kbd; it is a synonym for the system keyboard, which is physically attached to the system console.  This keyboard’s keystrokes are normally treated as input to the /dev/console device. 

The UNIX kernel recognizes which keys have been typed using a set of tables for each known type of keyboard.  Each translation table is an array of 128 bytes (unsigned characters).  If a character value is less than 0x80, it is treated as an ASCII character (perhaps with the META bit included).  Higher values indicate special characters that invoke more complicated actions. 

Keyboard Translation State

The call KIOCTRANS controls the presence of keyboard translation, for which the following values are defined:

#define TR_NONE0
#define TR_ASCII1
#define TR_EVENT2
#define TR_UNTRANS_EVENT3
 int x;
err = ioctl(fd, KIOCTRANS, &x);

When x is TR_NONE, keyboard translation is turned off and up/down key codes are reported.  Specifying x as TR_ASCII causes ASCII to be reported.  Specifying x as TR_EVENT causes Firm_events to be reported (see below).  Specifying x as TR_UNTRANS_EVENT gives unencoded keyboard values for all input events within the window system. 

Keyboard Translation-Table Entries

The call KIOCSETKEY changes a keyboard translation table entry, using the kiockey struct:

structkiockey {
intkio_tablemask;/∗ Translation table (one of: 0, CAPSMASK,
   SHIFTMASK, CTRLMASK, UPMASK) ∗/
#define KIOCABORT1-1/∗ Special "mask": abort1 keystation ∗/
#define KIOCABORT2-2/∗ Special "mask": abort2 keystation ∗/
u_charkio_station;/∗ Physical keyboard key station (0-127) ∗/
u_charkio_entry;/∗ Translation table station’s entry ∗/
charkio_string[10];/∗ Value for STRING entries (null terminated) ∗/
};
 struct kiockey key;
err = ioctl(fd, KIOCSETKEY, &key);

To alter a keyboard translation-table entry, set kio_tablemask table’s kio_station to kio_entry.  Copy kio_string to the string table if kio_entry is between STRING and STRING+15.  This call may return ­EINVAL if there are invalid arguments. 

There are a couple special values of kio_tablemask that affect the two step “break to the prom monitor” sequence.  The usual sequence is SETUP−a or L1−a.  If kio_tablemask is KIOCABORT1 then the value of kio_station is set to be the first keystation in the sequence.  If kio_tablemask is KIOCABORT2 then the value of kio_station is set to be the second keystation in the sequence. 

The call KIOCGETKEY determines the current value of a keyboard translation table entry:

struct kiockey key;
err = ioctl(fd, KIOCGETKEY, &key);

Get kio_tablemask table’s kio_station to kio_entry.  Get kio_string from string table if kio_entry is between STRING and STRING+15.  This call may return EINVAL if there are invalid arguments. 

Keyboard Type

The call KIOCTYPE returns the type of the keyboard:

#defineKB_KLUNK0x00/∗ Micro Switch 103SD32-2 ∗/
#defineKB_VT1000x01/∗ Keytronics VT100 compatible ∗/
#defineKB_SUN20x02/∗ Sun-2 custom keyboard ∗/
#defineKB_SUN30x03/∗ Sun-3 custom keyboard ∗/
#defineKB_ASCII0x0F/∗ ASCII terminal masquerading as kbd ∗/
 int x;
err = ioctl(fd, KIOCTYPE, &x);

When x is −1, the keyboard type is unknown. 

Reading From The Keyboard

Normally, keystrokes are discarded, except for those typed at the system keyboard; those are translated and treated as input on the system console device /dev/console.  In order to read keystrokes directly, the call KIOCSDIRECT must be used to set the keyboard to “direct input” mode.  In this mode, keystrokes are translated and queued to be read by a process that has opened a keyboard device:

int on = 1;
err = ioctl(fd, KIOCSDIRECT, &on);

The KIOCSDIRECT call turns “direct input” mode on or off, depending on whether the variable pointed to by its argument has the value 1 or 0.  The call KIOCGDIRECT sets the variable pointed to by its argument to the current state of this mode:

int direct_state;
err = ioctl(fd, KIOCGDIRECT, &direct_state);

When the keyboard device is closed, “direct mode” is turned off. 

Keyboard Commands

The call KIOCCMD sends a command to the keyboard:

/∗
 ∗ Commands to the Sun-2 keyboard.
 ∗/
#define KBD_CMD_RESET 0x01/∗ Reset keyboard as if power-up ∗/
#define KBD_CMD_BELL  0x02/∗ Turn on the bell ∗/
#define KBD_CMD_NOBELL0x03/∗ Turn off the bell ∗/
 /∗
 ∗ Commands to the Sun-3 keyboard.  KBD_CMD_BELL & KBD_CMD_NOBELL work
 ∗ as well.
 ∗/
#define KBD_CMD_CLICK  0x0A/∗ Turn on the click annunciator ∗/
#define KBD_CMD_NOCLICK0x0B/∗ Turn off the click annunciator ∗/
 int x;
err = ioctl(fd, KIOCCMD, &x);

Inappropriate commands for particular keyboard types are ignored.  Since there is no reliable way to get the state of the bell or click (because we can’t query the keyboard, and also because a process could do writes to the appropriate serial driver — thus going around this ioctl) we don’t provide an equivalent ioctl to query its state. 

Shift Masks

When shift keys are pressed or locked, a different translation table is used to translate keyboard actions.  The shift mask indicates which translation table to use.  Since there may be more than one bit in in the shift mask at any given time, they are prioritized as follows:

UPMASK 0x0080 “Key Up” translation table. 

CTRLMASK 0x0030 “Controlled” translation table. 

SHIFTMASK 0x000E “Shifted” translation table. 

CAPSMASK 0x0001 “Caps Lock” translation table. 

(No shift keys pressed or locked) “Unshifted” translation table. 

That is:  if the event corresponds to a key-up, use the “Key Up” table.  If the CTRL is down, use the “Controlled” table, and so on. 

Special-Entry Values

Special-entry values are classified according to the value of the high-order bits (with the exception of ALT, which is defined as 0x6).  The high-order value for each class is defined as a constant, as shown in the list below.  The value of the low-order bits, when added to this constant,  distinguishes between keys within each class:

SHIFTKEYS 0x80 A shift key.  The value of the particular shift key is added to determine which shift mask to apply:

CAPSLOCK 0 "Caps Lock" key. 

SHIFTLOCK 1 "Shift Lock" key. 

LEFTSHIFT 2 Left-hand "Shift" key. 

RIGHTSHIFT 3 Right-hand "Shift" key. 

LEFTCTRL 4 Left-hand (or only) "Control" key. 

RIGHTCTRL 5 Right-hand "Control" key. 

BUCKYBITS 0x90 Used to toggle mode-key-up/down status without altering the value of an accompanying ASCII character.  (The actual bit-position value, minus 7, is added.) 

METABIT 0 The "Meta" key was pressed along with the key.  This is the only user-accessible bucky bit. 

SYSTEMBIT 1 The "System" key was pressed.  This is a place holder to indicate which key is the system-abort key. 

FUNNY 0xA0 Performs various functions depending on the value of the low 4 bits:

NOP 0xA0 Does nothing. 

OOPS 0xA1 Exists, but is undefined. 

HOLE 0xA2 There is no key in this position on the keyboard, and the position-code should not be used. 

NOSCROLL 0xA3 Alternately sends ^S and ^Q. 

CTRLS 0xA4 Sends ^S and toggles NOSCROLL key. 

CTRLQ 0xA5 Sends ^Q and toggles NOSCROLL key. 

RESET 0xA6 Keyboard reset. 

ERROR 0xA7 The keyboard driver detected an internal error. 

IDLE 0xA8 The keyboard is idle (no keys down). 

0xA9 — 0xAF Reserved for nonparameterized functions. 

STRING 0xB0 — 0xBF
The low-order bits index a table of strings.  Each null-terminated string is returned character by character.  The maximum length is defined as:

KTAB_STRLEN 10

Individual string numbers are defined as:

HOMEARROW 0x00
UPARROW 0x01
DOWNARROW 0x02
LEFTARROW 0x03
RIGHTARROW 0x04

String numbers 5 — F are available for custom entries. 

Function Key Groups

In the following groups, the low-order bits indicate the function key number within the group:

LEFTFUNC0xC0
RIGHTFUNC0xD0
TOPFUNC0xE0
BOTTOMFUNC0xF0
LF(n)(LEFTFUNC+(n)-1)
RF(n)(RIGHTFUNC+(n)-1)
TF(n)(TOPFUNC+(n)-1)
BF(n)(BOTTOMFUNC+(n)-1)

There are 64 keys reserved for function keys.  The actual positions may not be on left/right/top/bottom of the keyboard, although they usually are. 

Normally, when a function key is pressed, the following escape sequence is sent:

<ESC>[0....9z

where <ESC> is a single escape character and "0...9" indicates the decimal representation of the function-key value.

INDEX STRUCTURES

There is a hierarchy of structures for accessing keyboard translation data.  The array keytables contains pointers to the translation data for each of the known keyboard types:

struct keyboard ∗keytables[] = {
&keyindex_ms,
&keyindex_vt,
&keyindex_s2,
&keyindex_s3,
};

Each keyboard type is described by a struct keyboard that contains pointers to the five translation-tables ("Unshifted", "Shifted", "Caps Locked" "Controlled", and "Key Up") associated with that type, plus bit-masks that indicate what state can persist with no keys pressed, and the key-pair used as the abort sequence for the system. 

An array keystringtab contains the strings sent by various keys, and can be accessed by any translation:

#define kstescinit(c)   {’\033’, ’[’, ’c’, ’\0’}
char keystringtab[16][KTAB_STRLEN] = {
kstescinit(H),/∗ home ∗/
kstescinit(A),/∗ up ∗/
kstescinit(B),/∗ down ∗/
kstescinit(D),/∗ left ∗/
kstescinit(C),/∗ right ∗/
};

Index Structure for the Sun-3 Keyboard

static struct keyboard keyindex_s3 = {
&keytab_s3_lc,
&keytab_s3_uc,
&keytab_s3_cl,
&keytab_s3_ct,
&keytab_s3_up,
0x0000, /∗ Shift bits that stay on with idle keyboard ∗/
0x0000, /∗ Bucky bits that stay on with idle keyboard ∗/
0x01, 0x4d, /∗ Abort sequence  L1-A ∗/
CAPSMASK,/∗ Shift bits that toggle on down event ∗/
};

Index Structure for the Sun-2 Keyboard

static struct keyboard keyindex_s2 = {
&keytab_s2_lc,
&keytab_s2_uc,
&keytab_s2_cl,
&keytab_s2_ct,
&keytab_s2_up,
CAPSMASK,/∗ Shift bits that stay on with idle keyboard ∗/
0x0000, /∗ Bucky bits that stay on with idle keyboard ∗/
0x01, 0x4d, /∗ Abort sequence L1-A ∗/
0x0000, /∗ Shift bits that toggle on down event ∗/
};

Index Structure for the Micro Switch 103SD32-2 Keyboard

static struct keyboard keyindex_ms = {
&keytab_ms_lc,
&keytab_ms_uc,
&keytab_ms_cl,
&keytab_ms_ct,
&keytab_ms_up,
CTLSMASK,/∗ Shift bits that stay on with idle keyboard ∗/
0x0000, /∗ Bucky bits that stay on with idle keyboard ∗/
0x01, 0x4d, /∗ Abort sequence L1-A ∗/
0x0000, /∗ Shift bits that toggle on down event ∗/
};

Index Structure for the VT100-Style Keyboard

static struct keyboard keyindex_vt = {
&keytab_vt_lc,
&keytab_vt_uc,
&keytab_vt_cl,
&keytab_vt_ct,
&keytab_vt_up,
CAPSMASK+CTLSMASK,/∗ Shift keys that stay on with idle keyboard ∗/
0x0000, /∗ Bucky bits that stay on with idle keyboard ∗/
0x01, 0x3b, /∗ Abort sequence SETUP-A ∗/
0x0000, /∗ Shift bits that toggle on down event ∗/
};

DEFAULT TRANSLATION TABLES

Sun-3 Keyboard

Unshifted

















Key Value Key Value Key Value Key Value Key Value Key Value Key Value Key Value
00 HOLE 01 BUCKYBITS+ 02 HOLE 03 LF(2) 04 HOLE 05 TF(1) 06 TF(2) 07 HOLE
SYSTEMBIT











08 TF(3) 09 HOLE 0A TF(4) 0B HOLE 0C TF(5) 0D HOLE 0E TF(6) 0F HOLE
10 TF(7) 11 TF(8) 12 TF(9) 13 ALT 14 HOLE 15 RF(1) 16 RF(2) 17 RF(3)
18 HOLE 19 LF(3) 1A LF(4) 1B HOLE 1C HOLE 1D c(’[’) 1E ’1’ 1F ’2’
20 ’3’ 21 ’4’ 22 ’5’ 23 ’6’ 24 ’7’ 25 ’8’ 26 ’9’ 27 ’0’
28 ’−’ 29 ’=’ 2A ’‘’ 2B ’\b’ 2C HOLE 2D RF(4) 2E RF(5) 2F RF(6)
30 HOLE 31 LF(5) 32 HOLE 33 LF(6) 34 HOLE 35 ’\t’ 36 ’q’ 37 ’w’
38 ’e’ 39 ’r’ 3A ’t’ 3B ’y’ 3C ’u’ 3D ’i’ 3E ’o’ 3F ’p’
40 ’[’ 41 ’]’ 42 0x7F 43 HOLE 45 RF(7) 45 STRING+ 46 RF(9) 47 HOLE
UPARROW



48 LF(7) 49 LF(8) 4A LF(40) 4B HOLE 4C SHIFTKEYS+ 4D ’a’ 4E ’s’ 4F ’d’
LEFTCTRL





50 ’f’ 51 ’g’ 52 ’h’ 53 ’j’ 54 ’k’ 55 ’l’ 56 ’;’ 57 ’\´’
58 ’\’ 59 ’\r’ 5A HOLE 5B STRING+ 5C RF(11) 5D STRING+ 5E HOLE 5F LF(9)
LEFTARROW RIGHTARROW



60 LF(15) 61 LF(10) 62 HOLE 63 SHIFTKEYS+ 64 ’z’ 65 ’x’ 66 ’c’ 67 ’v’
LEFTSHIFT







68 ’b’ 69 ’n’ 6A ’m’ 6B ’,’ 6C ’.’ 6D ’/’ 6E SHIFTKEYS+ 6F ’\n’
RIGHTSHIFT

70 RF(13) 71 STRING+ 72 RF(15) 73 HOLE 74 HOLE 75 HOLE 76 HOLE 77 SHIFTKEYS+
DOWNARROW CAPSLOCK
78 BUCKYBITS+ 79 ’ ’ 7A BUCKYBITS+ 7B HOLE 7C HOLE 7D HOLE 7E ERROR 7F IDLE
METABIT METABIT









Sun-3 Keyboard

Shifted

















Key Value Key Value Key Value Key Value Key Value Key Value Key Value Key Value
00 HOLE 01 BUCKYBITS+ 02 HOLE 03 LF(2) 04 HOLE 05 TF(1) 06 TF(2) 07 HOLE
SYSTEMBIT











08 TF(3) 09 HOLE 0A TF(4) 0B HOLE 0C TF(5) 0D HOLE 0E TF(6) 0F HOLE
10 TF(7) 11 TF(8) 12 TF(9) 13 ALT 14 HOLE 15 RF(1) 16 RF(2) 17 RF(3)
18 HOLE 19 LF(3) 1A LF(4) 1B HOLE 1C HOLE 1D c(’[’) 1E ’!’ 1F ’@’
20 ’#’ 21 ’$’ 22 ’%’ 23 ’^’ 24 ’&’ 25 ’∗’ 26 ’(’ 27 ’)’
28 ’_’ 29 ’+’ 2A ’~’ 2B ’\b’ 2C HOLE 2D RF(4) 2E RF(5) 2F RF(6)
30 HOLE 31 LF(5) 32 HOLE 33 LF(6) 34 HOLE 35 ’\t’ 36 ’Q’ 37 ’W’
38 ’E’ 39 ’R’ 3A ’T’ 3B ’Y’ 3C ’U’ 3D ’I’ 3E ’O’ 3F ’P’
40 ’{’ 41 ’}’ 42 0x7F 43 HOLE 44 RF(7) 45 STRING+ 46 RF(9) 47 HOLE
UPARROW



48 LF(7) 49 LF(8) 4A HOLE 4B HOLE 4C SHIFTKEYS+ 4D ’A’ 4E ’S’ 4F ’D’
LEFTCTRL





50 ’F’ 51 ’G’ 52 ’H’ 53 ’J’ 54 ’K’ 55 ’L’ 56 ’:’ 57 ’"’
58 ’|’ 59 ’\r’ 5A HOLE 5B STRING+ 5C RF(11) 5D STRING+ 5E HOLE 5F LF(9)
LEFTARROW RIGHTARROW



60 LF(15) 61 LF(10) 62 HOLE 63 SHIFTKEYS+ 64 ’Z’ 65 ’X’ 66 ’C’ 67 ’V’
LEFTSHIFT







68 ’B’ 69 ’N’ 6A ’M’ 6B ’<’ 6C ’>’ 6D ’?’ 6E SHIFTKEYS+ 6F ’\n’
RIGHTSHIFT

70 RF(13) 71 STRING+ 72 RF(15) 73 HOLE 74 HOLE 75 HOLE 76 HOLE 77 SHIFTKEYS+
DOWNARROW CAPSLOCK
78 BUCKYBITS+ 79 ’ ’ 7A BUCKYBITS+ 7B HOLE 7C HOLE 7D HOLE 7E ERROR 7F IDLE
METABIT METABIT









Sun-3 Keyboard

Caps Locked

















Key Value Key Value Key Value Key Value Key Value Key Value Key Value Key Value
00 HOLE 01 BUCKYBITS+ 02 HOLE 03 LF(2) 04 HOLE 05 TF(1) 06 TF(2) 07 HOLE
SYSTEMBIT











08 TF(3) 09 HOLE 0A TF(4) 0B HOLE 0C TF(5) 0D HOLE 0E TF(6) 0F HOLE
10 TF(7) 11 TF(8) 12 TF(9) 13 ALT 14 HOLE 15 RF(1) 16 RF(2) 17 RF(3)
18 HOLE 19 LF(3) 1A LF(4) 1B HOLE 1C HOLE 1D c(’[’) 1E ’1’ 1F ’2’
20 ’3’ 21 ’4’ 22 ’5’ 23 ’6’ 24 ’7’ 25 ’8’ 26 ’9’ 27 ’0’
28 ’−’ 29 ’=’ 2A ’‘’ 2B ’\b’ 2C HOLE 2D RF(4) 2E RF(5) 2F RF(6)
30 HOLE 31 LF(5) 32 HOLE 33 LF(6) 34 HOLE 35 ’\t’ 36 ’Q’ 37 ’W’
38 ’E’ 39 ’R’ 3A ’T’ 3B ’Y’ 3C ’U’ 3D ’I’ 3E ’O’ 3F ’P’
40 ’[’ 41 ’]’ 42 0x7F 43 HOLE 44 RF(7) 45 STRING+ 46 RF(9) 47 HOLE
UPARROW



48 LF(7) 49 LF(8) 4A HOLE 4B HOLE 4C SHIFTKEYS+ 4D ’A’ 4E ’S’ 4F ’D’
LEFTCTRL





50 ’F’ 51 ’G’ 52 ’H’ 53 ’J’ 54 ’K’ 55 ’L’ 56 ’;’ 57 ’\´’
58 ’\’ 59 ’\r’ 5A HOLE 5B STRING+ 5C RF(11) 5D STRING+ 5E HOLE 5F LF(9)
LEFTARROW RIGHTARROW



60 LF(15) 61 LF(10) 62 HOLE 63 SHIFTKEYS+ 64 ’Z’ 65 ’X’ 66 ’C’ 67 ’V’
LEFTSHIFT







68 ’B’ 69 ’N’ 6A ’M’ 6B ’,’ 6C ’.’ 6D ’/’ 6E SHIFTKEYS+ 6F ’\n’
RIGHTSHIFT

70 RF(13) 71 STRING+ 72 RF(15) 73 HOLE 74 HOLE 75 HOLE 76 HOLE 77 SHIFTKEYS+
DOWNARROW CAPSLOCK
78 BUCKYBITS+ 79 ’ ’ 7A BUCKYBITS+ 7B HOLE 7C HOLE 7D HOLE 7E ERROR 7F IDLE
METABIT METABIT









Sun-3 Keyboard

Controlled

















Key Value Key Value Key Value Key Value Key Value Key Value Key Value Key Value
00 HOLE 01 BUCKYBITS+ 02 HOLE 03 LF(2) 04 HOLE 05 TF(1) 06 TF(2) 07 HOLE
SYSTEMBIT











08 TF(3) 09 HOLE 0A TF(4) 0B HOLE 0C TF(5) 0D HOLE 0E TF(6) 0F HOLE
10 TF(7) 11 TF(8) 12 TF(9) 13 ALT 14 HOLE 15 RF(1) 16 RF(2) 17 RF(3)
18 HOLE 19 LF(3) 1A LF(4) 1B HOLE 1C HOLE 1D c(’[’) 1E ’1’ 1F c(’@’)
20 ’3’ 21 ’4’ 22 ’5’ 23 c(’^’) 24 ’7’ 25 ’8’ 26 ’9’ 27 ’0’
28 c(’_’) 29 ’=’ 2A c(’^’) 2B ’\b’ 2C HOLE 2D RF(4) 2E RF(5) 2F RF(6)
30 HOLE 31 LF(5) 32 HOLE 33 LF(6) 34 HOLE 35 ’\t’ 36 c(’q’) 37 c(’w’)
38 c(’e’) 39 c(’r’) 3A c(’t’) 3B c(’y’) 3C c(’u’) 3D c(’i’) 3E c(’o’) 3F c(’p’)
40 c(’[’) 41 c(’]’) 42 0x7F 43 HOLE 44 RF(7) 45 STRING+ 46 RF(9) 47 HOLE
UPARROW



48 LF(7) 49 LF(8) 4A HOLE 4B HOLE 4C SHIFTKEYS+ 4D c(’a’) 4E c(’s’) 4F c(’d’)
LEFTCTRL





50 c(’f’) 51 c(’g’) 52 c(’h’) 53 c(’j’) 54 c(’k’) 55 c(’l’) 56 ’;’ 57 ’\´’
58 c(’\’) 59 ’\r’ 5A HOLE 5B STRING+ 5C RF(11) 5D STRING+ 5E HOLE 5F LF(9)
LEFTARROW RIGHTARROW



60 LF(15) 61 LF(10) 62 HOLE 63 SHIFTKEYS+ 64 c(’z’) 65 c(’x’) 66 c(’c’) 67 c(’v’)
LEFTSHIFT







68 c(’b’) 69 c(’n’) 6A c(’m’) 6B ’,’ 6C ’.’ 6D c(’_’) 6E SHIFTKEYS+ 6F ’\n’
RIGHTSHIFT

70 RF(13) 71 STRING+ 72 RF(15) 73 HOLE 74 HOLE 75 HOLE 76 HOLE 77 SHIFTKEYS+
DOWNARROW CAPSLOCK
78 BUCKYBITS+ 79 c(’ ’) 7A BUCKYBITS+ 7B HOLE 7C HOLE 7D HOLE 7E ERROR 7F IDLE
METABIT METABIT









Sun-3 Keyboard

Key Up

















Key Value Key Value Key Value Key Value Key Value Key Value Key Value Key Value
00 HOLE 01 BUCKYBITS+ 02 HOLE 03 OOPS 04 HOLE 05 OOPS 06 OOPS 07 HOLE
SYSTEMBIT











08 OOPS 09 HOLE 0A OOPS 0B HOLE 0C OOPS 0D HOLE 0E OOPS 0F HOLE
10 OOPS 11 OOPS 12 OOPS 13 OOPS 14 HOLE 15 OOPS 16 OOPS 17 NOP
18 HOLE 19 OOPS 1A OOPS 1B HOLE 1C HOLE 1D NOP 1E NOP 1F NOP
20 NOP 21 NOP 22 NOP 23 NOP 24 NOP 25 NOP 26 NOP 27 NOP
28 NOP 29 NOP 2A NOP 2B NOP 2C HOLE 2D OOPS 2E OOPS 2F NOP
30 HOLE 31 OOPS 32 HOLE 33 OOPS 34 HOLE 35 NOP 36 NOP 37 NOP
38 NOP 39 NOP 3A NOP 3B NOP 3C NOP 3D NOP 3E NOP 3F NOP
40 NOP 41 NOP 42 NOP 43 HOLE 44 OOPS 45 OOPS 46 NOP 47 HOLE
48 OOPS 49 OOPS 4A HOLE 4B HOLE 4C SHIFTKEYS+ 4D NOP 4E NOP 4F NOP
LEFTCTRL





50 NOP 51 NOP 52 NOP 53 NOP 54 NOP 55 NOP 56 NOP 57 NOP
58 NOP 59 NOP 5A HOLE 5B OOPS 5C OOPS 5D NOP 5E HOLE 5F OOPS
60 OOPS 61 OOPS 62 HOLE 63 SHIFTKEYS+ 64 NOP 65 NOP 66 NOP 67 NOP
LEFTSHIFT







68 NOP 69 NOP 6A NOP 6B NOP 6C NOP 6D NOP 6E SHIFTKEYS+ 6F NOP
RIGHTSHIFT

70 OOPS 71 OOPS 72 NOP 73 HOLE 74 HOLE 75 HOLE 76 HOLE 77 NOP
78 BUCKYBITS+ 79 NOP 7A BUCKYBITS+ 7B HOLE 7C HOLE 7D HOLE 7E HOLE 7F RESET
METABIT METABIT









Sun-2 Keyboard

Unshifted

















Key Value Key Value Key Value Key Value Key Value Key Value Key Value Key Value
00 HOLE 01 BUCKYBITS+ 02 LF(11) 03 LF(2) 04 HOLE 05 TF(1) 06 TF(2) 07 TF(11)
SYSTEMBIT











08 TF(3) 09 TF(12) 0A TF(4) 0B TF(13) 0C TF(5) 0D TF(14) 0E TF(6) 0F TF(15)
10 TF(7) 11 TF(8) 12 TF(9) 13 TF(10) 14 HOLE 15 RF(1) 16 RF(2) 17 RF(3)
18 HOLE 19 LF(3) 1A LF(4) 1B LF(12) 1C HOLE 1D c(’[’) 1E ’1’ 1F ’2’
20 ’3’ 21 ’4’ 22 ’5’ 23 ’6’ 24 ’7’ 25 ’8’ 26 ’9’ 27 ’0’
28 ’−’ 29 ’=’ 2A ’‘’ 2B ’\b’ 2C HOLE 2D RF(4) 2E RF(5) 2F RF(6)
30 HOLE 31 LF(5) 32 LF(13) 33 LF(6) 34 HOLE 35 ’\t’ 36 ’q’ 37 ’w’
38 ’e’ 39 ’r’ 3A ’t’ 3B ’y’ 3C ’u’ 3D ’i’ 3E ’o’ 3F ’p’
40 ’[’ 41 ’]’ 42 0x7F 43 HOLE 44 RF(7) 45 STRING+ 46 RF(9) 47 HOLE
UPARROW



48 LF(7) 49 LF(8) 4A LF(14) 4B HOLE 4C SHIFTKEYS+ 4D ’a’ 4E ’s’ 4F ’d’
LEFTCTRL





50 ’f’ 51 ’g’ 52 ’h’ 53 ’j’ 54 ’k’ 55 ’l’ 56 ’;’ 57 ’\´’
58 ’\’ 59 ’\r’ 5A HOLE 5B STRING+ 5C RF(11) 5D STRING+ 5E HOLE 5F LF(9)
LEFTARROW RIGHTARROW



60 LF(15) 61 LF(10) 62 HOLE 63 SHIFTKEYS+ 64 ’z’ 65 ’x’ 66 ’c’ 67 ’v’
LEFTSHIFT







68 ’b’ 69 ’n’ 6A ’m’ 6B ’,’ 6C ’.’ 6D ’/’ 6E SHIFTKEYS+ 6F ’\n’
RIGHTSHIFT

70 RF(13) 71 STRING+ 72 RF(15) 73 HOLE 74 HOLE 75 HOLE 76 HOLE 77 HOLE
DOWNARROW











70 BUCKYBITS+ 71 ’ ’ 72 BUCKYBITS+ 73 HOLE 74 HOLE 75 HOLE 76 ERROR 77 IDLE
METABIT METABIT









Sun-2 Keyboard

Shifted

















Key Value Key Value Key Value Key Value Key Value Key Value Key Value Key Value
00 HOLE 01 BUCKYBITS+ 02 LF(11) 03 LF(2) 04 HOLE 05 TF(1) 06 TF(2) 07 TF(11)
SYSTEMBIT











08 TF(3) 00 TF(12) 0A TF(4) 0B TF(13) 0C TF(5) 0D TF(14) 0E TF(6) 0F TF(15)
10 TF(7) 11 TF(8) 12 TF(9) 13 TF(10) 14 HOLE 15 RF(1) 16 RF(2) 17 RF(3)
18 HOLE 19 LF(3) 1A LF(4) 1B LF(12) 1C HOLE 1D c(’[’) 1E ’!’ 1F ’@’
20 ’#’ 21 ’$’ 22 ’%’ 23 ’^’ 24 ’&’ 25 ’∗’ 26 ’(’ 27 ’)’
28 ’_’ 29 ’+’ 2A ’~’ 2B ’\b’ 2C HOLE 2D RF(4) 2E RF(5) 2F RF(6)
30 HOLE 31 LF(5) 32 LF(13) 33 LF(6) 34 HOLE 35 ’\t’ 36 ’Q’ 37 ’W’
38 ’E’ 39 ’R’ 3A ’T’ 3B ’Y’ 3C ’U’ 3D ’I’ 3E ’O’ 3F ’P’
40 ’{’ 41 ’}’ 42 0x7F 43 HOLE 44 RF(7) 45 STRING+ 46 RF(9) 47 HOLE
UPARROW



48 LF(7) 49 LF(8) 4A LF(14) 4B HOLE 4C SHIFTKEYS+ 4D ’A’ 4E ’S’ 4F ’D’
LEFTCTRL





50 ’F’ 51 ’G’ 52 ’H’ 53 ’J’ 54 ’K’ 55 ’L’ 56 ’:’ 57 ’"’
58 ’|’ 59 ’\r’ 5A HOLE 5B STRING+ 5C RF(11) 5D STRING+ 5E HOLE 5F LF(9)
LEFTARROW RIGHTARROW



60 LF(15) 61 LF(10) 62 HOLE 63 SHIFTKEYS+ 64 ’Z’ 65 ’X’ 66 ’C’ 67 ’V’
LEFTSHIFT







68 ’B’ 69 ’N’ 6A ’M’ 6B ’<’ 6C ’>’ 6D ’?’ 6E SHIFTKEYS+ 6F ’\n’
RIGHTSHIFT

70 RF(13) 71 STRING+ 72 RF(15) 73 HOLE 74 HOLE 75 HOLE 76 HOLE 77 HOLE
DOWNARROW











78 BUCKYBITS+ 79 ’ ’ 7A BUCKYBITS+ 7B HOLE 7C HOLE 7D HOLE 7E ERROR 7F IDLE
METABIT METABIT









Sun-2 Keyboard

Caps Locked

















Key Value Key Value Key Value Key Value Key Value Key Value Key Value Key Value
00 HOLE 01 BUCKYBITS+ 02 LF(11) 03 LF(2) 04 HOLE 05 TF(1) 06 TF(2) 07 TF(11)
SYSTEMBIT











08 TF(3) 09 TF(12) 0A TF(4) 0B TF(13) 0C TF(5) 0D TF(14) 0E TF(6) 0F TF(15)
10 TF(7) 11 TF(8) 12 TF(9) 13 TF(10) 14 HOLE 15 RF(1) 16 RF(2) 17 RF(3)
18 HOLE 19 LF(3) 1A LF(4) 1B LF(12) 1C HOLE 1D c(’[’) 1E ’1’ 1F ’2’
20 ’3’ 21 ’4’ 22 ’5’ 23 ’6’ 24 ’7’ 25 ’8’ 26 ’9’ 27 ’0’
28 ’−’ 29 ’=’ 2A ’‘’ 2B ’\b’ 2C HOLE 2D RF(4) 2E RF(5) 2F RF(6)
30 HOLE 31 LF(5) 32 LF(13) 33 LF(6) 34 HOLE 35 ’\t’ 36 ’Q’ 37 ’W’
38 ’E’ 39 ’R’ 3A ’T’ 3B ’Y’ 3C ’U’ 3D ’I’ 3E ’O’ 3F ’P’
40 ’[’ 41 ’]’ 42 0x7F 43 HOLE 44 RF(7) 45 STRING+ 46 RF(9) 47 HOLE
UPARROW



48 LF(7) 49 LF(8) 4A LF(14) 4B HOLE 4C SHIFTKEYS+ 4D ’A’ 4E ’S’ 4F ’D’
LEFTCTRL





50 ’F’ 51 ’G’ 52 ’H’ 53 ’J’ 54 ’K’ 55 ’L’ 56 ’;’ 57 ’\”
58 ’\’ 59 ’\r’ 5A HOLE 5B STRING+ 5C RF(11) 5D STRING+ 5E HOLE 5F LF(9)
LEFTARROW RIGHTARROW



60 LF(15) 61 LF(10) 62 HOLE 63 SHIFTKEYS+ 64 ’Z’ 65 ’X’ 66 ’C’ 67 ’V’
LEFTSHIFT







68 ’B’ 69 ’N’ 6A ’M’ 6B ’,’ 6C ’.’ 6D ’/’ 6E SHIFTKEYS+ 6F ’\n’
RIGHTSHIFT

70 RF(13) 71 STRING+ 72 RF(15) 73 HOLE 74 HOLE 75 HOLE 76 HOLE 77 HOLE
DOWNARROW











78 BUCKYBITS+ 79 ’ ’ 7A BUCKYBITS+ 7B HOLE 7C HOLE 7D HOLE 7E ERROR 7F IDLE
METABIT METABIT









Sun-2 Keyboard

Controlled

















Key Value Key Value Key Value Key Value Key Value Key Value Key Value Key Value
00 HOLE 01 BUCKYBITS+ 02 LF(11) 03 LF(2) 04 HOLE 05 TF(1) 06 TF(2) 07 TF(11)
08 TF(3) 09 TF(12) 0A TF(4) 0B TF(13) 0C TF(5) 0D TF(14) 0E TF(6) 0F TF(15)
10 TF(7) 11 TF(8) 12 TF(9) 13 TF(10) 14 HOLE 15 RF(1) 16 RF(2) 17 RF(3)
18 HOLE 19 LF(3) 1A LF(4) 1B LF(12) 1C HOLE 1D c(’[’) 1E ’1’ 1F c(’@’)
20 ’3’ 21 ’4’ 22 ’5’ 23 c(’^’) 24 ’7’ 25 ’8’ 26 ’9’ 27 ’0’
28 c(’_’) 29 ’=’ 2A c(’^’) 2B ’\b’ 2C HOLE 2D RF(4) 2E RF(5) 2F RF(6)
30 HOLE 31 LF(5) 32 LF(13) 33 LF(6) 34 HOLE 35 ’\t’ 36 c(’q’) 37 c(’w’)
38 c(’e’) 39 c(’r’) 3A c(’t’) 3B c(’y’) 3C c(’u’) 3D c(’i’) 3E c(’o’) 3F c(’p’)
40 c(’[’) 41 c(’]’) 42 0x7F 43 HOLE 44 RF(7) 45 STRING+ 46 RF(9) 47 HOLE
UPARROW



48 LF(7) 49 LF(8) 4A LF(14) 4B HOLE 4C SHIFTKEYS+ 4D c(’a’) 4E c(’s’) 4F c(’d’)
LEFTCTRL





50 c(’f’) 51 c(’g’) 52 c(’h’) 53 c(’j’) 54 c(’k’) 55 c(’l’) 56 ’;’ 57 ’\´’
58 c(’\’) 59 ’\r’ 5A HOLE 5B STRING+ 5C RF(11) 5D STRING+ 5E HOLE 5F LF(9)
LEFTARROW RIGHTARROW


60 LF(15) 61 LF(10) 62 HOLE 63 SHIFTKEYS+ 64 c(’z’) 65 c(’x’) 66 c(’c’) 67 c(’v’)
LEFTSHIFT







68 c(’b’) 69 c(’n’) 6A c(’m’) 6B ’,’ 6C ’.’ 6D c(’_’) 6E SHIFTKEYS+ 6F ’\n’
RIGHTSHIFT

70 RF(13) 71 STRING+ 72 RF(15) 73 HOLE 74 HOLE 75 HOLE 76 HOLE 77 HOLE
DOWNARROW











78 BUCKYBITS+ 79 c(’ ’) 7A BUCKYBITS+ 7B HOLE 7C HOLE 7D HOLE 7E ERROR 7F IDLE
METABIT METABIT









Sun-2 Keyboard

Key Up

















Key Value Key Value Key Value Key Value Key Value Key Value Key Value Key Value
00 HOLE 01 BUCKYBITS+ 02 OOPS 03 OOPS 04 HOLE 05 OOPS 06 OOPS 07 OOPS
SYSTEMBIT











08 OOPS 09 OOPS 0A OOPS 0B OOPS 0C OOPS 0D OOPS 0E OOPS 0F OOPS
10 OOPS 11 OOPS 12 OOPS 13 OOPS 14 HOLE 15 OOPS 16 OOPS 17 NOP
18 HOLE 19 OOPS 1A OOPS 1B OOPS 1C HOLE 1D NOP 1E NOP 1F NOP
20 NOP 21 NOP 22 NOP 23 NOP 24 NOP 25 NOP 26 NOP 27 NOP
28 NOP 29 NOP 2A NOP 2B NOP 2C HOLE 2D OOPS 2E OOPS 2F NOP
30 HOLE 31 OOPS 32 OOPS 33 OOPS 34 HOLE 35 NOP 36 NOP 37 NOP
38 NOP 39 NOP 3A NOP 3B NOP 3C NOP 3D NOP 3E NOP 3F NOP
40 NOP 41 NOP 42 NOP 43 HOLE 44 OOPS 45 OOPS 46 NOP 47 HOLE
48 OOPS 49 OOPS 4A OOPS 4B HOLE 4C SHIFTKEYS+ 4D NOP 4e NOP 4F NOP
LEFTCTRL





50 NOP 51 NOP 52 NOP 53 NOP 54 NOP 55 NOP 56 NOP 57 NOP
58 NOP 59 NOP 5A HOLE 5B OOPS 5C OOPS 5D NOP 5E HOLE 5F OOPS
60 OOPS 61 OOPS 62 HOLE 63 SHIFTKEYS+ 64 NOP 65 NOP 66 NOP 67 NOP
LEFTSHIFT







68 NOP 69 NOP 6A NOP 6B NOP 6C NOP 6D NOP 6E SHIFTKEYS+ 6F NOP
RIGHTSHIFT

70 OOPS 71 OOPS 72 NOP 73 HOLE 74 HOLE 75 HOLE 76 HOLE 77 HOLE
78 BUCKYBITS+ 79 NOP 7A BUCKYBITS+ 7B HOLE 7C HOLE 7D HOLE 7E HOLE 7F RESET
METABIT METABIT









Micro Switch 103SD32-2 Keyboard

Unshifted

















Key Value Key Value Key Value Key Value Key Value Key Value Key Value Key Value
00 HOLE 01 BUCKYBITS+ 02 LF(2) 03 LF(3) 04 HOLE 05 TF(1) 06 TF(2) 07 TF(3)
SYSTEMBIT











08 TF(4) 09 TF(5) 0A TF(6) 0B TF(7) 0C TF(8) 0D TF(9) 0E TF(10) 0F TF(11)
10 TF(12) 11 TF(13) 12 TF(14) 13 c(’[’) 14 HOLE 15 RF(1) 16 ’+’ 17 ’−’
18 HOLE 19 LF(4) 1A ’\f’ 1B LF(6) 1C HOLE 1D SHIFTKEYS+ 1E ’1’ 1F ’2’
CAPSLOCK



20 ’3’ 21 ’4’ 22 ’5’ 23 ’6’ 24 ’7’ 25 ’8’ 26 ’9’ 27 ’0’
28 ’−’ 29 ’~’ 2A ’‘’ 2B ’\b’ 2C HOLE 2D ’7’ 2E ’8’ 2F ’9’
30 HOLE 31 LF(7) 32 STRING+ 33 LF(9) 34 HOLE 35 ’\t’ 36 ’q’ 37 ’w’
UPARROW









38 ’e’ 39 ’r’ 3A ’t’ 3B ’y’ 3C ’u’ 3D ’i’ 3E ’o’ 3F ’p’
40 ’{’ 41 ’}’ 42 ’_’ 43 HOLE 44 ’4’ 45 ’5’ 46 ’6’ 47 HOLE
48 STRING+ 49 STRING+ 4A STRING+ 4B HOLE 4C SHIFTKEYS+ 4D ’a’ 4E ’s’ 4F ’d’
LEFTARROW HOMEARROW RIGHTARROW SHIFTLOCK





50 ’f’ 51 ’g’ 52 ’h’ 53 ’j’ 54 ’k’ 55 ’l’ 56 ’;’ 57 ’:’
58 ’|’ 59 ’\r’ 5A HOLE 5B ’1’ 5C ’2’ 5D ’3’ 5E HOLE 5F NOSCROLL
60 STRING+ 61 LF(15) 62 HOLE 63 HOLE 64 SHIFTKEYS+ 65 ’z’ 66 ’x’ 67 ’c’
DOWNARROW LEFTSHIFT





68 ’v’ 69 ’b’ 6A ’n’ 6B ’m’ 6C ’,’ 6D ’.’ 6E ’/’ 6F SHIFTKEYS+
RIGHTSHIFT
70 NOP 71 0x7F 72 ’0’ 73 NOP 74 ’.’ 75 HOLE 76 HOLE 77 HOLE
78 HOLE 79 HOLE 7A SHIFTKEYS+ 7B ’ ’ 7C SHIFTKEYS+ 7D HOLE 7E HOLE 7F IDLE
LEFTCTRL RIGHTCTRL





Micro Switch 103SD32-2 Keyboard

Shifted

















Key Value Key Value Key Value Key Value Key Value Key Value Key Value Key Value
00 HOLE 01 BUCKYBITS 02 LF(2) 03 LF(3) 04 HOLE 05 TF(1) 06 TF(2) 07 TF(3)
SYSTEMBIT











08 TF(4) 09 TF(5) 0A TF(6) 0B TF(7) 0C TF(8) 0D TF(9) 0E TF(10) 0F TF(11)
10 TF(12) 11 TF(13) 12 TF(14) 13 c(’[’) 14 HOLE 15 RF(1) 16 ’+’ 17 ’−’
18 HOLE 19 LF(4) 1A ’\f’ 1B LF(6) 1C HOLE 1D SHIFTKEYS+ 1E ’!’ 1F ’"’
CAPSLOCK



20 ’#’ 21 ’$’ 22 ’%’ 23 ’&’ 24 ’\´’ 25 ’(’ 26 ’)’ 27 ’0’
28 ’=’ 29 ’^’ 2A ’@’ 2B ’\b’ 2C HOLE 2D ’7’ 2E ’8’ 2F ’9’
30 HOLE 31 LF(7) 32 STRING+ 33 LF(9) 34 HOLE 35 ’\t’ 36 ’Q’ 37 ’W’
UPARROW









38 ’E’ 39 ’R’ 3A ’T’ 3B ’Y’ 3C ’U’ 3D ’I’ 3E ’O’ 3F ’P’
40 ’[’ 41 ’]’ 42 ’_’ 43 HOLE 44 ’4’ 45 ’5’ 46 ’6’ 47 HOLE
48 STRING+ 49 STRING+ 4A STRING+ 4B HOLE 4C SHIFTKEYS+ 4D ’A’ 4E ’S’ 4F ’D’
LEFTARROW HOMEARROW RIGHTARROW SHIFTLOCK





50 ’F’ 51 ’G’ 52 ’H’ 53 ’J’ 54 ’K’ 55 ’L’ 56 ’+’ 57 ’∗’
58 ’\’ 59 ’\r’ 5A HOLE 5B ’1’ 5C ’2’ 5D ’3’ 5E HOLE 5F NOSCROLL
60 STRING+ 61 LF(15) 62 HOLE 63 HOLE 64 SHIFTKEYS+ 65 ’Z’ 66 ’X’ 67 ’C’
DOWNARROW LEFTSHIFT





68 ’V’ 69 ’B’ 6A ’N’ 6B ’M’ 6C ’<’ 6D ’>’ 6E ’?’ 6F SHIFTKEYS+
RIGHTSHIFT
70 NOP 71 0x7F 72 ’0’ 73 NOP 74 ’.’ 75 HOLE 76 HOLE 77 HOLE
78 HOLE 79 HOLE 7A SHIFTKEYS+ 7B ’ ’ 7C SHIFTKEYS+ 7D HOLE 7E HOLE 7F IDLE
RIGHTSHIFT LEFTCTRL





Micro Switch 103SD32-2 Keyboard

Caps Locked

















Key Value Key Value Key Value Key Value Key Value Key Value Key Value Key Value
00 HOLE 01 BUCKYBITS+ 02 LF(2) 03 LF(3) 04 HOLE 05 TF(1) 06 TF(2) 07 TF(3)
SYSTEMBIT











08 TF(4) 09 TF(5) 0A TF(6) 0B TF(7) 0C TF(8) 0D TF(9) 0E TF(10) 0F TF(11)
10 TF(12) 11 TF(13) 12 TF(14) 13 c(’[’) 14 HOLE 15 RF(1) 16 ’+’ 17 ’−’
18 HOLE 19 LF(4) 1A ’\f’ 1B LF(6) 1C HOLE 1D SHIFTKEYS+ 1E ’1’ 1F ’2’
CAPSLOCK



20 ’3’ 21 ’4’ 22 ’5’ 23 ’6’ 24 ’7’ 25 ’8’ 26 ’9’ 27 ’0’
28 ’−’ 29 ’~’ 2A ’‘’ 2B ’\b’ 2C HOLE 2D ’7’ 2E ’8’ 2F ’9’
30 HOLE 31 LF(7) 32 STRING+ 33 LF(9) 34 HOLE 35 ’\t’ 36 ’Q’ 37 ’W’
UPARROW









38 ’E’ 39 ’R’ 3A ’T’ 3B ’Y’ 3C ’U’ 3D ’I’ 3E ’O’ 3F ’P’
40 ’{’ 41 ’}’ 42 ’_’ 43 HOLE 44 ’4’ 45 ’5’ 46 ’6’ 47 HOLE
48 STRING+ 49 STRING+ 4A STRING+ 4B HOLE 4C SHIFTKEYS+ 4D ’A’ 4E ’S’ 4F ’D’
LEFTARROW HOMEARROW RIGHTARROW SHIFTLOCK





50 ’F’ 51 ’G’ 52 ’H’ 53 ’J’ 54 ’K’ 55 ’L’ 56 ’;’ 57 ’:’
58 ’|’ 59 ’\r’ 5A HOLE 5B ’1’ 5C ’2’ 5D ’3’ 5E HOLE 5F NOSCROLL
60 STRING+ 61 LF(15) 62 HOLE 63 HOLE 64 SHIFTKEYS+ 65 ’Z’ 66 ’X’ 67 ’C’
DOWNARROW LEFTSHIFT





68 ’V’ 69 ’B’ 6A ’N’ 6B ’M’ 6C ’,’ 6D ’.’ 6E ’/’ 6F SHIFTKEYS+
RIGHTSHIFT
70 NOP 71 0x7F 72 ’0’ 73 NOP 74 ’.’ 75 HOLE 76 HOLE 77 HOLE
78 HOLE 79 HOLE 7A SHIFTKEYS+ 7B ’ ’ 7C SHIFTKEYS 7D HOLE 7E HOLE 7F IDLE
LEFTCTRL RIGHTCTRL





Micro Switch 103SD32-2 Keyboard

Controlled

















Key Value Key Value Key Value Key Value Key Value Key Value Key Value Key Value
00 HOLE 01 BUCKYBITS+ 02 LF(2) 03 LF(3) 04 HOLE 05 TF(1) 06 TF(2) 07 TF(3)
SYSTEMBIT











08 TF(4) 09 TF(5) 0A TF(6) 0B TF(7) 0C TF(8) 0D TF(9) 0E TF(10) 0F TF(11)
10 TF(02) 11 TF(03) 12 TF(04) 13 c(’[’) 14 HOLE 15 RF(0) 16 OOPS 17 OOPS
18 HOLE 19 LF(4) 1A ’\f’ 1B LF(6) 1C HOLE 1D SHIFTKEYS+ 1E OOPS 1F OOPS
CAPSLOCK



20 OOPS 21 OOPS 22 OOPS 23 OOPS 24 OOPS 25 OOPS 26 OOPS 27 OOPS
28 OOPS 29 c(’^’) 2A c(’@’) 2B ’\b’ 2C HOLE 2D OOPS 2E OOPS 2F OOPS
30 HOLE 31 LF(7) 32 STRING+ 33 F(9) 34 HOLE 35 ’\t’ 36 CTRLQ 37 c(’W’)
UPARROW









38 c(’E’) 39 c(’R’) 3A c(’T’) 3B c(’Y’) 3C c(’U’) 3D c(’I’) 3E c(’O’) 3F c(’P’)
40 c(’[’) 41 c(’]’) 42 c(’_’) 43 HOLE 44 OOPS 45 OOPS 46 OOPS 47 HOLE
48 STRING+ 49 STRING+ 4A STRING+ 4B HOLE 4C SHIFTKEYS+ 4D c(’A’) 4E CTRLS 4F c(’D’)
LEFTARROW HOMEARROW RIGHTARROW SHIFTLOCK





50 c(’F’) 51 c(’G’) 52 c(’H’) 53 c(’J’) 54 c(’K’) 55 c(’L’) 56 OOPS 57 OOPS
58 c(’\’) 59 ’\r’ 5A HOLE 5B OOPS 5C OOPS 5D OOPS 5E HOLE 5F NOSCROLL
60 STRING+ 61 LF(15) 62 HOLE 63 HOLE 64 SHIFTKEYS+ 65 c(’Z’) 66 c(’X’) 67 c(’C’)
DOWNARROW LEFTSHIFT





68 c(’V’) 69 c(’B’) 6A c(’N’) 6B c(’M’) 6C OOPS 6D OOPS 6E OOPS 6F SHIFTKEYS+
RIGHTSHIFT
70 NOP 71 0x7F 72 OOPS 73 NOP 74 OOPS 75 HOLE 76 HOLE 77 HOLE
78 HOLE 79 HOLE 7A SHIFTKEYS+ 7B ’\0’ 7C SHIFTKEYS+ 7D HOLE 7E HOLE 7F IDLE
LEFTCTRL RIGHTCTRL





Micro Switch 103SD32-2 Keyboard

Key Up

















Key Value Key Value Key Value Key Value Key Value Key Value Key Value Key Value
00 HOLE 01 BUCKYBITS+ 02 OOPS 03 OOPS 04 HOLE 05 OOPS 06 OOPS 07 OOPS
SYSTEMBIT











08 OOPS 09 OOPS 0A OOPS 0B OOPS 0C OOPS 0D OOPS 0E OOPS 0F OOPS
10 OOPS 11 OOPS 12 OOPS 13 NOP 14 HOLE 15 OOPS 16 NOP 17 NOP
18 HOLE 19 OOPS 1A NOP 1B OOPS 1C HOLE 1D SHIFTKEYS+ 1E NOP 1F NOP
CAPSLOCK



20 NOP 21 NOP 22 NOP 23 NOP 24 NOP 25 NOP 26 NOP 27 NOP
28 NOP 29 NOP 2A NOP 2B NOP 2C HOLE 2D NOP 2E NOP 2F NOP
30 HOLE 31 OOPS 32 NOP 33 OOPS 34 HOLE 35 NOP 36 NOP 37 NOP
38 NOP 39 NOP 3A NOP 3B NOP 3C NOP 3D NOP 3E NOP 3F NOP
40 NOP 41 NOP 42 NOP 43 HOLE 44 NOP 45 NOP 46 NOP 47 HOLE
48 NOP 49 NOP 4A NOP 4B HOLE 4C SHIFTKEYS+ 4D NOP 4E NOP 4F NOP
SHIFTLOCK





50 NOP 51 NOP 52 NOP 53 NOP 54 NOP 55 NOP 56 NOP 57 NOP
58 NOP 59 NOP 5A HOLE 5B NOP 5C NOP 5D NOP 5E HOLE 5F NOP
60 NOP 61 OOPS 62 HOLE 63 HOLE 64 SHIFTKEYS+ 65 NOP 66 NOP 67 NOP
LEFTSHIFT





68 NOP 69 NOP 6A NOP 6B NOP 6C NOP 6D NOP 6E NOP 6F SHIFTKEYS+
RIGHTSHIFT
70 NOP 71 NOP 72 NOP 73 NOP 74 NOP 75 HOLE 76 HOLE 77 HOLE
78 HOLE 79 HOLE 7A SHIFTKEYS+ 7B NOP 7C SHIFTKEYS+ 7D HOLE 7E HOLE 7F RESET
LEFTCTRL RIGHTCTRL





VT100-Style Keyboard

Unshifted

















Key Value Key Value Key Value Key Value Key Value Key Value Key Value Key Value
00 HOLE 01 BUCKYBITS+ 02 HOLE 03 HOLE 04 HOLE 05 HOLE 06 HOLE 07 HOLE
SYSTEMBIT











08 HOLE 09 HOLE 0A STRING+ 0B STRING+ 0C STRING+ 0D STRING+ 0E HOLE 0F TF(1)
UPARROW DOWNARROW LEFTARROW RIGHTARROW



10 TF(2) 11 TF(3) 12 TF(4) 13 c(’[’) 14 ’1’ 15 ’2’ 16 ’3’ 17 ’4’
18 ’5’ 19 ’6’ 1A ’7’ 1B ’8’ 1C ’9’ 1D ’0’ 1E ’−’ 1F ’=’
20 ’‘’ 21 c(’H’) 22 BUCKYBITS+ 23 ’7’ 24 ’8’ 25 ’9’ 26 ’−’ 27 ’\t’
METABIT









28 ’q’ 29 ’w’ 2A ’e’ 2B ’r’ 2C ’t’ 2D ’y’ 2E ’u’ 2F ’i’
30 ’o’ 31 ’p’ 32 ’[’ 33 ’]’ 34 0x7F 35 ’4’ 36 ’5’ 37 ’6’
38 ’,’ 39 SHIFTKEYS+ 3A SHIFTKEYS+ 3B ’a’ 3C ’s’ 3D ’d’ 3E ’f’ 3F ’g’
LEFTCTRL CAPSLOCK









40 ’h’ 41 ’j’ 42 ’k’ 43 ’l’ 44 ’;’ 45 ’\´’ 46 ’\r’ 47 ’\’
48 ’1’ 49 ’2’ 4A ’3’ 4B NOP 4C NOSCROLL 4D SHIFTKEYS+ 4E ’z’ 4F ’x’
LEFTSHIFT



50 ’c’ 51 ’v’ 52 ’b’ 53 ’n’ 54 ’m’ 55 ’,’ 56 ’.’ 57 ’/’
58 SHIFTKEYS+ 59 ’\n’ 5A ’0’ 5B HOLE 5C ’.’ 5D ’\r’ 5E HOLE 5F HOLE
RIGHTSHIFT













60 HOLE 61 HOLE 62 ’ ’ 63 HOLE 64 HOLE 65 HOLE 66 HOLE 67 HOLE
68 HOLE 69 HOLE 6A HOLE 6B HOLE 6C HOLE 6D HOLE 6E HOLE 6F HOLE
70 HOLE 71 HOLE 72 HOLE 73 HOLE 74 HOLE 75 HOLE 76 HOLE 77 HOLE
78 HOLE 79 HOLE 7A HOLE 7B HOLE 7C HOLE 7D HOLE 7E HOLE 7F IDLE

VT100-Style Keyboard

Shifted

















Key Value Key Value Key Value Key Value Key Value Key Value Key Value Key Value
00 HOLE 01 BUCKYBITS+ 02 HOLE 03 HOLE 04 HOLE 05 HOLE 06 HOLE 07 HOLE
SYSTEMBIT











08 HOLE 09 HOLE 0A STRING+ 0B STRING+ 0C STRING+ 0D STRING+ 0E HOLE 0F TF(1)
UPARROW DOWNARROW LEFTARROW RIGHTARROW



10 TF(2) 11 TF(3) 12 TF(4) 13 c(’[’) 14 ’!’ 15 ’@’ 16 ’#’ 17 ’$’
18 ’%’ 19 ’^’ 1A ’&’ 1B ’∗’ 1C ’(’ 1D ’)’ 1E ’_’ 1F ’+’
20 ’~’ 21 c(’H’) 22 BUCKYBITS+ 23 ’7’ 24 ’8’ 25 ’9’ 26 ’−’ 27 ’\t’
METABIT









28 ’Q’ 29 ’W’ 2A ’E’ 2B ’R’ 2C ’T’ 2D ’Y’ 2E ’U’ 2F ’I’
30 ’O’ 31 ’P’ 32 ’{’ 33 ’}’ 34 0x7F 35 ’4’ 36 ’5’ 37 ’6’
38 ’,’ 39 SHIFTKEYS+ 3A SHIFTKEYS+ 3B ’A’ 3C ’S’ 3D ’D’ 3E ’F’ 3F ’G’
LEFTCTRL CAPSLOCK









40 ’H’ 41 ’J’ 42 ’K’ 43 ’L’ 44 ’:’ 45 ’"’ 46 ’\r’ 47 ’|’
48 ’1’ 49 ’2’ 4A ’3’ 4B NOP 4C NOSCROLL 4D SHIFTKEYS+ 4E ’Z’ 4F ’X’
LEFTSHIFT



50 ’C’ 51 ’V’ 52 ’B’ 53 ’N’ 54 ’M’ 55 ’<’ 56 ’>’ 57 ’?’
58 SHIFTKEYS+ 59 ’\n’ 5A ’0’ 5B HOLE 5C ’.’ 5D ’\r’ 5E HOLE 5F HOLE
RIGHTSHIFT













60 HOLE 61 HOLE 62 ’ ’ 63 HOLE 64 HOLE 65 HOLE 66 HOLE 67 HOLE
68 HOLE 69 HOLE 6A HOLE 6B HOLE 6C HOLE 6D HOLE 6E HOLE 6F HOLE
70 HOLE 71 HOLE 72 HOLE 73 HOLE 74 HOLE 75 HOLE 76 HOLE 77 HOLE
78 HOLE 79 HOLE 7A HOLE 7B HOLE 7C HOLE 7D HOLE 7E HOLE 7F IDLE

VT100-Style Keyboard

Caps Locked

















Key Value Key Value Key Value Key Value Key Value Key Value Key Value Key Value
00 HOLE 01 BUCKYBITS+ 02 HOLE 03 HOLE 04 HOLE 05 HOLE 06 HOLE 07 HOLE
SYSTEMBIT











08 HOLE 09 HOLE 0A STRING+ 0B STRING+ 0C STRING+ 0D STRING+ 0E HOLE 0F TF(1)
UPARROW DOWNARROW LEFTARROW RIGHTARROW



10 TF(2) 11 TF(3) 12 TF(4) 13 c(’[’) 14 ’1’ 15 ’2’ 16 ’3’ 17 ’4’
18 ’5’ 19 ’6’ 1A ’7’ 1B ’8’ 1C ’9’ 1D ’0’ 1E ’−’ 1F ’=’
20 ’‘’ 21 c(’H’) 22 BUCKYBITS+ 23 ’7’ 24 ’8’ 25 ’9’ 26 ’−’ 27 ’\t’
METABIT









28 ’Q’ 29 ’W’ 2A ’E’ 2B ’R’ 2C ’T’ 2D ’Y’ 2E ’U’ 2F ’I’
30 ’O’ 31 ’P’ 32 ’[’ 33 ’]’ 34 0x7F 35 ’4’ 36 ’5’ 37 ’6’
38 ’,’ 39 SHIFTKEYS+ 3A SHIFTKEYS+ 3B ’A’ 3C ’S’ 3D ’D’ 3E ’F’ 3F ’G’
LEFTCTRL CAPSLOCK









40 ’H’ 41 ’J’ 42 ’K’ 43 ’L’ 44 ’;’ 45 ’\´’ 46 ’\r’ 47 ’\’
48 ’1’ 49 ’2’ 4A ’3’ 4B NOP 4C NOSCROLL 4D SHIFTKEYS+ 4E ’Z’ 4F ’X’
LEFTSHIFT



50 ’C’ 51 ’V’ 52 ’B’ 53 ’N’ 54 ’M’ 55 ’,’ 56 ’.’ 57 ’/’
58 SHIFTKEYS+ 59 ’\n’ 5A ’0’ 5B HOLE 5C ’.’ 5D ’\r’ 5E HOLE 5F HOLE
RIGHTSHIFT













60 HOLE 61 HOLE 62 ’ ’ 63 HOLE 64 HOLE 65 HOLE 66 HOLE 67 HOLE
68 HOLE 69 HOLE 6A HOLE 6B HOLE 6C HOLE 6D HOLE 6E HOLE 6F HOLE
70 HOLE 71 HOLE 72 HOLE 73 HOLE 74 HOLE 75 HOLE 76 HOLE 77 HOLE
78 HOLE 79 HOLE 7A HOLE 7B HOLE 7C HOLE 7D HOLE 7E HOLE 7F IDLE

VT100-Style Keyboard

Controlled

















Key Value Key Value Key Value Key Value Key Value Key Value Key Value Key Value
00 HOLE 01 BUCKYBITS+ 02 HOLE 03 HOLE 04 HOLE 05 HOLE 06 HOLE 07 HOLE
SYSTEMBIT











08 HOLE 09 HOLE 0A STRING+ 0B STRING+ 0C STRING+ 0D STRING+ 0E HOLE 0F TF(1)
UPARROW DOWNARROW LEFTARROW RIGHTARROW



10 TF(2) 11 TF(3) 12 TF(4) 13 c(’[’) 14 ’1’ 15 c(’@’) 16 ’3’ 17 ’4’
18 ’5’ 19 c(’^’) 1A ’7’ 1B ’8’ 1C ’9’ 1D ’0’ 1E c(’_’) 1F ’=’
20 c(’^’) 21 c(’H’) 22 BUCKYBITS+ 23 ’7’ 24 ’8’ 25 ’9’ 26 ’−’ 27 ’\t’
METABIT









28 CTRLQ 29 c(’W’) 2A c(’E’) 2B c(’R’) 2C c(’T’) 2D c(’Y’) 2E c(’U’) 2F c(’I’)
30 c(’O’) 31 c(’P’) 32 c(’[’) 33 c(’]’) 34 0x7F 35 ’4’ 36 ’5’ 37 ’6’
38 ’,’ 39 SHIFTKEYS+ 3A SHIFTKEYS+ 3B c(’A’) 3C CTRLS 3D c(’D’) 3E c(’F’) 3F c(’G’)
LEFTCTRL CAPSLOCK









40 c(’H’) 41 c(’J’) 42 c(’K’) 43 c(’L’) 44 ’:’ 45 ’"’ 46 ’\r’ 47 c(’\’)
48 ’1’ 49 ’2’ 4A ’3’ 4B NOP 4C NOSCROLL 4D SHIFTKEYS+ 4E c(’Z’) 4F c(’X’)
LEFTSHIFT



50 c(’C’) 51 c(’V’) 52 c(’B’) 53 c(’N’) 54 c(’M’) 55 ’,’ 56 ’.’ 57 c(’_’)
58 SHIFTKEYS+ 59 ’\n’ 5A ’0’ 5B HOLE 5C ’.’ 5D HOLE 5E HOLE 5F HOLE
RIGHTSHIFT













60 HOLE 61 HOLE 62 c(’ ’) 63 HOLE 64 HOLE 65 HOLE 66 HOLE 67 HOLE
68 HOLE 69 HOLE 6A HOLE 6B HOLE 6C HOLE 6D HOLE 6E HOLE 6F HOLE
70 HOLE 71 HOLE 72 HOLE 73 HOLE 74 HOLE 75 HOLE 76 HOLE 77 HOLE
78 HOLE 79 HOLE 7A HOLE 7B HOLE 7C HOLE 7D HOLE 7E HOLE 7F IDLE

VT100-Style Keyboard

Key Up

















Key Value Key Value Key Value Key Value Key Value Key Value Key Value Key Value
00 HOLE 01 BUCKYBITS+ 02 HOLE 03 HOLE 04 HOLE 05 HOLE 06 HOLE 07 HOLE
SYSTEMBIT











08 HOLE 09 HOLE 0A NOP 0B NOP 0C NOP 0D NOP 0E HOLE 0F OOPS
10 OOPS 11 OOPS 12 OOPS 13 NOP 14 NOP 15 NOP 16 NOP 17 NOP
18 NOP 19 NOP 1A NOP 1B NOP 1C NOP 1D NOP 1E NOP 1F NOP
20 NOP 21 NOP 22 BUCKYBITS+ 23 NOP 24 NOP 25 NOP 26 NOP 27 NOP
METABIT









28 NOP 29 NOP 2A NOP 2B NOP 2C NOP 2D NOP 2E NOP 2F NOP
30 NOP 31 NOP 32 NOP 33 NOP 34 NOP 35 NOP 36 NOP 37 NOP
38 NOP 39 SHIFTKEYS+ 3A SHIFTKEYS+ 3B NOP 3C NOP 3D NOP 3E NOP 3F NOP
LEFTCTRL CAPSLOCK









40 NOP 41 NOP 42 NOP 43 NOP 44 NOP 45 NOP 46 NOP 47 NOP
48 NOP 49 NOP 4A NOP 4B NOP 4C NOP 4D SHIFTKEYS+ 4E NOP 4F NOP
LEFTSHIFT



50 NOP 51 NOP 52 NOP 53 NOP 54 NOP 55 NOP 56 NOP 57 NOP
58 SHIFTKEYS+ 59 NOP 5A NOP 5B HOLE 5C NOP 5D NOP 5E HOLE 5F HOLE
RIGHTSHIFT













60 HOLE 61 HOLE 62 NOP 63 HOLE 64 HOLE 65 HOLE 66 HOLE 67 HOLE
68 HOLE 69 HOLE 6A HOLE 6B HOLE 6C HOLE 6D HOLE 6E HOLE 6F HOLE
70 HOLE 71 HOLE 72 HOLE 73 HOLE 74 HOLE 75 HOLE 76 HOLE 77 HOLE
78 HOLE 79 HOLE 7A HOLE 7B HOLE 7C HOLE 7D HOLE 7E HOLE 7F RESET

FILES

/dev/kbd

SEE ALSO

setkeys(1), click(1)

The SunView System Programmer’s Guide - Appendix: Writing a Virtual User Input Device Driver (describes Firm_event format)

Sun Release 3.2  —  Last change: 25 June 1986

Typewritten Software • bear@typewritten.org • Edmonds, WA 98026