--- np2/io/serial.c 2004/03/30 20:01:30 1.17 +++ np2/io/serial.c 2011/01/15 18:04:43 1.25 @@ -8,48 +8,46 @@ // ---- 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) { 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); + } } } static void IOOUTCALL keyboard_o41(UINT port, REG8 dat) { if (keybrd.cmd & 1) { - TRACEOUT(("send -> %02x", dat)); +// TRACEOUT(("send -> %02x", dat)); keystat_ctrlsend(dat); } + else { + keybrd.mode = dat; + } (void)port; } static void IOOUTCALL keyboard_o43(UINT port, REG8 dat) { - TRACEOUT(("out43 -> %02x %.4x:%.8x", dat, CPU_CS, CPU_EIP)); +// TRACEOUT(("out43 -> %02x %.4x:%.8x", dat, CPU_CS, CPU_EIP)); if ((!(dat & 0x08)) && (keybrd.cmd & 0x08)) { keyboard_resetsignal(); } @@ -64,15 +62,16 @@ static REG8 IOINPCALL keyboard_i41(UINT (void)port; keybrd.status &= ~2; - TRACEOUT(("in41 -> %02x %.4x:%.8x", keybrd.data, CPU_CS, CPU_EIP)); + pic_resetirq(1); +// TRACEOUT(("in41 -> %02x %.4x:%.8x", keybrd.data, CPU_CS, CPU_EIP)); return(keybrd.data); } static REG8 IOINPCALL keyboard_i43(UINT port) { (void)port; - TRACEOUT(("in43 -> %02x %.4x:%.8x", keybrd.status, CPU_CS, CPU_EIP)); - return(keybrd.status); +// TRACEOUT(("in43 -> %02x %.4x:%.8x", keybrd.status, CPU_CS, CPU_EIP)); + return(keybrd.status | 0x85); } @@ -85,14 +84,18 @@ static const IOINP keybrdi41[2] = { keyboard_i41, keyboard_i43}; -void keyboard_reset(void) { +void keyboard_reset(const NP2CFG *pConfig) { ZeroMemory(&keybrd, sizeof(keybrd)); keybrd.data = 0xff; + keybrd.mode = 0x5e; + + (void)pConfig; } void keyboard_bind(void) { + keystat_ctrlreset(); keybrd.xferclock = pccore.realclock / 1920; iocore_attachsysoutex(0x0041, 0x0cf1, keybrdo41, 2); iocore_attachsysinpex(0x0041, 0x0cf1, keybrdi41, 2); @@ -100,6 +103,7 @@ void keyboard_bind(void) { void keyboard_resetsignal(void) { + nevent_reset(NEVENT_KEYBOARD); keybrd.cmd = 0; keybrd.status = 0; keybrd.ctrls = 0; @@ -117,7 +121,8 @@ void keyboard_ctrl(REG8 data) { keybrd.ctr[(keybrd.ctrpos + keybrd.ctrls) & KB_CTRMASK] = data; keybrd.ctrls++; if (!nevent_iswork(NEVENT_KEYBOARD)) { - keyboard_int(NEVENT_ABSOLUTE); + nevent_set(NEVENT_KEYBOARD, keybrd.xferclock, + keyboard_callback, NEVENT_ABSOLUTE); } } } @@ -128,7 +133,8 @@ void keyboard_send(REG8 data) { keybrd.buf[(keybrd.bufpos + keybrd.buffers) & KB_BUFMASK] = data; keybrd.buffers++; if (!nevent_iswork(NEVENT_KEYBOARD)) { - keyboard_int(NEVENT_ABSOLUTE); + nevent_set(NEVENT_KEYBOARD, keybrd.xferclock, + keyboard_callback, NEVENT_ABSOLUTE); } } else { @@ -162,30 +168,30 @@ void rs232c_open(void) { void rs232c_callback(void) { - BOOL interrupt; + BOOL intr; - interrupt = FALSE; + intr = FALSE; if ((cm_rs232c) && (cm_rs232c->read(cm_rs232c, &rs232c.data))) { rs232c.result |= 2; if (sysport.c & 1) { - interrupt = TRUE; + intr = TRUE; } } else { - rs232c.result &= (BYTE)~2; + rs232c.result &= (UINT8)~2; } if (sysport.c & 4) { if (rs232c.send) { rs232c.send = 0; - interrupt = TRUE; + intr = TRUE; } } - if (interrupt) { + if (intr) { pic_setirq(4); } } -BYTE rs232c_stat(void) { +UINT8 rs232c_stat(void) { if (cm_rs232c == NULL) { cm_rs232c = commng_create(COMCREATE_SERIAL); @@ -304,7 +310,7 @@ static const IOOUT rs232co30[2] = { static const IOINP rs232ci30[2] = { rs232c_i30, rs232c_i32}; -void rs232c_reset(void) { +void rs232c_reset(const NP2CFG *pConfig) { commng_destroy(cm_rs232c); cm_rs232c = NULL; @@ -314,6 +320,8 @@ void rs232c_reset(void) { rs232c.pos = 0; rs232c.dummyinst = 0; rs232c.mul = 10 * 16; + + (void)pConfig; } void rs232c_bind(void) {