|
|
| version 1.14, 2004/03/28 19:50:25 | version 1.15, 2004/03/30 07:12:03 |
|---|---|
| Line 9 | Line 9 |
| static void keyboard_int(BOOL absolute) { | static void keyboard_int(BOOL absolute) { |
| if (keybrd.buffers) { | if ((keybrd.ctrls) || (keybrd.buffers)) { |
| if (!(keybrd.status & 2)) { | if (!(keybrd.status & 2)) { |
| keybrd.status |= 2; | keybrd.status |= 2; |
| keybrd.data = keybrd.buf[keybrd.bufpos]; | if (keybrd.ctrls) { |
| keybrd.bufpos = (keybrd.bufpos + 1) & KB_BUFMASK; | keybrd.ctrls--; |
| keybrd.buffers--; | keybrd.data = keybrd.ctr[keybrd.ctrpos]; |
| keybrd.ctrpos = (keybrd.ctrpos + 1) & KB_CTRMASK; | |
| } | |
| else if (keybrd.buffers) { | |
| keybrd.buffers--; | |
| keybrd.data = keybrd.buf[keybrd.bufpos]; | |
| keybrd.bufpos = (keybrd.bufpos + 1) & KB_BUFMASK; | |
| } | |
| } | } |
| pic_setirq(1); | pic_setirq(1); |
| nevent_set(NEVENT_KEYBOARD, keybrd.xferclock, | nevent_set(NEVENT_KEYBOARD, keybrd.xferclock, |
| Line 31 void keyboard_callback(NEVENTITEM item) | Line 38 void keyboard_callback(NEVENTITEM item) |
| static void IOOUTCALL keyboard_o41(UINT port, REG8 dat) { | static void IOOUTCALL keyboard_o41(UINT port, REG8 dat) { |
| keybrd.mode = dat; | if (keybrd.cmd & 1) { |
| keystat_ctrl(dat); | |
| } | |
| (void)port; | (void)port; |
| } | } |
| Line 74 void keyboard_reset(void) { | Line 83 void keyboard_reset(void) { |
| ZeroMemory(&keybrd, sizeof(keybrd)); | ZeroMemory(&keybrd, sizeof(keybrd)); |
| keybrd.data = 0xff; | keybrd.data = 0xff; |
| keybrd.mode = 0x5e; | |
| } | } |
| void keyboard_bind(void) { | void keyboard_bind(void) { |
| Line 86 void keyboard_bind(void) { | Line 94 void keyboard_bind(void) { |
| void keyboard_resetsignal(void) { | void keyboard_resetsignal(void) { |
| keybrd.mode = 0x5e; | |
| keybrd.cmd = 0; | keybrd.cmd = 0; |
| keybrd.status = 0; | keybrd.status = 0; |
| keybrd.buffers = 0; | keybrd.buffers = 0; |
| Line 94 void keyboard_resetsignal(void) { | Line 101 void keyboard_resetsignal(void) { |
| keystat_resendstat(); | keystat_resendstat(); |
| } | } |
| void keyboard_ctrl(REG8 data) { | |
| if ((data == 0xfa) || (data == 0xfc)) { | |
| keybrd.ctrls = 0; | |
| } | |
| if (keybrd.ctrls < KB_CTR) { | |
| keybrd.ctr[(keybrd.ctrpos + keybrd.ctrls) & KB_CTRMASK] = data; | |
| keybrd.ctrls++; | |
| if (!nevent_iswork(NEVENT_KEYBOARD)) { | |
| keyboard_int(NEVENT_ABSOLUTE); | |
| } | |
| } | |
| } | |
| void keyboard_send(REG8 data) { | void keyboard_send(REG8 data) { |
| if (keybrd.buffers < KB_BUF) { | if (keybrd.buffers < KB_BUF) { |