I keep fiddling with it and I think that maybe the lower set of addresses (C0F0-C0F8) are the upper switches and the higher addresses are the lower switches (C0F8-C0FF).

I suppose it has to be one or the other, and I think that's correct. It would make sense as the bar on screen will appear on pressing the lower switch and disappear on releasing the upper switch.

It would be good to run a little test program on a real Syntauri keyboard that would read those addresses.

just something simple like:
100 S=7:PRINT PEEK(49280+S*16+0),PEEK(49280+S*16+8):GOTO 100 REM SLOT 7 = C0F0
and then press the lowest key on the keyboard slowly.

Here's a short little program, and if you push the key down slowly enough it should show you which io location changes first:

100 S=7:IO=49280+S*16  :  REM 0XC080 + SLOT*16
120 IF U<>U0 OR D<>D0 THEN PRINT U" "D
125 U0=U:D0=D
130 GOTO 110

[Linked Image from i.imgur.com]

So when a key goes down it first hits the upper switch, and then the lower switch, the time delay being a measure of how fast you're pressing the key down.

delay = 0.026316 very quiet
delay = 0.013158 quiet
delay = 0 loudest

It doesn't seem to have many gradations in between loud and quiet. I hooked up my Sidewinder Precision Pro's throttle wheel (closest thing I've got to a paddle controller) to the joystick 2 x axis and set my delay to:

mykeysecondtimedown=machine().time().as_double()+(1.0/1520/100)*m_joy2x->read()*10; // the joystick reads between 0-255

and I can't hear too much in between the loud and the soft.

Last edited by Golden Child; 05/11/19 10:30 PM.