|
|
| version 1.17, 2004/03/30 20:01:30 | version 1.19, 2004/03/31 19:23:37 |
|---|---|
| Line 8 | Line 8 |
| // ---- Keyboard | // ---- Keyboard |
| static void keyboard_int(BOOL absolute) { | |
| if ((keybrd.ctrls) || (keybrd.buffers)) { | |
| if (!(keybrd.status & 2)) { | |
| keybrd.status |= 2; | |
| if (keybrd.ctrls) { | |
| keybrd.ctrls--; | |
| 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; | |
| } | |
| TRACEOUT(("recv -> %02x", keybrd.data)); | |
| } | |
| pic_setirq(1); | |
| nevent_set(NEVENT_KEYBOARD, keybrd.xferclock, | |
| keyboard_callback, absolute); | |
| } | |
| } | |
| void keyboard_callback(NEVENTITEM item) { | void keyboard_callback(NEVENTITEM item) { |
| if (item->flag & NEVENT_SETEVENT) { | if (item->flag & NEVENT_SETEVENT) { |
| keyboard_int(NEVENT_RELATIVE); | if ((keybrd.ctrls) || (keybrd.buffers)) { |
| if (!(keybrd.status & 2)) { | |
| keybrd.status |= 2; | |
| if (keybrd.ctrls) { | |
| keybrd.ctrls--; | |
| 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; | |
| } | |
| TRACEOUT(("recv -> %02x", keybrd.data)); | |
| } | |
| pic_setirq(1); | |
| nevent_set(NEVENT_KEYBOARD, keybrd.xferclock, | |
| keyboard_callback, NEVENT_RELATIVE); | |
| } | |
| } | } |
| } | } |
| Line 64 static REG8 IOINPCALL keyboard_i41(UINT | Line 59 static REG8 IOINPCALL keyboard_i41(UINT |
| (void)port; | (void)port; |
| keybrd.status &= ~2; | keybrd.status &= ~2; |
| pic_resetirq(1); | |
| TRACEOUT(("in41 -> %02x %.4x:%.8x", keybrd.data, CPU_CS, CPU_EIP)); | TRACEOUT(("in41 -> %02x %.4x:%.8x", keybrd.data, CPU_CS, CPU_EIP)); |
| return(keybrd.data); | return(keybrd.data); |
| } | } |
| Line 72 static REG8 IOINPCALL keyboard_i43(UINT | Line 68 static REG8 IOINPCALL keyboard_i43(UINT |
| (void)port; | (void)port; |
| TRACEOUT(("in43 -> %02x %.4x:%.8x", keybrd.status, CPU_CS, CPU_EIP)); | TRACEOUT(("in43 -> %02x %.4x:%.8x", keybrd.status, CPU_CS, CPU_EIP)); |
| return(keybrd.status); | return(keybrd.status | 0x85); |
| } | } |
| Line 93 void keyboard_reset(void) { | Line 89 void keyboard_reset(void) { |
| void keyboard_bind(void) { | void keyboard_bind(void) { |
| keystat_ctrlreset(); | |
| keybrd.xferclock = pccore.realclock / 1920; | keybrd.xferclock = pccore.realclock / 1920; |
| iocore_attachsysoutex(0x0041, 0x0cf1, keybrdo41, 2); | iocore_attachsysoutex(0x0041, 0x0cf1, keybrdo41, 2); |
| iocore_attachsysinpex(0x0041, 0x0cf1, keybrdi41, 2); | iocore_attachsysinpex(0x0041, 0x0cf1, keybrdi41, 2); |
| Line 100 void keyboard_bind(void) { | Line 97 void keyboard_bind(void) { |
| void keyboard_resetsignal(void) { | void keyboard_resetsignal(void) { |
| nevent_reset(NEVENT_KEYBOARD); | |
| keybrd.cmd = 0; | keybrd.cmd = 0; |
| keybrd.status = 0; | keybrd.status = 0; |
| keybrd.ctrls = 0; | keybrd.ctrls = 0; |
| Line 117 void keyboard_ctrl(REG8 data) { | Line 115 void keyboard_ctrl(REG8 data) { |
| keybrd.ctr[(keybrd.ctrpos + keybrd.ctrls) & KB_CTRMASK] = data; | keybrd.ctr[(keybrd.ctrpos + keybrd.ctrls) & KB_CTRMASK] = data; |
| keybrd.ctrls++; | keybrd.ctrls++; |
| if (!nevent_iswork(NEVENT_KEYBOARD)) { | if (!nevent_iswork(NEVENT_KEYBOARD)) { |
| keyboard_int(NEVENT_ABSOLUTE); | nevent_set(NEVENT_KEYBOARD, keybrd.xferclock, |
| keyboard_callback, NEVENT_ABSOLUTE); | |
| } | } |
| } | } |
| } | } |
| Line 128 void keyboard_send(REG8 data) { | Line 127 void keyboard_send(REG8 data) { |
| keybrd.buf[(keybrd.bufpos + 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); | nevent_set(NEVENT_KEYBOARD, keybrd.xferclock, |
| keyboard_callback, NEVENT_ABSOLUTE); | |
| } | } |
| } | } |
| else { | else { |