If you press cursor key during keyboard test routine in zx rom then basic can show only NUMBER without SHIFT. I have small documentation about it from Czech HW guru, but in czech language :-(
For example if you will after press BREAK active CAPS SHIFT + SPACE parallel (in same time) then at 0.57 % basic return only SPACE without SHIFT.
If any software will often call keyboard reading then problem with ignore CAPS SHIFT will very very high and SHIFT combined keys will total unstable.
LOOP:
CALL #28E
... your routine
JR LOOP
Result:
CAPS SHIFT must be active minimum 400T (400T cpu at 3.5MHz) before active KEY. But 400T is not 100% methode, because some software (games) use own keyboard routines. Then longer time of SHIFT activity is best.
May be 3500T CPU or similar value.
Example of press cursor key LEFT:
1) user press cursor key LEFT on PC keyboard
2) ZXHID interface active only CAPS SHIFT (3500T CPU is active)
3) ZXHID interface active key "5" (now is key 5 and SHIFT both active)
4) after release cursor key LEFT must ZXHID deactive both keys.
-------------------------------------------------------------------------
info about basic:
keyboard routine in basic is called each interrupt (each 70000 T cpu) and routine for testing keyboard takes 400 T cpu. If user press cursor key out of interrupt routine then all is ok and zx rom detect SHIFT+KEY. Keyboard routine at begin test CAPS SHIFT and here is problem. You can press cursor key in this routine but after SHIFT test. Then routine not see SHIFT and read only KEY. Brobability of error is 0% if you press keys before call keyboard routine and very high during running keyboard routine.
I test it in zx emulators on PC (emulators active shift in same time as keys) and also here is problem. During first 100 clicks I see bugs.
1 PRINT INKEY$; : GOTO 1
This program very often read keyboard and show code of key. Please press and release repeatedly(500x) cursor key RIGHT. If you see number "8" then zx rom detect only key "8" without shift = error.