Jump to page content




IMSAI (IMS Associates, Inc.), also IMSAI Manufacturing Corporation, was one of the first companies to produce a microcontroller-based keyboard, the IKB-1, designed for their PCS-80/30 microcomputer system.


IMSAI’s IKB-1 Intelligent Keyboard appears to have been introduced in 1977, based on the documentation; this is the same year that Micro Switch announced what they claimed was the first intelligent keyboard. The IKB-1 uses an Intel 8035 microcontroller from their MCS-48 series; the 8035 does not contain any ROM capacity, so the firmware that drives the keyboard is supplied in a separate 4751 ROM chip. The IKB-1 could be bought in kit form, to be assembled by the owner.

The parts list includes a “Keyboard” item (IMSAI part 60-0500003) with the description of “Hytek DS6300, w/ Custom Caps”. As this keyboard is based on a Hi-Tek High Profile array, this entry was supposed to read “Hi-Tek DS6300”. With 63 keys in total, the “63” in “DS6300” appears to denote the key count. Full N-key rollover is provided using a 1N4148 (or 1N914) diode at each key position.

The keyboard is described as “programmable”, using the historical meaning of the word “programmable” to denote “configurable”. Choices such as serial or parallel output, ASCII or unencoded output, key remapping, and enabling and disabling lowercase support can all be made directly from the keyboard itself. This is a little misleading, as the choice of serial or parallel must also be hard-wired on the keyboard’s PCB using link wires. The Prog key is used to enable configuration (programming) mode, and the End Mode key is used to complete configuration. Program mode is indicated with a beep from the keyboard’s internal speaker as well as a status LED. A small number of settings can also be transmitted from the host to the keyboard. The full set of dynamic settings are as follows:

Setting Keystrokes Details Source
Parallel output RQ Keyboard
Serial output R1R7 The digits 1 to 7 select a transmission rate between 110 and 2400 baud
Revert to defaults D Sets uppercase-only encoded output on parallel Keyboard and host
Uppercase only U Keyboard
Enable lowercase L Shift Lock only affects the alphabetic keys and is cancelled with the shift key Keyboard and host
Substitute SAB Substitute key A with key B; control and shift are ignored; if A and B are both space, it appears to clear existing substitutions Keyboard
ASCII output E Enable output of ASCII characters Keyboard
Matrix state output V Enable continuous reporting of entire key matrix status Keyboard and host
Beep speaker Enable output of ASCII characters Host

There are two fundamental output behaviours from the IKB-1. The default mode generates ASCII codes, as keyboards of that era typically did. ASCII keyboards have a fundamental limitation in that they cannot report keys being held. This makes ASCII keyboards unsuitable for action games or music playback. The IKB-1’s alternate unencoded mode continually reports the entire matrix state, one row at a time. The keyboard is based on a pure 16×4 matrix (nearly the entire matrix is wired in a perfect grid), and in unencoded mode, each row is reported in turn in an endless cycle. Each output byte holds the row number 0–15 in its lower nybble, and the state of the four keys in that row in the upper nybble. Confusingly, the terms “row” and “column” are reversed: the PCB tracks that run the width of the keyboard are the “columns” and not the “rows”. Further, within each row report, pressed keys are indicated with 0, and released keys with 1.

The ability to enable unencoded mode is one of the few options that can be transmitted directly from the host device. This means that games and other application software that need to detect keys being held, can enable unencoded mode automatically. However, it is impossible to revert to encoded mode this way: the host is only able to reset to defaults (reverting to uppercase-only output in parallel mode) and re-enable lowercase support.

As documented, the IKB-1 has no permanent storage, and will lose all settings when power is lost.