IBM Enhanced Keyboard (101/102-key) matrix simulator (WIP)
This interactive tool simulates the key-matrix of a IBM Enhanced Keyboard (101/102-key) so that you can test if possible key combinations work without needing to test on a physical keyboard. Model M keyboards are all fundamentally two-key rollover (2KRO) due to the use of a membrane assembly, but this doesn't mean Model Ms cannot register more than 2 keys unlike popular belief. This tool demonstrates this and can allow you to see if a given Model M key-matrix would be suitable for your needs.
Disclaimer & notes
This tool is intended to be a guideline only. The results from any input are based on physical key-matrix data only and doesn't take into account firmware (ie, differing deghosting algorithm implementations or bugs/quirks). If you're using this tool as part of a purchasing decision, if possible, it would be prudent to try verifying results on a real keyboard someone you know has or ask on /r/modelm subreddit. The tool is also best viewed on desktop.
Only UK English functional layout is available for the ISO simulator at this time
![]() |
Firmware caution: A 3-key combination that may or may not be problematic depending on keyboard's firmware. A custom QMK-based controller would probably be fine with these, but IBM/Lexmark/Unicomp native firmware may not. |
![]() |
Hardware block: A N-key combination that will block in any circumstance due to the matrix's design. There is nothing you can do about these since they're a fundamental key-matrix limitation. |
Matrix
This is a tabular representation of the data used by the simulator above. A keyboard matrix is constructed from a series of columns (X-axis) and rows (Y-axis) whose intersections are used for key assignment. Such matrices allows a large number of keys to be driven by relatively few traces, as opposed to each key requiring its own circuit.
0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | A | B | C | D | E | F | |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
0 | k_esc | k_g | k_h | k_f6 | KC_NO | k_singlequote | k_f5 | KC_NO | KC_NO | kp_0 | kp_dot | k_up | k_lalt | KC_NO | k_f4 | k_nubs |
1 | k_tab | k_t | k_y | k_squarebrcl | k_f7 | k_squarebrop | k_backspace | k_lshift | kp_4 | kp_5 | kp_6 | KC_NO | KC_NO | KC_NO | k_f3 | k_caps |
2 | k_tild | k_5 | k_6 | k_equals | k_f8 | k_minus | k_f9 | KC_NO | k_del | k_ins | k_pgup | k_home | KC_NO | k_lctrl | k_f2 | k_f1 |
3 | k_1 | k_4 | k_7 | k_8 | k_9 | k_0 | k_f10 | KC_NO | k_f11 | k_f12 | k_pgdn | k_end | k_prscr | KC_NO | k_3 | k_2 |
4 | k_q | k_r | k_u | k_i | k_o | k_p | KC_NO | KC_NO | kp_7 | kp_8 | kp_9 | kp_plus | k_scrl | KC_NO | k_e | k_w |
5 | k_a | k_f | k_j | k_k | k_l | k_semicolon | k_backsl | KC_NO | kp_1 | kp_2 | kp_3 | kp_enter | KC_NO | KC_NO | k_d | k_s |
6 | k_z | k_v | k_m | k_cm | k_period | k_nuhs | k_return | k_rshift | kp_nl | kp_div | kp_mult | k_pause | KC_NO | k_rctrl | k_c | k_x |
7 | KC_NO | k_b | k_n | KC_NO | KC_NO | k_fwslash | k_space | KC_NO | k_down | k_right | kp_minus | k_left | k_ralt | KC_NO | KC_NO | KC_NO |
- Many thanks to Purdea Andrei (/u/_pandrew, purdeaandrei) for providing the IBM Enhanced Keyboard, Unicomp PC 122, Unicomp EnduraPro/Ultra Classic and Unicomp Mini Model M matrices and providing technical assistance.
- Many thanks to whiskerbiskit for helping to crack the Unicomp Mini Model M matrix.
- phosphorglow's IBM Space Saving Keyboard matrix was used for the IBM Space Saving Keyboard matrix simulator.