Source: IBM PS/2 A Reference Guide, Intertext Publications, McGraw-Hill, 1989 (ISBN: 0-07-009527-2)
Author: TJ Byers
Keyboard Mechanics (Page 162 - 164)
The keyboard is actually a small computer in itself. The keyboard system
consists of a Motorola 6805 microprocessor within the keyboard and an Intel
8042 controller on the PS/2’s planar board. The 8042 keyboard controller
directs communications traffic between the computer and the keyboard. The
controller communicates with the keyboard via a serial link that supports an
11-bit protocol with parity checking.
The microprocessor detects depressed keys by scanning the keyboard in
logical order and analyzing each key’s status. All keys are classified as
being in one of two states: make or break. When a key is pressed, the 6805
microprocessor recognizes the condition and reports it to the PS/2 computer as
a key make. It does this by generating an interrupt signal and displaying the
scan line number of the key detected. When the key is released, it’s break
code is sent to the PS/2.
The keyboard processor also contains a 16-byte character buffer that allows
the keyboard to store up to 16 keystrokes. Should the PS/2 be busy and unable
to acknowledge an interrupt, the keyboard buffer safely s remembers the
keystroke until the PS/2 has time to assimilate the input. Should you exceed
the 16-character limit, the seventeenth keystroke is simply discarded.
Whenever a keyboard interrupt is generated, the BIOS program queries the
keyboard computer for the keystroke number. In order to successfully execute
the exchange, bi-directional communications must exist between the two units.
Communications between the PS/2 and keyboard are carried out through I/O ports
60h and 64h, input and output, respectively. For every keyboard interrupt, the
PS/2 responds with a keyboard query. Data transmissions to and from the
keyboard consist of an 11-bit word that is sent asynchronously over the serial
The keyboard and computer communicate over a pair of clock and data lines.
At the end of these lines is an open collector transistor that allows either
the keyboard or computer to force the line low. When a keystroke is detected,
the keyboard checks the status of the clock line. If the line is low, the
keystroke is stored in the buffer and transmission is deferred until a later
time. If, on the other hand, it finds the clock line high, the keyboard does a
similar check on the status of the data line. When both lines are high, it
means the computer is ready to accept data from the keyboard, and the keyboard
proceeds to send out it’s 11-bit code. The code begins with a 0 start bit,
followed by 8 data bits, a parity bit, and a stop bit. For each bit transmitted
over the data line, a coincidence bit is transmitted on the clock line. This
clock bit is used by the computer to decode the data bits. Please note that the
decoding process can only take place when the keylock on the front panel is on.
Keystrokes entered while the keylock is off (keyboard receiver inhibited) will
During transmission, the keyboard checks the clock line for a high level at
least every 60 ms. If the computer lowers the clock line after the keyboard
starts sending data, it signifies that the computer is unable to accept any
more data from the keyboard. Consequently, the keystroke is returned to the
buffer and communications halted until the clock line goes high again.
Instructions can also be sent from the computer to the keyboard. When the
computer wishes to communicate with the keyboard, the PS/2 forces the clock
line low for more than 60 ms while it prepares it’s message. This action
alerts the keyboard that an incoming message is pending. When the computer is
ready, it allows the clock line to go high while pulling the data line low. The
data is then sent over the data line, which by now has assumed a high-impedance
While all this is going on, the keyboard constantly checks the status of the
clock. As soon as the clock line goes high, it begins counting the computer
input bits. After the tenth bit, the keyboard forces the data line low. This
action signals the computer that the data was received. Each system command or
data transmission to the keyboard requires a response from the keyboard before
the system send it’s next output. Typically, the keyboard responds within
20 ms. If the keyboard response is invalid or has a parity error, the computer
sends the command or data again.
By knowing the timing sequence, it is possible to make modifications to the
keyboard through software. This two-way link is vital to the PS/2’s
performance. The two-way communications channel is also used to evaluate the
well-being of the keyboard’s microprocessor when the computer is first turned
on and after each reset operation. (Ed. This is the BAT - Basic Assurance
When passing data from the keyboard to the PS/2, though, you must be aware
that the keyboard’s microprocessor has no idea as to the significance of the
keys it is reporting. As far as it’s concerned, the keys have no meaning
whatsoever. Each key is assigned a unique 8-bit code which is transmitted to
the computer following a make. It is up to the BIOS program inside the PS/2 to
decide how the keystroke should be interpreted. The 8042 translates the scan
codes it receives from the 6805 to those recognized by the BIOS. The
translation table is stored in ROM on the 8042 chip and is not accessible to
programs. However, the PS/2 keyboard has the capability of switching scan code
sets. In fact, the keyboard offers a choice of three scan code sets.
International Keyboards (Pages 167 - 168)
An interesting feature of the IBM PS/2 is it’s international keyboard
design. IBM no doubt had it’s eye on a very large market when it conceived
the PS/2, and the keyboard reflects this attitude. In fact, the international
version of the PS/2 actually has a slightly different keyboard than the US
version. Instead of 101 keys, the international keyboard supports 102 keys.
This keyboard, which is referred to as the WT (World Trade) keyboard in IBM
documentation, is available only outside the US. It differs only slightly from
the US version in that it has an additional alphabetical key nestled in the
crook of the entry key, which is a larger, hook-shaped key rather than the slim
Entry key of the US keyboard. The backslash (\) is located between the Z and
the left shift key (as it was on the original IBM PC keyboard). Because the
PS/2 cannot distinguish between the two keyboards , the setup software asks the
user to identify the keyboard by indicating the shape of the Enter key.
The reason the PS/2 can support two different types of keyboards is the way
the BIOS handles keyboard inputs. As you recall, the keyboard is unaware of the
keystrokes it inputs to the system. It simply cites the number of downed key
when queried by the 8042 controller chip. It is the responsibility of the BIOS
chip to convert the key depressions into ASCII codes and symbols. In the normal
default mode, this translates into the US English set of ASCII alphanumeric
characters. In the international PS/2 models, another set of scan codes is used
to interpret keyboard input.
Programming Considerations (Pages 173 - 176)
Since the introduction of the IBM Personal Computer line in 1980, IBM has
changed the keyboard twice. The first change came with the release of the IBM
AT. The 84-key keyboard that accompanied the first model of the AT has a
different key layout and produces scan codes distinct from those of the
original 83-key PC keyboard. The scan code sets on the two keyboards are
different because, for reasons of physical circuit design, it is most efficient
to assign scan codes by key location. To maintain software application
compatibility with the two keyboards, IBM added a scan code translator to the
8042 controller. After translation, the controller’s output for a given
key is the same as that key’s output for the PC keyboard controller.
The 101-key enhanced keyboard used for the PS/2 introduced yet another
keyboard layout. However, instead of coming up with a new set of scan codes for
the new layout, IBM devised three. The Select Scan Code command (followed by an
option byte of 1, 2, or 3) activates the scan code set of that number. An
option byte of zero causes the keyboard to respond with the number of the
currently active scan code set. The code sets differ in the values generated
for the press and release of each key.
By default, the PS/2 keyboard boots to the 84-key set (set 2) used by the
original AT keyboard and does not recognize the presence of the new keys. For
most keys, it sends a single-byte press code and a two-byte release code
consisting of F0H followed by the press code. These codes need to be translated
by the BIOS interrupt 09H routine. For example, the “B” key sends scan code
32H to the BIOS, which interprets it as an “M”. However, with code
translation enabled, the 8042 controller translates the scan code to 30H, which
is properly interpreted by the BIOS as a “B”. The translation process also
converts each two-byte release code to a one-byte code that is the same as the
press code with the high bit turned on.
When scan code set 1 is activated, the keyboard produces codes that match
the result of translating scan code 2. For the keys common to the enhanced and
original PC keyboards, this code set produces the same press and release codes
as the original keyboard. In effect, this code set moves the translation from
the 8042 to the 6805, thus disabling scan code translation at the 8042 level.
Support for the 17 enhanced keys is available through the second scan code set.
However, only DOS 4.0 (Ed. and above) can access these extended keys from the
keyboard without special programming practices. When using DOS 3.3, you must
use the extended interrupt 16H BIOS functions, AH=10H and AH=11H.
Scan code set 3 is similar to scan code set 1 in that it produces the same
scan codes for the majority of the ASCII keys and uses the same press/release
coding convention. However, some keys are curiously reassigned. For example,
with the scan code set 3 activated and 8042 translation enabled, the CapsLock
key behaves like the left Ctrl key, and the NumLock key acts like Esc. In fact,
if the keyboard were to be relabeled, it would look exactly like the 84-key
layout of the original AT keyboard. The support for this scan code set is not
yet complete, and using it’s features may result in programming errors.