Wednesday, August 28, 2024

Narrowing in on keyboard issue causing false parity checks

MECHANISM FROM KEYPRESS TO READING THE KEY CHARACTER CODE

It is important to understand what occurs from when the user pushes down on a key until the interrupt handler executes the XIO Read instruction to store the code in a memory location. This allows the reader to understand why the faulty signal is producing the wavering signal that leads to the parity check failing. 

When the key is mechanically pushed down, bails are twisted by tabs on the rear of the keystem and simultaneously contacts are pushed together at the bottom of the keystem. The bails activate contacts that can be triggered by every key which has a tab on its stem at the height of the particular bail. The contacts at the bottom of the keystem are unique to that key, while bail contacts are activated by a number of keys. 

Any key pressed down closes a common switch to feed +12V to the wiring of the permutation unit, where the combination of bail contacts activated and the keystem specific contact route the voltage to signals for bits 0 to 15 which encode that key character. 

The contacts are connected to the output bits using debouncer circuits, allowing them to stabilize before an XIO Read is executed to write the bit values into memory. However, the way that the programmer knows that a key was pressed involves triggering an interrupt on level 4.

All the sixteen bit lines from the debouncers are connected through an OR function. Actually half the bits are handled by each of two 4615 SLT cards, so there is an OR for each card. Those two signals are then connected by another OR gate to form the trigger for requesting a keyboard interrupt.

As long as the keyboard was selected (via an XIO Control instruction) the KB Sel lamp is lit and the trigger is connected to set a flipflop. The first of the sixteen bits of the encoded key character that turns on will set the flipflop and request an IL4 interrupt.

The keyboard remains mechanically latched with the key down, the contacts set, and no other key able to be depressed until an XIO Read is issued. The read will cause the character value bits to be placed in memory at the location specified in the XIO Read instruction. It then restores the keyboard, disconnecting the various contacts and shutting off the +12V to the permutation unit. It will remain idle until again selected by an XIO Control. 

The program code for the interrupt handler for IL4 determines that the interrupt comes from the keyboard, after which it issues the XIO Read and then resets the flipflop via a modifier bit on the XIO Sense Device instruction. 

EVIDENCE THAT A SIGNAL IS ARRIVING BEFORE THE KEY LATCHES THE CONTACTS


The yellow and green traces are the two contacts which encode the key I pressed, The turn on crisply near the right of the screen and hold steady due to the debouncers. The blue trace is the -parity check signal, which goes low to signal the parity error occurred. The purple trace is the interrupt request flipflop for the keyboard. 

What we see is that the interrupt is requested prematurely, before the keyboard has latched down and is driving stable signals for the character code. Ignoring the noise spikes caused by poor ground connection to the scope, we realize that some signal that is NOT our actual character bits must have switched on and activated the flipflop earlier. 

BIT 9 LINE IS PRODUCING THE PREMATURE TRIGGERING


Here we connected to the bit 9 signal in the green trace. We can see that it starts wobbling around and has fed through the OR gates to activate the interrupt request flipflop. Its continual wobbling eventually is confusing the parity check circuitry and triggering our parity check. 

During my next visit I will zoom in on that signal generation to figure out why the random flipping is taking place. This may be a broken wire, it may be a bail or keystem contact that is out of position and almost connected except for the vibration of pushing on a key, or it may be that the +12V is connected prematurely to the permutation unit before all contacts have settled down. Finally, it could be a wiring break from the permutation unit to the controller logic. 

No comments:

Post a Comment