Diff for /xmil/io/subcpu.c between versions 1.6 and 1.7

version 1.6, 2004/08/13 06:49:31 version 1.7, 2004/08/20 08:41:41
Line 18  static const UINT8 dattbl[] = { 3, 0, 0, Line 18  static const UINT8 dattbl[] = { 3, 0, 0,
   
 void neitem_scpu(UINT id) {  void neitem_scpu(UINT id) {
   
           BRESULT intr;
   
         nevent_repeat(id);          nevent_repeat(id);
           intr = FALSE;
           // こうすると同時押しが判定できないのでキーバッファを持つべし
         if (keystat.req_int) {          if (keystat.req_int) {
                 keystat.req_int = 0;                  keystat.req_int = 0;
                   intr = TRUE;
           }
           else if (subcpu.keydata) {
                   subcpu.keycount++;
                   if (subcpu.keycount >= subcpu.keycountrep) {
                           subcpu.keycount = 0;
                           intr = TRUE;
                   }
           }
           if (intr) {
                 ievent_set(IEVENT_SUBCPU);                  ievent_set(IEVENT_SUBCPU);
         }          }
 }  }
Line 28  void neitem_scpu(UINT id) { Line 42  void neitem_scpu(UINT id) {
 BRESULT ieitem_scpu(UINT id) {  BRESULT ieitem_scpu(UINT id) {
   
         UINT    key;          UINT    key;
           UINT8   keydata;
   
         if ((subcpu.cmdcnt) || (subcpu.datacnt)) {          if ((subcpu.cmdcnt) || (subcpu.datacnt)) {
                 keystat.req_int = 1;                    // 再送しる                  keystat.req_int = 1;                    // 再送しる
Line 36  BRESULT ieitem_scpu(UINT id) { Line 51  BRESULT ieitem_scpu(UINT id) {
         if (!subcpu.Ex[4][0]) {                         // 割り込み不要だったら捨てる          if (!subcpu.Ex[4][0]) {                         // 割り込み不要だったら捨てる
                 return(FALSE);                  return(FALSE);
         }          }
         if (keystat.shift & 0x40) {                                     // キーが押された場合          key = keystat_getflag();
                 key = keystat_getflag();          keydata = (UINT8)(key >> 8);
                 subcpu.Ex[0x06][0] = (UINT8)(key >> 0);          if (subcpu.keydata != keydata) {
                 subcpu.Ex[0x06][1] = (UINT8)(key >> 8);                  subcpu.keydata = keydata;
                 if (!subcpu.Ex[0x06][1]) {              // 無効なキーだったら捨てる                  subcpu.keycount = 0;
                         return(FALSE);                  subcpu.keycountrep = 480;
                 }  
                 subcpu.INT_SW = 1;  
         }          }
         else {          else {
                 if (!subcpu.INT_SW) {                   // 何も押されてなかったら割り込まない                  if (keydata == 0) {
                         return(FALSE);                          return(FALSE);
                 }                  }
                 subcpu.INT_SW = 0;                  key = key & (~0x20);                    // rep
                 key = keystat_getflag();                  subcpu.keycountrep = 96;
                 subcpu.Ex[0x06][0] = (UINT8)(key >> 0);  
                 subcpu.Ex[0x06][1] = (UINT8)(key >> 8);  
         }          }
           subcpu.Ex[0x06][0] = (UINT8)key;
           subcpu.Ex[0x06][1] = keydata;
         subcpu.mode = 0xe6;          subcpu.mode = 0xe6;
         subcpu.cmdcnt = 0;          subcpu.cmdcnt = 0;
         subcpu.datacnt = 2;          subcpu.datacnt = 2;

Removed from v.1.6  
changed lines
  Added in v.1.7


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