After getting most things working on the PIC16F88 I started looking at the timing. On the NeXT side, data needs to be transmitted after the channel select signal on the clock line, and there is only a few hundred microseconds on either side to do anything. On the PS/2 keyboard/mouse side, given the relatively slow transmission speeds, reading the data takes on the order of a millisecond. Basically, unless I want to run the PIC16F88 at a high clock rate and continuously sampling pins to detect bits, and then feeding detected bits into concurrent hierarchical state machines, we’re stuck. It’s doable, but the resulting code will be dense and almost impossible to understand. I actually started to write a simple state machine to PIC assembler compiler that would generate the concurrent state machines thinking it might be a better way to go…
Ultimately, I think the cleanest solution is to have multiple PIC processors… maybe 2 PIC12F683 or somesuch, one to handle keyboard/mouse and one to handle transmission to the NeXT. I can run a serial connection between the PICs at a high enough speed that we should be able to handle receiving data in the time window available on either side of data transmission to the NeXT.