Direction Key input

Hello Readers,

Today I am going to illustrate an input method where you can use for typing text and numbers using a device that has a limited set of physical keys. I call this input method “Direction Key input” or DKI in short.


The Concept

This is not a new concept. I remember I got aspired to develop this prototype when playing a game on the PSP (PlayStation Portable). The game had a name prompt but provided no on-screen keyboard, instead it presented something similar to what I am going to explain.

The idea behind the direction key input (DKI) is the fact that one has a limited set of hardware keys to input characters from an alphabet which has more characters than the hardware keys of the device.

So for example, a typical game console has four direction arrow keys (UP, DOWN, LEFT, RIGHT) and other action buttons (on PSP, they are the Triangle, Circle, X and the rectangle), which are button groups (1) and (9) as illustrated below:


Each two direction keys can be pressed together to create a new combination. For example, Up and Right pressed together will give the Up-Right direction.

The idea behind DKI is to break down the alphabet into N groups where N is the number of input buttons (in our test case we use the “ASDF” to be our input keys). In the case of the PSP, there are four input keys (check group button 9).

Let us now see how we can map the English alphabet which has 26 characters. First, let us figure out how many groups we need: 26 divided by 4 is 6.5. Meaning we need at least 7 groups to be able to accommodate all the English alphabet characters.

Now, let us associate each direction key (or their combination there of) with an individual group and its corresponding 4 characters.

From the image below, we can deduce the following:


  • [Group 1]- Up: ABCD
  • [Group 2] Up-Right: EFGH
  • [Group 3] Right: IJKL
  • [Group 4] Down-Left: MNOP
  • [Group 5] Down: QRST
  • [Group 6] Left: UVWX
  • [Group 7] Left-Up: YZ

In total, the direction keys give us a total of 10 direction groups (the previously listed groups and those: Up-Down, Left-Right and Left-Down). All those directions can be assigned to a set of N characters for the desired alphabet.

When you press a direction key, a group of N characters becomes selected. Now if you press one of the configured “input keys” (in this example “ASDF”) you will be able to select one of the characters in the current group. For example, if you pressed and heled the Up-Right key combination, then:

  • Pressing input key “A” gives –> “E” or the first character in the group
  • Pressing input key “S” gives –> “F” or the second character in the group
  • Pressing input key “D” gives –> “G” or the third character in the group
  • Pressing input key “F” gives –> “H” or the fourth and last character in the group

Similarly, when you press and hold the Down key, then you have the following mapping: “A for Q”, “S for R”, “D for S” and “F for T”.

In theory, to deduct how many key combinations we can have, we can use the following formula that works in function of the count of the input keys:

Total Number of Characters in An Alphabet that can be inputted with DKI = N * 10 (N being the number of desired input keys count)

In our example case, we are using 4 input keys and 4 direction keys (with 7 combinations) to type a message composed of an alphabet with 26 letters: 4 * 7 = 28 possible combinations

Using the DKI keyboard

First, you need to configure the DKI by assigning input buttons and a mapping of characters of the alphabet to various direction input combinations. DKI test program ships with the following key configuration:

; 4 keys mapping
; Groupping of keys mapped to direction keys

Which means, for each direction key combination, a new set of 4 alphabet characters are selected.

Now run DKI, press and hold valid direction key combination then press one of the input keys to select the proper letter:


Please feel free to change the key mappings and groups in such a way to make your typing much faster.

Closing words

In this article, I presented a concept which is implemented in C#. It can be implemented in any hardware that require text input (when displaying a full on-screen keyboard is not an option). Once you get used to typing using the direction keys and the N input buttons, then this input method will be enjoyable.

Please feel free leave your feedback or comments. You can download the sources or download the binaries from my Github repository.

Leave a Reply