Have you tried GetKeys() or are you going off your reading of the documentation?
Using this code, at least with my ps2/adb adapter, is showing at least 5 non-modifier keys down simultaneously:
Code:
void main(void) {
KeyMap keys;
while(1) {
GetKeys(keys);
printf("%lx %lx %lx %lx\n", keys[0], keys[1], keys[2], keys[3]);
}
}
It is my opinion that the 2 non-modifier keys down simultaneously is a bit of a misrepresentation. The ADB protocol is only capable of conveying 2 key events in a single packet. A key event is either a key up or a key down. However, the system keeps track of the events and updates the keymap. So if you do 3 key down events, it will be distributed over two ADB packets, so there's no way they can be received "simultaneously", but the key down events are (eventually) received and the key map is updated. Modifier keys are called out separately because their state can be retrieved through a different ADB packet where all modifier keys can be retrieved in one transaction.
There's all kinds of caveats to this, since the Extended keyboard and later are capable of distinguishing between right and left modifier keys, but the ADB packet where all modifier keys are retrieved isn't capable of representing that distinction. The power key is also special since it can be the only key represented in a single ADB key event packet (it counts as 2 keys). And then there's the limitations of the keyboard hardware, which may have limitations on how many simultaneous key presses it is capable of detecting, or buffering for subsequent ADB transactions.
But, if you actually try the GetKeys() call, it does report more than 2 non-modifier keys being held down simultaneously.