| version 1.13, 2004/03/07 23:04:51 | 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.pos]; | if (keybrd.ctrls) { | 
| keybrd.pos = (keybrd.pos + 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; | 
| keybrd.pos = 0; | keybrd.bufpos = 0; | 
 | 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) { | 
| keybrd.buf[(keybrd.pos + keybrd.buffers) & KB_BUFMASK] = data; | keybrd.buf[(keybrd.bufpos + keybrd.buffers) & KB_BUFMASK] = data; | 
 | keybrd.buffers++; | keybrd.buffers++; | 
 | if (!nevent_iswork(NEVENT_KEYBOARD)) { | if (!nevent_iswork(NEVENT_KEYBOARD)) { | 
 | keyboard_int(NEVENT_ABSOLUTE); | keyboard_int(NEVENT_ABSOLUTE); |