I spent a little bit of time looking into what might be possible without a controller replacement.
I too only have access to a Tandy 1000 keyboard, though it looks pretty much the same except for having a DIN-8 instead of a DIN-5. It might even be the same PCB.
![tandy-1000-top.jpg](./download/file.php?id=60206)
- tandy-1000-top.jpg (1.09 MiB) Viewed 6562 times
![tandy-1000-bottom.jpg](./download/file.php?id=60202)
- tandy-1000-bottom.jpg (1.47 MiB) Viewed 6562 times
The Technical Reference Manual isn't on Bitsavers, as was the Tandy 2000 linked to above. But it is on
The Oldskool PC.
The DIN pinout described there also matches what's on
KbdBabel Vintage Keyboard Documentation: Keyboard Connectors, with the unknown pin 2 being BUSY, which the PC can use to inhibit the keyboard. There's an appropriate resistor, so this doesn't need to actually be connected. Neither does RESET, since the converter doesn't really ever restart. But with everything connected, the adapter is something like this:
![tandy-1000-teensy.jpg](./download/file.php?id=60205)
- tandy-1000-teensy.jpg (402.31 KiB) Viewed 6562 times
I sketched out what this would look like for QMK
here, including details of the connections on that proto board. If the keyboard were really to be used with a modern system, some remapping for missing keys would no doubt be needed.
Note that CAPS and NUM LOCK can't really be remapped, since they maintain their LEDs inside the keyboard and toggle on alternate presses, with no code sent on release.
This initial version doesn't seem 100% reliable, unfortunately. Occasionally there is a spurious read of DATA as high instead of low. This can be a mess because it then looks like some key is stuck down. Better designed protocols have an all-keys-up code that substitutes for the last break code.
From the few I scoped earlier, it looked like the data line was stable before the clock line rose, as it needs to be.
![tandy-1000-make-A.png](./download/file.php?id=60204)
- tandy-1000-make-A.png (23.36 KiB) Viewed 6562 times
![tandy-1000-make-1.png](./download/file.php?id=60203)
- tandy-1000-make-1.png (24.51 KiB) Viewed 6562 times
But perhaps this isn't always the case. In which case a delay or a pull-down resistor or something like that might help. It's also possible that it's a problem with the rest of the USB stack doing something complicated sometimes. There is debug logging (Shift-Shift-D) for losing an interrupt altogether, so that doesn't seem to be it. And even though the minimum timing quoted in the spec is pretty tight, in actuality it seems to be about 30μs per bit, since after all it's coming from an 8048. A 16MHz AVR can keep up with that.