VOID KeyboardEvent(BOOL bPress, UINT out, UINT in) { if (nState != SM_RUN) // not in running state return; // ignore key if (in == 0x8000) // ON key ? { Chipset.IR15X = bPress?0x8000:0x0000; // refresh special ON key flag } else { // "out" is outside Keyboard_Row if (out >= ARRAYSIZEOF(Chipset.Keyboard_Row)) return; // in &= 0x1FF; // only IR[0:8] are wired on Clarke/Yorke chip _ASSERT(out < ARRAYSIZEOF(Chipset.Keyboard_Row)); if (bPress) // key pressed Chipset.Keyboard_Row[out] |= in; // set key marker in keyboard row else Chipset.Keyboard_Row[out] &= (~in); // clear key marker in keyboard row } AdjKeySpeed(); // adjust key repeat speed ScanKeyboard(FALSE,FALSE); // update Chipset.in register by 1ms keyboard poll Sleep(50); // hold key state for a definite time return; }
__interrupt void Timer0Ovf(void) { TCNT0 = 0x83; ScanKeyboard(); }