FixUpDown

© nemo 1999-2020

FixUpDown is a RISC OS module that prevents keyboard keypresses being missed or “sticking”

The current version is 1.14 (30 Jun 2020) [32bit]

For historical reasons, many versions of RISC OS debounce keypresses. For some USB and PS2 keyboards this results in keys being missed, or “sticking” down and repeating.

This module ensures all keypresses last long enough to avoid being debounced.

It has proven to be useful to some users of RO3 and RO4. I don’t know if RO5 still has the same problem.

For the record, the problem is caused by the fact that the RISC OS keyboard driver interface design dates back to the BBC Micro, and whereas the 6502 had little chance of pressing and releasing keys faster than the OS could notice, the ARM certainly can and does, rendering the implemented mechanism fragile and ineffective.

Under normal circumstances, it is not the keypress that causes a code to be inserted into the keyboard buffer, but the fact that one of two keys is still held down when checked by a 100Hz ticker – if the key has been pressed and released before that ticker fires, the OS never notices the key was touched. This is changed by keyboard handler Alt handling (the Beeb didn’t have Alt) which works in a different, more immediate way but only for those keys that have special Alt handling.

The RO5 Handler accidentally solves much of the problem by having lots of Alt handling (which works for those keys only), whereas the module fixes it by ensuring the key up/down events last long enough for the OS ticker to notice (which fixes it for everything).

Installation

There is no API. Just install it in <Boot$ToBeLoaded> – !Boot...Choices.Boot.PreDesk.