Diff for /np2/io/serial.c between versions 1.2 and 1.5

version 1.2, 2003/10/21 11:22:05 version 1.5, 2003/11/13 07:47:17
Line 96  void keystat_reset(void) { Line 96  void keystat_reset(void) {
         ZeroMemory(keystat, sizeof(keystat));          ZeroMemory(keystat, sizeof(keystat));
 }  }
   
   
 void keystat_senddata(BYTE data) {  void keystat_senddata(BYTE data) {
   
         BYTE    key = data & 0x7f;          BYTE    key;
         BOOL    keynochange = FALSE;          BOOL    keynochange;
   
           key = data & 0x7f;
           keynochange = FALSE;
   
           // CTRL:カナ 0x71,0x72 bit7==0でトルグ処理 (標準処理)
         if ((key == 0x71) || (key == 0x72)) {          if ((key == 0x71) || (key == 0x72)) {
                 if (data & 0x80) {                  if (data & 0x80) {
                         return;                          return;
Line 120  void keystat_senddata(BYTE data) { Line 125  void keystat_senddata(BYTE data) {
                         keystat[key] ^= 0x80;                          keystat[key] ^= 0x80;
                 }                  }
                 else {                  else {
                           // CTRL:カナ 0x79,0x7a bit7をそのまま通知
                           // (ハードウェアでメカニカル処理してる場合)
                           if ((key == 0x79) || (key == 0x7a)) {
                                   key -= 0x08;
                                   data -= 0x08;
                           }
                         if (!((keystat[key] ^ data) & 0x80)) {                          if (!((keystat[key] ^ data) & 0x80)) {
                                 keystat[key] ^= 0x80;                                  keystat[key] ^= 0x80;
                         }                          }
Line 154  void keystat_resetcopyhelp(void) { Line 165  void keystat_resetcopyhelp(void) {
         }          }
 }  }
   
   void keystat_allrelease(void) {
   
           UINT    i;
   
           for (i=0; i<0x80; i++) {
                   if (keystat[i] & 0x80) {
                           keystat[i] &= ~0x80;
                           keyb_out((BYTE)(i + 0x80));
                   }
           }
   }
   
 void keystat_forcerelease(BYTE value) {  void keystat_forcerelease(BYTE value) {
   
         if (keystat[value & 0x7f] & 0x80) {          if (keystat[value & 0x7f] & 0x80) {
Line 176  void keystat_resetjoykey(void) { Line 199  void keystat_resetjoykey(void) {
         }          }
 }  }
   
 BYTE keystat_getjoy(void) {  
   
         BYTE    ret = 0xff;  // ----
         BYTE    *p = (BYTE *)joykeytable;  
   typedef struct {
           BYTE    joysync;
           BYTE    joylast;
           BYTE    mouselast;
           BYTE    padding;
           BYTE    d_up;
           BYTE    d_dn;
           BYTE    d_lt;
           BYTE    d_rt;
   } KEYEXT;
   
   static  KEYEXT  keyext;
   static const BYTE mousedelta[] = {1, 1, 1, 1,
                                                                           2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 3, 3, 4};
   #define MOUSESTEPMAX ((sizeof(mousedelta) / sizeof(BYTE)) - 1)
   
   void keyext_flash(void) {
   
           keyext.joysync = 0;
   }
   
   BYTE keyext_getjoy(void) {
   
           BYTE    flg;
   const BYTE      *p;
         BYTE    bit;          BYTE    bit;
   
         for (bit=0x20; bit; bit>>=1, p+=2) {          if (!keyext.joysync) {
                 if ((keystat[*p] & 0x80) || (keystat[*(p+1)] & 0x80)) {                  keyext.joysync = 1;
                         ret &= ~bit;                  flg = 0xff;
                   p = joykeytable;
                   for (bit=0x20; bit; bit>>=1) {
                           if ((keystat[p[0]] & 0x80) || (keystat[p[1]] & 0x80)) {
                                   flg ^= bit;
                           }
                           p += 2;
                 }                  }
                   keyext.joylast = flg;
         }          }
           return(keyext.joylast);
   }
   
   BYTE keyext_getmouse(SINT16 *x, SINT16 *y) {
   
           BYTE    btn;
           BYTE    acc;
           SINT16  tmp;
           BYTE    ret;
   
           btn = keyext_getjoy();
           acc = btn | keyext.mouselast;
           keyext.mouselast = btn;
           tmp = 0;
           if (!(btn & 1)) {
                   tmp -= mousedelta[keyext.d_up];
           }
           if (!(acc & 1)) {
                   if (keyext.d_up < MOUSESTEPMAX) {
                           keyext.d_up++;
                   }
           }
           else {
                   keyext.d_up = 0;
           }
           if (!(btn & 2)) {
                   tmp += mousedelta[keyext.d_dn];
           }
           if (!(acc & 2)) {
                   if (keyext.d_dn < MOUSESTEPMAX) {
                           keyext.d_dn++;
                   }
           }
           else {
                   keyext.d_dn = 0;
           }
           *y += tmp;
   
           tmp = 0;
           if (!(btn & 4)) {
                   tmp -= mousedelta[keyext.d_lt];
           }
           if (!(acc & 4)) {
                   if (keyext.d_lt < MOUSESTEPMAX) {
                           keyext.d_lt++;
                   }
           }
           else {
                   keyext.d_lt = 0;
           }
           if (!(btn & 8)) {
                   tmp += mousedelta[keyext.d_rt];
           }
           if (!(acc & 8)) {
                   if (keyext.d_rt < MOUSESTEPMAX) {
                           keyext.d_rt++;
                   }
           }
           else {
                   keyext.d_rt = 0;
           }
           *x += tmp;
   
           ret = 0x5f;
           ret += (btn & 0x10) << 3;
           ret += (btn & 0x20);
         return(ret);          return(ret);
 }  }
   

Removed from v.1.2  
changed lines
  Added in v.1.5


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