Amstrad 2386 Keyboard


There are no resources about this keyboard and the protocol it uses to communicate with the PC. This keyboard works with Amstrad 2386 and 3386 computers, also branded as Sinclair-Amstrad APC 286 and 386, respectively. This keyboard is pretty rare to get nowadays. Without it, it is impossible to change BIOS setting and effectively to make the PC boot, assuming the CMOS battery in a vintage machine is likely dead.




Encoder Board

Communication Protocol

Unlike most of the other keyboards, including PC XT/AT and PS2, this keyboard has a keyboard encoder chip located inside the keyboard. Key presses are analysed and communicated to the PC, using Intel P8050AH micro-controller.


Keyboard is connected to the PC using a 5-wire cable with a 5-pin 240-degree DIN connector. The pin numbers and colors relate to the encoder board connector, internal to the keyboard, on the other side of the cable.

Signals available on the connector:

  • GND – ground.
  • +5V – power.
  • CLOCK – clock generated by the keyboard. Clock’s falling edge indicates that the DATA signal contains a valid bit state.
  • DATA – data bit transmitted by the keyboard.
  • READY/ACK – signal set by the PC, when high, keyboard can send the data to the PC. Upon boot, this signal is initially low and goes high during BIOS initialisation. It is not clear whether PC can use this signal in any point in time, to indicate that it is not capable of receiving data and to stop the keyboard from sending it. PC seems to be using it in repeatable points in time, which looks like it acknowledges reception of data sequences from the keyboard. On the other hand, if we remove the signal from the keyboard, the keyboard still seems to operate correctly. It is also not clear why the signal has always the form as presented on the picture below. More investigation is needed.


When READY/ACK signal from the PC is high, the keyboard can transmit data to the PC serially, using DATA signal and strobing the data with CLOCK signal (at its falling edge). The transmission speed is about 24450 bits per second. There are 3 different types of data sequences transmitted:

  • Initialisation sequence – sent by the keyboard after boot
  • Scan code sequence – for most of the keys there is 1 byte transmitted per key, but some keys transmit 2, 4 or 6 bytes at once. A single byte is transmitted using 11 bits of data.
  • LED status sequence – sent following a scan code for a key that has a LED status.

After one byte of a scan code is transmitted, the PC sends a READY/ACK signal to the keyboard. When this signal is low, keyboard will not transmit subsequent data, waiting for it to become high.

Initialisation sequence

After the PC and keyboard are powered on, READY/ACK signal is low. During BIOS initialisation, PC sets this signal high. As a response, the keyboard transmits two sequences of 33 and 22 bits to the PC:


The meaning and purpose of these sequences are not known.

Scan code sequence

A key press on the keyboard results in sending a scan code sequence to the PC. Most of the keys generate 1 byte of code. A byte is transmitted as 2 opening bits (always 1), 8 bits of the code and 1 closing bit (always 1) – a total of 11 bits.

Some keys generate more than 1 byte of code. ALT GR, right CTRL, keypad divide and keypad ENTER generate 2 bytes. Print screen, Break, Page Up/Down, Home, End, Insert, Delete and cursor keys generate 4 bytes. Pause generates 6 bytes.

LED status sequence

A scan code for a key with LED (CAPS LOCK, NUM LOCK, SCROLL LOCK) is always immediately followed by the current status of all three LEDs. The status is encoded using two 22-bit sequences:


The status of LEDs is put into bits indicates as C,N,S. The purpose of all other bits is not clear.

All scan codes