Diff for /np2/io/serial.c between versions 1.18 and 1.22

version 1.18, 2004/03/31 11:59:18 version 1.22, 2004/06/12 15:32:53
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);
                   }
         }          }
 }  }
   
 static void IOOUTCALL keyboard_o41(UINT port, REG8 dat) {  static void IOOUTCALL keyboard_o41(UINT port, REG8 dat) {
   
         if (keybrd.cmd & 1) {          if (keybrd.cmd & 1) {
                 TRACEOUT(("send -> %02x", dat));  //              TRACEOUT(("send -> %02x", dat));
                 keystat_ctrlsend(dat);                  keystat_ctrlsend(dat);
         }          }
           else {
                   keybrd.mode = dat;
           }
         (void)port;          (void)port;
 }  }
   
 static void IOOUTCALL keyboard_o43(UINT port, REG8 dat) {  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)) {          if ((!(dat & 0x08)) && (keybrd.cmd & 0x08)) {
                 keyboard_resetsignal();                  keyboard_resetsignal();
         }          }
Line 64  static REG8 IOINPCALL keyboard_i41(UINT  Line 62  static REG8 IOINPCALL keyboard_i41(UINT 
   
         (void)port;          (void)port;
         keybrd.status &= ~2;          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);          return(keybrd.data);
 }  }
   
 static REG8 IOINPCALL keyboard_i43(UINT port) {  static REG8 IOINPCALL keyboard_i43(UINT port) {
   
         (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 | 0x85);          return(keybrd.status | 0x85);
 }  }
   
Line 89  void keyboard_reset(void) { Line 88  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) {
   
           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 101  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 119  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 131  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 {

Removed from v.1.18  
changed lines
  Added in v.1.22


RetroPC.NET-CVS <cvs@retropc.net>