User space GPIO matrix keyboard driver for Raspbery Pi. Can be used to put Raspberry Pi into an old computer case with a functional keyboard without any extra hardware like Arduino or Keyrah.
The code is designed for Commodore Plus/4 keyboard layout, but can be easily modifed to support other 80s and 90s computers' keyboards (Commodore 64, 8-bit Atari, Amiga, etc.)
cmake .
make
To install the keyboard driver as a systemd serice
sudo cmake install
This is the wiring used to define the cols, rows, and keymap. Additionally the LED pins can be connected to a free GPIO and GND for extra functionality (or simply +5v).

| Plus/4 Pin | Pi GPIO Pin | GPIO No. | Matrix map |
|---|---|---|---|
| 1 | 3 | 2 | Row 6 |
| 2 | 7 | 4 | Col 4 |
| 3 | - | - | LED GND |
| 4 | - | - | LED |
| 5 | 8 | 14 | Row 1 |
| 6 | 10 | 15 | Col 5 |
| 7 | 11 | 17 | Row 2 |
| 8 | 12 | 18 | Col 6 |
| 9 | 13 | 27 | Col 7 |
| 10 | 15 | 22 | Row 4 |
| 11 | 16 | 23 | Row 3 |
| 12 | 18 | 24 | Row 5 |
| 13 | 19 | 10 | Col 3 |
| 14 | 21 | 9 | Col 2 |
| 15 | 22 | 25 | Row 7 |
| 16 | 23 | 11 | Col 8 |
| 17 | 24 | 8 | Col 1 |
| 18 | 26 | 7 | Row 8 |
The Python script gpio_keyboard.py is my initial version of this driver. It has basically the same funcitonality except:
- Python
evdevdoes not seem to supportEV_REPon the uinput objects, so the emulated keyboard will not generate auto-repeat - At 60Hz scanning frequency it takes about 6% CPU compared to <1% for the C version.

