
With the successful completion of the humble hacker keyboard, I’ve decided to modify one of my Kinesis Contoured Keyboard keyboards so that I can use my firmware to gain additional programmability. I’m going to replace the existing controller with one based on the Teensy++. I’m starting with my second Kinesis board, a “Professional QD”. I don’t remember exactly when I bought this board, but the date on the controller board is 03/18/99.
Step One – determine the matrix
First, we have to discover the keyboard matrix – which is basically how individual keys map to pins on the keyboard connector. For a good description of how a keyboard matrix works, visit Dave Dribin’s Keyboard Matrix Help page.
With a normal keyboard, I would just wire the pins from the keyboard connector to my Teensy++, then load my firmware built in “Matrix Discovery Mode” (see bottom of linked page). Once installed, the matrix can be found simply by pressing keys on the keyboard. But the kinesis is a special case, in that there are essentially 6 individual keyboards joined together. To find the complete matrix, each individual board matrix must first be determined, then the main board has to be mapped out to find out how these are to be combined.
That last bit is not strictly necessary, as I am free to map each individual board however I want, but I thought it best to stick with the original layout. At the very least, someone else may find this information useful.
Below are the individual keyboard matrices. For the most part, I’ve labeled components as they are labeled on the PCBs.
Left hand

Exceptions to the board labeling are:
- The main connector
PL2had no label - Labels with more than two characters have been shortened (e.g.
SHIFT→LS,TAB→TB, etc.)
PL2/J2
| 6 | 7 | 8 | 10 | 11 | 12 | |
|---|---|---|---|---|---|---|
| 1 | \ |
IN |
LT |
RT |
||
| 2 | LS |
Z |
X |
C |
V |
B |
| 3 | CP |
A |
S |
D |
F |
G |
| 5 | TB |
Q |
W |
E |
R |
T |
| 13 | = |
1 |
2 |
3 |
4 |
5 |
Right hand

Note that the square brackets are labeled incorrectly on the PCB. That is, the left bracket is labeled as the right, and vice versa.
PR2/J7
| 1 | 2 | 3 | 6 | 12 | 13 | |
|---|---|---|---|---|---|---|
| 4 | UP |
DN |
[ |
] |
||
| 7 | NS |
, |
M |
RS |
. |
/ |
| 8 | H |
K |
J |
' |
L |
; |
| 9 | Y |
I |
U |
\ |
O |
P |
| 10 | 6 |
8 |
7 |
- |
9 |
0 |
Thumbs
![]()
Left thumb
PL1/J5
| 1 | 2 | 3 | 8 | |
|---|---|---|---|---|
| 4 | SL3 |
SL6 |
SL4 |
|
| 5 | SL1 |
SL5 |
SL2 |
Right thumb
PR1/J6
| 3 | 4 | 5 | 6 | |
|---|---|---|---|---|
| 7 | SR1 |
SR2 |
SR5 |
|
| 8 | SR4 |
SR3 |
SR6 |
Left function keys

PL3/J3
| 2 | 3,6,10 | 4,7,11 | |
|---|---|---|---|
| 1 | ESC |
F1 |
F2 |
| 8 | F3 |
F4 |
F5 |
| 5 | F6 |
F7 |
F8 |
Right function keys

PR2/J4
| 5 | 8,11 | 7,10 | |
|---|---|---|---|
| 8 | PB |
PG |
KY |
| 1 | F9 |
F10 |
F11 |
| 5 | F12 |
PS |
SL |
The two keys PG(Program) and KY(Keypad) in the table above are not actually connected as shown. They serve special purposes and are not part of the normal key matrix when using the Kinesis controller. Instead, they are connected as follows:
| 1 | 2 | |
|---|---|---|
| 3 | PG |
KY |
To add them to the matrix above, make the following connections:
J4-1 → J4-8J4-2 → J4-7J4-3 → J4-4
The combined matrix
This is the combined matrix based on how each individual keyboard is connected to the controller board.
Keys X1 and X2 in cells 5A and 4L do not exist. These are placeholders for the addition of extra keys below the shift keys.
| A | B | C | D | E | F | G | H | I | J | K | L | M | N | O | |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 1 | = | 1 | 2 | 3 | 4 | 5 | F6 | F7 | F8 | ||||||
| 2 | TB | Q | W | E | R | T | F3 | F4 | F5 | ||||||
| 3 | CP | A | S | D | F | G | ESC | F1 | F2 | ||||||
| 4 | LS | Z | X | C | V | B | UP | DN | [ | ] | X1 | F9 | F10 | F11 | |
| 5 | X2 | ` | IN | LT | RT | 6 | 7 | 8 | 9 | 0 | - | F12 | PS | SL | |
| 6 | SL1 | SL2 | SL5 | Y | U | I | O | P | PB | PG | KY | ||||
| 7 | SR4 | SR3 | SR6 | SL4 | SL3 | SL6 | H | J | K | L | ; | ‘ | |||
| 8 | SR1 | SR2 | SR5 | N | M | , | . | / | RS |
Since I’m not using the original controller, I’ve rearranged the different blocks and shifted some rows and columns to arrive at the more sensible matrix below.
| A | B | C | D | E | F | G | H | I | J | K | L | M | N | O | |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 1 | = | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 0 | - | ESC | F1 | F2 |
| 2 | TB | Q | W | E | R | T | Y | U | I | O | P | F3 | F4 | F5 | |
| 3 | CP | A | S | D | F | G | H | J | K | L | ; | ‘ | F6 | F7 | F8 |
| 4 | LS | Z | X | C | V | B | N | M | , | . | / | RS | F9 | F10 | F11 |
| 5 | X2 | ` | IN | LT | RT | UP | DN | [ | ] | X1 | F12 | PS | SL | ||
| 6 | SL1 | SL2 | SL5 | SR4 | SR3 | SR6 | PB | PG | KY | ||||||
| 7 | SL4 | SL3 | SL6 | SR1 | SR2 | SR5 |
To obtain this matrix, the rows and columns must be connected as follows:
| Row | Connection |
|---|---|
| 1 | J2-13; J7-10; J3-1 |
| 2 | J2-5; J7-9; J3-8 |
| 3 | J2-3; J7-8; J3-5 |
| 4 | J2-2; J7-7; J4-6 |
| 5 | J2-1; J7-4; J4-9 |
| 6 | J5-5; J6-8; J4-3,4 |
| 7 | J5-4; J6-7 |
| Col | Connections |
|---|---|
| A | J2-6 |
| B | J2-7 |
| C | J2-8; J5-2 |
| D | J2-10; J5-8 |
| E | J2-11; J5-1 |
| F | J2-12; J5-3 |
| G | J7-1; J6-3 |
| H | J7-3; J6-4 |
| I | J7-2; J6-5 |
| J | J7-12; J6-6 |
| K | J7-13 |
| L | J7-6 |
| M | J3-2; J4-5 |
| N | J3-3,6,10; J4-1,8,11 |
| O | J3-4,7,11; J4-2,7,10 |
Next up: building a replacement controller board!
Hi there, I sent you a PM on Geekhack. I’ve added 6 keys to my Kinesis Advantage, tapping the footswitch terminals, mod documented here: http://geekhack.org/showwiki.php?title=Island:26579
With the help of your article, I also discovered that at least on the recent Kinesis Advantage, there are not just 2 but 4 hidden keys. I put the info here: http://geekhack.org/showwiki.php?title=Island:8110&p=509615&viewfull=1#post509615
That post includes a screenshot from your article, I hope you don’t mind.
I wonder if there are even more unused “hidden keys” to be tapped on the main PCB traces, what do you think?
wow!!!. Great! This is what I want exactly… David,Thanks very much . it provides detail guide and knowledge for me like beginner. now I’d like to modify Kinesis contoured keyboard…. thanks again.
Great post, even though I don’t think I’ll try it ! However, I might be wrong but I think there is a mistake which has been repeated widely repeated over the net. You are saying that the angle brackets on the right hand key pad have incorrectly labelled. They are correct.
The keypad is show from underneath therefore the keys appear in reverse order as they are. The right bracket (closing one) is at the end of the keyboard, therefore the first one on your picture, which is the case. The labels are correct 😉
I’ve been searching for something like this the last couple of evenings. This is fantastic! I’m going to try to do something similar to my keyboard. Just wanted to say thanks.