Next the modern keyboards. (MF stands for MultiFunctional.) The layout has changed: the function keys now form a top row. Function keys F11 and F12 were added. The ten keypad digit keys that served dual purposes (depending on NumLock and Shift) were duplicated so that digits and cursor movements could be produced without help from the Shift or Numlock keys. Also the Alt and Ctrl keys were duplicated. Prefixes e0 and e1 were introduced to distinguish old and new versions of the same old key. All modern keyboards follow this scheme, but many add a messy collection of "internet buttons" and "CD keys".

For keyboards with "Internet keys", see the next section.

This 121-key Nokia keyboard has ten function keys on the left and twenty-four on the two top rows. On the right a block with cursor keys and a block with numeric keys. There are three LEDs. The keys have brown markings, and sometimes also blue ones. Where both occur, the blue markings describe the usual PC keytops.

Roughly speaking, the scancodes are as expected. The function keys F1-F10,F11,F12 have scan codes 3b-44, 57, 58 as usual. The keys on the upper row, labeled F13-F24, yield the same codes as shifted F1-F12. E.g., F13 gives 2a 3b on press, and bb aa on release. The function keys F4,F11,F13-F19,F21,F24 have front labels CrSel, AltCr, Red, Pink, Green, Yellow, Blue, Turq, White, Col, USM.

The ten keys on the left have the following scancodes. First column of five: 01 (Attn/Esc/NxtTsk), as expected for Esc; 1d 3b (Quit/Reset), as expected for Ctrl F1; 1d 3c (ExSel), as expected for Ctrl F2; 1d 3d (Ident/Print), as expected for Ctrl F3; 1d 3e (Help/EnlW), as expected for Ctrl F4. For these last four keys (and the ChgSc/WSCtrl below) the code becomes 3b-3e (and 3f) when left or right Ctrl is pressed already. Second column of five: e1 1d 45 ((Break)/Clear/Pause/Test), and e0 46 with Ctrl, as expected for Pause/Break; 46 (ScrLock), as expected for ScrLock; e0 2a e0 37 (PrtSc/SysRq), and e0 37 with left or right Ctrl or left or right Shift, and 54 with left or right Alt, as expected for PrtSc; 1d 3f (ChgSc/WSCtrl), as expected for Ctrl F5; 38 e0 49 (Jump), as expected for Alt PgUp.

On the right a cursor key section and a number pad. The cursor key section has the expected block of six: e0 52 (Dup/Insert/PA1); e0 47 (Field Mark/Home/PA2); e0 49 (PA3/PgUp); e0 53 (Delete/DelWd); e0 4f (ErEOF/End/ErInp); e0 51 (PgDn). Next four arrow keys: e0 48 (Up); e0 4b (Left); e0 4d (Right); e0 50 (Down). And in the middle 1d 40 (Home), with code as expected for Ctrl F6.

Finally the numeric keypad, with the usual keys that generate the usual codes, and a single additional key, a Tab, with 0f like the ordinary tab.

Raul D. Miller <> and Timothy C. Hagman <> report:

The keyboard is a KeyPro FK-9000. The FCC label says it's made in Taiwan by Focus Electronic Co, Ltd. It has a built-in calculator.

This keyboard has twelve additional keys, with scancodes 55 (PF1), 6d (PF11), 6f (PF12), 73 (PF2), 74 (PF9), 77 (PF3), 78 (PF4), 79 (PF5), 7a* (PF6), 7b (PF7), 7c (PF8), 7e* (PF10).

The break codes equal the make codes ORed with 0x80, as always, but the Linux kernel eats fa and fe as protocol bytes.

The behavior of these keys is different from that of normal keys-- they generate nothing when pressed; then generate the above scancodes at the normal repeat time and rate, and then generate (except for the starred ones) their scancode ORed with 0x80 when released...

These PF keys are reprogrammable -- and programming occurs as a sequence of keyboard actions. Therefore, the PF keys duplicate whatever keyboard actions occurred during their programming. You hit the "Prog" key, then the PF key you want to program; type the string you want to store in the key (it's limited to 14 keypresses), and then hit the PF key again. After that, when you hit the PF key, it sends the string, and generates its own abnormal scancode upon release. When the key is held down, it generates the scancode repeatedly, but does not generate the string stored in it repeatedly.

When you go to program a key, the scancodes for "PF##-" are sent to the computer, then the scancodes for each key you hit as you hit it (the shift, etc. keys are an exception-- they send "s-" and such :), and then, when you hit the PF## key again to end the programming, it sends a sequence of (at least) 18 "0e 8e"s -- Backspaces...

The program key itself doesn't generate a scancode at any time. The same applies to the CE and AC/ON keys (part of the calculator). There is a switch to change between calculator and keyboard mode which generates no scancodes.

When the keyboard is in calculator mode, the entire numeric keypad (and everything else on the right side) generates no scancodes.

When the keyboard is not in caluclator mode, the %, MC, MR, M-, M+, and Square Root keys all generate ff when pressed, ff to repeat, and ff on release.

The little unlabeled key between the right Ctrl and right Alt generates 56 when hit, repeats that, and then d6 when released, just like a normal key.

This keyboard has one additional key, with escaped scancode e0 6f (Macro). (Funny enough it does this in all modes, each of the three scancode sets, translated or not. In particular, this Macro key is the only key that generates two bytes in scancode mode 3.)

These keyboards have seven additional keys, with escaped scancodes e0 0f (LeftCompose), e0 3d (F13), e0 3e (F14), e0 3f (Help), e0 40 (Do), e0 41 (F17), e0 4e (Keypad-minplus). (LK411 has all seven. LK450 has the last six - the report did not mention a Compose key.) There are only two LEDs. The keycaps are unusual.

In (translated) scancode Set 3 these keys give codes 68, 44, 42, 40, 3e, 65, 70. In untranslated Set 2, the F17 key gives e0 83.

An LK411 keyboard, with left and right hand side enlarged.

The keys labeled F18, F19, F20 produce the codes expected for PrtSc, ScrollLock, Pause. The keys labelled PF1, PF2, PF3, PF4 produce the codes expected for NumLock, Keypad-/, Keypad-*, Keypad--. The Keypad-, key produces the code 4e expected for Keypad-+. The Right ComposeCharacter key produces the code expected for RCtrl. The key labelled </> produces the code 29 expected for `/~. The key labelled with `/~/(Esc) produces the code expected for Esc.

This keyboard has one additional key, with escaped scancode e0 4c (Omni).

For the Northgate OmniKey 101 keyboard it is said that the command e8 reads a 2-byte ID.

Christian Gennerat <> writes: There are 4 extra keys on the Compaq Armada laptops. The four keys are located over the Esc-F1..F12, and are labelled *1-*4. Scancodes: 65, 67, 69, 6b.

The GRiD 2260 notebook has a key producing the 6c scancode; I do not know the keycap.

Kasper Dupont <> writes: My 10 year old 102-key keyboard that came with an "Olivetti PCS 286" actually has connectors for three additional keys just bellow Delete, End, and PgDn. There is no keys on the connectors, I only found them because I opened the keyboard for cleaning. The scancodes are from left to right 65, 66, 67.

According to Delorie the "Cherry G81-3000 SAx/04" keyboard has four additional keys, which can be made available by a user modification; the three new keys located directly below the cursor pad's Delete, End, and PgDn keys send make codes 66-68 (F19-F21); the fourth new key, labeled (delta), sends make code 73.

According to Delorie the "Accord" ergonomic keyboard with optional touchpad has an additional key above the Grey-Minus key marked with a left-pointing triangle and labeled "Fn" in the owner's booklet which sends make code e0 68.

Frank v Waveren <> reports: The Trust Ergo Track keyboard has one additional key (`application key'), with escaped scancode e0 68. The keycap is a triangle pointing left.

ABNT (Associação Brasileira de Normas Tecnicas) and ABNT2 are Brazilian keyboard layout standards. The plain Brazilian keyboard has 103 keys.

The Brazilian ABNT keyboard has two unusual keys, with scancodes 73 (/?) and 7e (Keypad-.). The former is located to the left of the RShift (which key therefore is less wide than usually), the latter below the Keypad-Plus (reducing the Keypad-Plus to single height).

Under Linux, the corresponding key codes are 89 and 121, respectively. These keys do not function with Windows NT 4.0.

Antonio Dias <> provided the keypad layout and writes: Brazilian ABNT2 keyboards come with two layouts. In MSDOS they call them ID 274 and ID 275.

Torben Fjerdingstad <> reports:

It's an rc930 keyboard, from Regnecentralen/RC International, Now ICL. This keyboard has four additional keys, with scancodes 59 (A1), 5a (A2), 5b (A3), 5c (A4).

The rc930/rc931 keyboards are not made anymore, because they had a problem with fast typists, writing over 400 chars/minute. Writing 'af<space>', very, very fast, did a PgUp.

Kjetil Torgrim Homme <> reports:

My Tandberg Data keyboard uses the prefix 80 for its numerous (20) extra keys. The 80 scancodes are:

11, 12, 13, 14, 16, 17, 18, 19, 1e, 1f, 20, 21, 22, 23, 25, 26, 2f, 30, 32, 56.

For completeness, the e0 scancodes:

1c, 2a, 35, 37, 47, 48, 49, 4b, 4d, 4f, 50, 51, 52, 53.

The e1 scancode: 1d. As you can see, there is no overlap on this keyboard.

Harald Arnesen <> gives the keycaps for these for the Tandberg TDV5020 keyboard. All use prefix 80 on both press and release.

Thirteen keys have (Norwegian) text: 11 HJELP (help), 14 STRYK (cut), 16 KOPI (copy), 17 FLYTT (move), 19 JUST (justify), 21 MERK (mark), 22 ANGRE (undo), 23 SKRIV (print), 25 SLUTT (exit), 26 FELT (field), 2f AVSN (paragraph), 30 SETN (sentence), and 32 ORD (word).

Seven keys have symbols: 12 /\/\/\ (insert soft hyphen), 13 [Crossed down-arrow] (move down five lines), 18 >> << (justify left/right), 1e <> >< (justify full/center), 1f |<- (backtab), 20 ->| (tab), and 56 [Back/down arrow] (start new paragraph).

Other keycaps also occur. Those given above were meant for use with the Notis WP word processor.

IBM makes the "Host Connected Keyboard" for PS/2 machines used as 3270 emulators. Delorie reports on the 122-key "Host Connected" keyboard. It may have 5b (F13), 5c (F14), 5d (F15), 63 (F16), 64 (F17), 65 (F18), 66 (F19), 67 (F20), 68 (F21), 69 (F22), 6a (F23), 6b (F24).

Safeway SW10 keyboard

The Safeway SW10 keyboard has the usual keys, including the three Windows keys, and including Power, Sleep, Wake keys (below Delete, End, PageDown) that do not produce scancodes unless the Fn key (above Keypad-Minus) is pressed simultaneously. This Fn key is used together with 11 keys: F1-F7, F11, Power, Sleep, Wake. Fn-F11 disables the keyboard and another Fn-F11 enables it again. Fn-F1/F2/F3/F4/F5/F6/F7 sets the repeat rate (on my keyboard I measured 2.0/4.0/6.7/12/26/32/32 chars/sec respectively).

This keyboard has four additional keys: Power (rose), Sleep (blue), WakeUp (green) and FN (yellow). In legacy mode these keys give the expected keycodes (e0 5e, e0 5f, e0 63, and none, respectively), but the interaction is funny. The four keys act as radiobuttons. Pressing one yields its key down code, but releasing it does not produce any scancodes. Now pressing another yields the down code for the other followed by the up code for the previous one. The FN key follows this pattern, only its scancode sequence is empty. Thus, pressing it causes the release code for a previous key to be emitted. Pressing a key a second time gives no reaction: the radiobutton was down already.

The current mechanism is unable to handle keyboards with more than 127 keys. But such keyboards seem to exist. Indeed, I now have a Safeway SW23 that has 132 keys.

Mark Hatle <> wrote:

On some ADB keyboards there are actually 128 distinct keys. They use scancodes 0-127.

ADB is Apple Desktop Bus. The way that ADB works is similar to SCSI but on a much slower level. Specifically there is a communications chip in the computer, ADB controller, and the same chip in the keyboard. The keyboard sends the scancode to its internal ADB controller, the internal ADB controller then does any key mapping needed (not used under linux from my understanding) and passes the data to the computer.

The ADB controller is capable of sending 256 distinct keys, but to my knowledge only 128 are sent. The key 0 is the 'a' and key 127 is the "power button".

Also some of the Apple ADB keyboards have special "sound" and "function" keys. These keys (used in MacOS for volume up and down, screen contrast changing, etc) also show up on the ADB scancodes.

ADB is used for both m68k and PPC Linux. The m68k Macintosh port, and the PPC - Power Macintosh and CHRP ports.

and later:

Basically the scancode sequences for ADB are 16 bit. so there can actually be 65536 scancodes, currently though only 128 are defined.

Mike A. Harris <> reports a keyboard (an "Mtek" keyboard, model "K208") where PrtSc/SysRq behaves like Pause/Break and also sends both make and break sequences when pressed and nothing when released. It does not repeat. (Thus, he gets e0 2a e0 37 e0 b7 e0 aa for PrtSc press, and 54 d4 for SysRq (i.e., Alt+PrtSc).) Others have reported the same (for an unspecified type of keyboard).