Key Tronic KB 3270 Plus Keyboard
Note: You need a browser capable of displaying SVG images to see the keyboard layouts.
The KB 3270 Plus is a 122-key keyboard, for use (like the IBM 1397000) as a terminal emulation keyboard on the PC. Judging by comments in the published source code, it appears that this, or a similar model of keyboard, was the one used when support for function keys F13-F24 was added to Windows NT 3.5.
Unlike the IBM keyboard, the KB 3270 Plus supports both AT and XT communication protocols. It also has three different layouts. Both layout and protocol are selected using DIP switches.
The three layouts are:
- Native
- IRMA emulation
- Enhanced 101 Scan Code Set. This comes in two variants: 'Enhanced 101' (US) and 'Enhanced 102' (International).
A number of alternative keycaps are provided for the three layouts. This image shows it with the 'Enhanced 101' keycaps.
In addition to the standard layouts, the keyboard can also have a custom layout; it is supplied with two utilities, SE to edit a set of scancodes, and SL to load them into the keyboard. I believe that this ability is what distinguishes the KB 3270 Plus from the vanilla KB 3270.
The keyboard has a 5-pin XT / AT style connector. Mine was also supplied with a passive converter allowing it to be connected to a PS/2 socket.
Hardware
The keyswitches, as usual for a Key Tronic keyboard, are capacitative foam-on-foil, and will doubtless succumb in time to perished foam.
The controller is an 8051. Other components on the board include an 8k ROM containing the firmware, 8k of static RAM, a beeper, and a chip marked C5145B connected to the key matrix, which I presume handles the capacitative sensing.
Unlike on an IBM / Unicomp keyboard, there are no 'hidden' key positions without keys above them.
LEDs
The keyboard has the usual three LEDs. These are set in the keys they apply to, rather than in a separate panel.
DIP switches
The keyboard has eight DIP switches:
- Switch 1
- Switch on to use XT protocol, off for AT.
- Switch 2
- Switch on to select IRMA scancodes.
- Switch 3
- Switch on to select Enhanced 101 / 102 mode.
Switches 4 and 5 alter behaviour in the Enhanced 101 / 102 mode:
- Switch 4
- Switch on to filter out E0 xx scancodes.
- Switch 5
- Switch on for international layout (Enhanced 102), off for US layout (Enhanced 101).
- Switches 6, 7
- Unused.
- Switch 8
- Switch on to enable key click.
Keycaps
The KB 3270 Plus is supplied with enough keycaps to set up three different layouts, corresponding to the three supported sets of scancodes. The first layout is the 'Native' layout:
The 'IRMA' layout replaces the keys highlighted in blue and cyan. The ten keys on the left become F1-F10, PA3 becomes PrtSc, and the bottom row of the main area becomes Alt / Ctrl / Space / Reset [Dev Cncl] / Enter:
The 'Enhanced 101 / 102' layouts replace the keys highlighted in green and cyan. The bottom row of the main area becomes Ctrl / Alt / Space / Alt / Ctrl, and the six keys above the arrows become Insert / Home / PgUp and Delete / End / PgDn:
Identity
In the 'Enhanced 101 / 102' mode, the keyboard will respond to an identify command (0xF2). It returns the byte sequence 0xAB 0x83 (which may be translated to 0xAB 0x41). In other words, it identifies as a 102-key keyboard, not a 122-key.
If it is in 'Native' or 'IRMA' mode, the keyboard will respond with a NAK (0FEh).
Scancodes
Internally, the keyboard firmware uses a number from 1-9 to select which layout is in use:
- Enhanced 101 / 102: Set 1
- Enhanced 101 / 102: Set 2
- Enhanced 101 / 102: Set 3
- Native: Set 1
- Native: Set 2
- IRMA: Set 1
- IRMA: Set 2
- Undefined: Set 2 (See the DA 41 xx command below for more details)
- Undefined: Set 1
For a given layout, the keyboard will default to using scancode set 1 if the protocol is set to XT, or set 2 if it's set to AT.
If the computer sends a PS/2-type command (F0 xx) to the keyboard to select scancode set 1-3, this will, by the same token, put it in enhanced 101 / 102 mode. Native or IRMA mode cannot be selected by this method — see command DA 41 xx below.
The controller ROM contains nine scancode tables, but there is not a 1:1 match between these and the internal mode numbers. The nine internal tables are:
- Enhanced 101: Set 1
- Enhanced 101: Set 2
- Enhanced 101 / 102: Set 3
- Native: Set 1
- Native: Set 2
- IRMA: Set 1
- IRMA: Set 2
- Enhanced 102: Set 1
- Enhanced 102: Set 2
Throughout this section, keys highlighted orange return different scancodes from the ones in that position on a true blue IBM terminal emulation keyboard. Frequently (particularly with the top row of function keys) this takes the form of a key returning its Set 3 scancode even in Set 2.
XT Protocol / Set 1
Native mode
IRMA mode
Enhanced 101 mode (Switch 5 off: US)
Notes:
- The 11 keys between the main area and the number pad (highlighted blue) generate fake shift sequences depending on the state of Num Lock. If Num Lock is on and neither Shift key is pressed, they send E0 2A (fake Shift down) on key down, and E0 AA (fake Shift up) on key up. If Num Lock is off and either Shift key is pressed, they send E0 AA (fake Shift up) on key down, and E0 2A (fake Shift down) on key up. This matches the behaviour of a normal PS/2 keyboard. If switch 4 is on, the E0 will be omitted from all scancode sequences.
- The key between left-Shift and Z (highlighted yellow) sends 2A 33 B3 AA on press (Shift down, Comma down, Shift up, Comma up) and nothing on release. If Shift is pressed, it sends 34 B4 (Full stop down, Full stop up) on press and nothing on release.
- In the left-hand block, the bottom left and top left keys become duplicates of F11 and F12 respectively.
Enhanced 102 mode (Switch 5 on: International)
Notes:
- The 11 keys between the main area and the number pad (highlighted blue) generate fake shift sequences depending on the state of Num Lock. If Num Lock is on and neither Shift key is pressed, they send E0 2A (fake Shift down) on key down, and E0 AA (fake Shift up) on key up. If Num Lock is off and either Shift key is pressed, they send E0 AA (fake Shift up) on key down, and E0 2A (fake Shift down) on key up. This matches the behaviour of a normal PS/2 keyboard. If switch 4 is on, the E0 will be omitted from all scancode sequences.
- Note that the bottom left-hand key produces scancode 60, so its key-up code will be E0. This means it will not register as a key-up, but will instead be treated as part of an E0 xx extended keycode!
AT Protocol / Set 2
In the AT protocol, the keyboard returns the following scancodes. If the keyboard controller in the host PC has translation turned on, then they will be translated to the 'XT' / 'Set 1' scancodes listed above.
Native mode
IRMA mode
Enhanced 101 mode (Switch 5 off: US)
Notes:
- The 11 keys between the main area and the number pad (highlighted blue) generate fake shift sequences depending on the state of Num Lock. If Num Lock is on and neither Shift key is pressed, they send E0 12 (fake Shift down) on key down, and E0 F0 12 (fake Shift up) on key up. If Num Lock is off and either Shift key is pressed, they send E0 F0 12 (fake Shift up) on key down, and E0 12 (fake Shift down) on key up. This matches the behaviour of a normal PS/2 keyboard. If switch 4 is on, the E0 will be omitted from all scancode sequences.
- The key between left-Shift and Z (highlighted yellow) sends 12 41 F0 41 F0 12 on press (Shift down, Comma down, Shift up, Comma up) and nothing on release. If Shift is pressed, it sends 49 F0 49 (Full stop down, Full stop up) on press and nothing on release.
- In the left-hand block, the bottom left and top left keys become duplicates of F11 and F12 respectively.
Enhanced 101 mode (Switch 5 on: International)
- The 11 keys between the main area and the number pad (highlighted blue) generate fake shift sequences depending on the state of Num Lock. If Num Lock is on and neither Shift key is pressed, they send E0 12 (fake Shift down) on key down, and E0 F0 12 (fake Shift up) on key up. If Num Lock is off and either Shift key is pressed, they send E0 F0 12 (fake Shift up) on key down, and E0 12 (fake Shift down) on key up. This matches the behaviour of a normal PS/2 keyboard. If switch 4 is on, the E0 will be omitted from all scancode sequences.
- Note that the bottom left-hand key produces scancode 47. If the keyboard controller is translating scancodes, this will be translated to 60 and its key-up code to E0. This means it will not register as a key-up, but will instead be treated as part of an E0 xx extended keycode!
Set 3
In "Enhanced 101" and "Enhanced 102" modes, the keyboard supports Scancode Set 3. The scancodes are identical in both modes:
Only the keys shaded in grey return key-up scancodes.
Two keys differ from the behaviour of a real IBM terminal keyboard, or an IBM terminal emulator keyboard in set 3:
- The key with scancode 9 (which has a Ctrl keycap) returns a key-up code, which on an IBM keyboard it wouldn't.
- The key with scancode 5Ch (shaded orange) would return scancode 5Bh on a real IBM keyboard.
If the keyboard controller has translation turned on, these come out as:
Scancodes as a spreadsheet
All scancodes, listed in spreadsheet format.
User Defined Scancodes
It is possible to program the keyboard with user-defined scancodes. When setting these up, the keys are referred to using a numbering scheme that doesn't correspond to any particular scancode set:
The numbering is not contiguous; the gaps tend to correspond to spaces under double-sized keys, or gaps where an extra key could be inserted.
Commands
In addition to the usual PS/2 commands, the keyboard also accepts KB3270-specific commands. All of them begin with the hex byte 0DAh.
When the keyboard is using the PS/2 protocol, each command byte will be acknowledged with the standard 0FAh, as with other PS/2 commands.
Command | Description |
---|---|
DA 41 nn | Select scancode set. nn should be one of:
01: Native 02: IRMA 04: Undefined mode 08: Enhanced 101, set 1 10: Enhanced 101, set 2 20: Enhanced 101, set 3 40: User-defined set loaded with DA 43 command(s). As far as I can make out from the keyboard's microcontroller ROM and from experimentation, switching to what I've called 'undefined mode' sets an internal variable in the keyboard firmware, but doesn't select a new scancode set. The existing one appears to continue in use, but I suspect further undefined behaviour may creep in if a subsequent operation happens to change the controller's "dptr" register. It may be that this mode was avoided because when queried using the DA 44 command below, it would return 84h, one of the two values above 80h which is translated (to 54h) by the keyboard controller. |
DA 42 xx | Set the delay in milliseconds between each scancode in a multi-scancode macro. Followed by a single byte, giving the delay. |
DA 43 keynum flags count scancodes | Define the scancode returned by a key. keynum is the key number to define, using the numbering given above. flags give the shift state and other information: Bits 0-1: Shift state 0=Unshifted 1=Shift 2=Alt 3=Ctrl Bit 2: Set if key repeats count is the number of scancodes that follow. scancodes are the scancodes the key should return when pressed. |
DA 44 | Return identity and current scancode set. This is used by the supplied
software to detect a KB3270 keyboard. It returns three bytes:
DA xx yy xx appears to be a fixed keyboard ID or firmware version. On my KB3270 it is 48h; if the keyboard controller is translating scancodes, this is translated to 6Ch. yy gives the current scancode set: Bit 0: Native Bit 1: IRMA Bit 2: Undefined mode Bit 3: Enhanced 101 mode, set 1 Bit 4: Enhanced 101 mode, set 2 Bit 5: Enhanced 101 mode, set 3 Bit 6: User-defined scancode set Bit 7: Always set (so the value returned is in the range 80h-0FFh. This means that unless it's 83h or 84h, it will not be translated by the keyboard controller). |
DA 45 | Clear any user-defined scancodes, reverting to the native layout. |
The following IBM-compatible commands are also handled:
Command | Description |
---|---|
ED xx | Set LEDs. |
EE | Diagnostic echo. |
F0 xx | Get/set scancode set. F0 00
(get scancode set) can return the following values:
Code Translated Meaning 01 43 ENH101 mode, set 1 02 41 ENH101 mode, set 2 03 3F ENH101 mode, set 3 04 3D Native mode, set 1 05 3B Native mode, set 2 06 3C IRMA mode, set 1 07 58 IRMA mode, set 2 08 64 Undefined mode, set 2 09 44 Undefined mode, set 1F0 01 - F0 03 will switch into ENH101 mode and select the requested set. To select other modes, see DA 41 xx above. |
F2 | Read keyboard ID (only works in Enhanced mode). |
F3 xx | Set repeat rate and delay. |
F4 | Enable keyboard (clear errors). |
F5 | Disable keyboard. |
F6 | Set defaults. |
F7 | Set all keys to repeat. No keys will send break codes. |
F8 | Set all keys to give make/break codes. No keys will repeat. |
F9 | Set all keys to give make codes only. No keys will repeat or send break codes. |
FA | Set all keys to repeat and give make/break codes. |
FB | Set specified key(s) to repeat. They will not send break codes. Followed by a list of scancodes, which should be terminated by F4. |
FC | Set specified key(s) to give make/break codes. They will not repeat. Followed by a list of scancodes, which should be terminated by F4. |
FD | Set specified key(s) to give make codes only. They will not repeat or send break codes. Followed by a list of scancodes, which should be terminated by F4. |
FE | Resend last scancode. |
FF | Reset. The keyboard will respond with 0AAh (self-test passed) |
SCS Files
The keyboard is supplied with DOS software to load scancode files in the .SCS format into the keyboard RAM. The .SCS file format is a series of null-terminated strings; under UNIX, it's easiest to read their contents with a command like tr '\0' '\n' < file | less
The file begins with four fixed strings:
- Mode
- A single character: '0' for native mode, '1' for IRMA mode, '2' for enhanced mode.
- Description
- At most 20 characters: A description of the file contents.
- Number of keys
- Number of definitions in this file, 1-532.
- Delay
- In milliseconds: The delay in milliseconds between each scancode of a multi-scancode macro.
The rest of the file contains key definitions. Each one consists of four strings:
- Key number
- Key number to define (using the system described above), 1 to 133.
- Repeat?
- Y if the key repeats when held down, else N.
- Map
- 0-3: Which shift state is being defined?
0: Unshifted 1: Shift pressed 2: Alt pressed 3: Ctrl pressed
- Scancode(s)
- The scancode(s) this key should send when pressed. Up to 80 bytes. Note that the .SCS file contains the scancode stream as raw bytes, rather than any sort of hex representation.
Windows support
The standard Windows keyboard layouts from Windows NT 3.5 onward appear to have been designed to support a KB 3270 in 'Native', 'Enhanced 101' or 'Enhanced 102' modes. I'm not aware of any drivers to support the extra features such as switchable modes or user-defined scancodes, though I admit I haven't looked particularly hard for them.
Windows NT 3.5 supports the Clear, ErEOF and F13-F24 keys. The other keys return scancodes but not VK_ virtual keycodes.
Windows NT 4 and later also support the WsCtrl, Finish, Jump and Auto keys — and in native mode, PA1, PA3, Reset, Zoom (F11) and Help (F12).
John Elliott 15 November 2013.