Anti-Ghosting Demystified

What is ghosting and how do you recognize it?

Ghosting is when some keyboard shortcuts don't work when several blocks of keys are struck simultaneously. This is purely a logical problem in keyboards with a line/column matrix switching system, manifesting itself during game play when some buttons seem not to work, only to work very slowly, or work without being struck (as if by a ghost).

An example: imagine an oblique leftward movement from A to W. At the same time you wish to input another function with Q, which either doesn't work or is acknowledged by an additional S. The buttons either seem to be unresponsive, or the above-mentioned mass of letters generated by unstruck keys appears.

Even anti-ghosting keyboards can be affected!

Just because a keyboard is marketed with anti-ghosting capabilities does not mean all of its keys can really work simultaneously without problems. Often, only a certain number of keys are calibrated to function perfectly (for example, the WASD block and/or the direction keys). This is simpler, cheaper, and, from the perspective of a disinterested observer, covers the important bases anyway. You only run into problems once you move away from those specifically-protected keys.

What causes input to be lost?

Lost input is usually attributable to one of three possible causes: hardware incapable of evaluating the keyboard input (ghosting), software that doesn't support multiple simultaneous keystrokes (software issue), or a communication protocol that limits the number of keystrokes than can be transmitted simultaneously (USB versus PS/2).

Why can’t a keyboard read certain combinations?

Because we analysed interfaces on the previous page, we will now explore some of the problems encountered with keyboards. What causes them?

The contacts of a keyboard are not usually evaluated individually, but rather in their switching configuration, a kind of matrix of columns and rows (see illustration). This avoids having an individual lead for each button and recognizes keystrokes based on the pattern from the interconnected columns and rows. Let's look at some simple examples of how this method works:

1. One individual keystroke

Pressing a single button can be seen as the result of a particular combination of column and row, in which the conductor of column X is circuited with the lead of row Y:

If the controller checks the keyboard to see which key is being pressed, input signal recognition on the basis of column and row clearly identifies the key in question. There is only one possible combination for each key, leaving no room for misinterpretation.

2. Simultaneous keystrokes of two (or more) keys in different columns and rows

This case is clearly different:

Based on the different columns and rows, the two combinations remain easily distinguished and the logic is clear: each key has only one input recognition circuit, so no problems arise, so long as the keys in question fall into mutually discrete columns and rows.

3. Simultaneous keystrokes of two keys in the same column or row

This case is somewhat more complicated, but still solvable now:

The pattern still allows for a single clear identification of each key. Even if only one column with closed contacts is activated, the two rows allow for a clear distinction to be made. When two keys on the same line are struck, it is no longer four leads that are activated, but rather only three, because one lead is shared. This behaviour is called co-linear.

4. Simultaneous keystrokes of three keys in the same block

Here we see a crack in the simple logic: the controller now registers two mutually circuited columns and rows. But by looking at the illustration, we see that there are four buttons on the grid that could have been pressed. The resulting pattern is therefore no longer unique. The following key combinations all seem identical to the controller:

For example, if W, S, and D are struck simultaneously, E appears as a ghost because the keyboard cannot distinguish between the four individual buttons. Once again, this is not a USB problem as is often falsely claimed, but a logical problem in the wiring of the keyboard. Some vendors guarantee the integrity of the WASD block, along with surrounding keys, plus the direction keys. Others go the distance and deliver real NKRO across the keyboard.

Summary

We can see that features like n-key rollover and PS/2 look good in theory. But what happens when the keyboard itself doesn't play along? The fact is that keyboards are more useful when more key blocks can be separately evaluated by the controller, and not just the WASD section.

For example, many gamers who prefer to use the ESDF block (and reconfigure their keyboards accordingly) are in for a rude awakening. That won't work for more than three adjacent keys without a special keyboard and an extended evaluation function. In the worst case, a gamer can solve the problem by assigning game functions to make sure that the keys are distributed so as to produce clear column/row patterns. And now we understand the reasoning behind such a solution.(Graphics: Microsoft)