--- np2/io/serial.c 2004/01/13 05:30:58 1.8 +++ np2/io/serial.c 2004/02/11 17:39:59 1.10 @@ -47,49 +47,46 @@ static const UINT8 kbexflag[0x80] = { 0, 0, 0, 0, 0, 0, 0, 0}; -static void keyb_int(BOOL absolute) { +static void keybrd_int(BOOL absolute) { - if (keyb.buffers) { - if (!((pic.pi[0].irr | pic.pi[0].isr) & PIC_KEYBOARD)) { - keyb.status |= 2; - keyb.data = keyb.buf[keyb.pos]; - keyb.pos = (keyb.pos + 1) & KB_BUFMASK; - keyb.buffers--; - pic_setirq(1); + if (keybrd.buffers) { + if (!(keybrd.status & 2)) { + keybrd.status |= 2; + keybrd.data = keybrd.buf[keybrd.pos]; + keybrd.pos = (keybrd.pos + 1) & KB_BUFMASK; + keybrd.buffers--; } - nevent_set(NEVENT_KEYBOARD, pccore.keyboardclock, - keyb_callback, absolute); - } - else { - keyb.status &= ~2; + pic_setirq(1); + nevent_set(NEVENT_KEYBOARD, keybrd.xferclock, + keybrd_callback, absolute); } } -void keyb_callback(NEVENTITEM item) { +void keybrd_callback(NEVENTITEM item) { if (item->flag & NEVENT_SETEVENT) { - keyb_int(NEVENT_RELATIVE); + keybrd_int(NEVENT_RELATIVE); } } -static void keyb_out(REG8 data) { +static void keybrd_out(REG8 data) { - if (keyb.buffers < KB_BUF) { - keyb.buf[(keyb.pos + keyb.buffers) & KB_BUFMASK] = data; - keyb.buffers++; + if (keybrd.buffers < KB_BUF) { + keybrd.buf[(keybrd.pos + keybrd.buffers) & KB_BUFMASK] = data; + keybrd.buffers++; if (!nevent_iswork(NEVENT_KEYBOARD)) { - keyb_int(NEVENT_ABSOLUTE); + keybrd_int(NEVENT_ABSOLUTE); } } else { - keyb.status |= 0x10; + keybrd.status |= 0x10; } } // ---- - UINT8 keystat[0x80]; +static UINT8 keystat[0x80]; void keystat_reset(void) { @@ -101,6 +98,8 @@ void keystat_senddata(REG8 data) { REG8 key; BOOL keynochange; +const UINT8 *user; + UINT i; key = data & 0x7f; keynochange = FALSE; @@ -113,6 +112,17 @@ void keystat_senddata(REG8 data) { data = key | (keystat[key] & 0x80); keystat[key] ^= 0x80; } + else if ((key == 0x76) || (key == 0x77)) { // user key + user = np2cfg.userkey[key - 0x76]; + for (i=0; i