Diff for /xmil/io/subcpu.c between versions 1.2 and 1.4

version 1.2, 2004/08/08 06:59:22 version 1.4, 2004/08/11 13:53:53
Line 3 Line 3
 #include        "z80core.h"  #include        "z80core.h"
 #include        "pccore.h"  #include        "pccore.h"
 #include        "iocore.h"  #include        "iocore.h"
   #include        "nevent.h"
   #include        "ievent.h"
 #include        "keystat.h"  #include        "keystat.h"
 #include        "calendar.h"  #include        "calendar.h"
   
   
 //                                                          e3 e4 e5 e6 e7 e8 e9 ea eb ec ed ee ef  //                                                          e3 e4 e5 e6 e7 e8 e9 ea eb ec ed ee ef
 static const UINT8 CMD_TBL[] = { 0, 1, 0, 0, 1, 0, 1, 0, 0, 3, 0, 3, 0};  static const UINT8 cmdtbl[] = { 0, 1, 0, 0, 1, 0, 1, 0, 0, 3, 0, 3, 0};
 static const UINT8 DAT_TBL[] = { 3, 0, 0, 2, 0, 1, 0, 1, 1, 0, 3, 0, 3};  static const UINT8 dattbl[] = { 3, 0, 0, 2, 0, 1, 0, 1, 1, 0, 3, 0, 3};
   
   
 //**********************************************************************  //**********************************************************************
   
 // キーボード割り込み  void neitem_scpu(UINT id) {
 short x1_sub_int(void) {                                                                // 990922  
           nevent_repeat(id);
           if (keystat.req_int) {
                   keystat.req_int = 0;
                   ievent_set(IEVENT_SUBCPU);
           }
   }
   
   BRESULT ieitem_scpu(UINT id) {
   
         UINT    key;          UINT    key;
   
         if ((!keystat.req_int) || (subcpu.cmdcnt) || (subcpu.datacnt) ||          if ((subcpu.cmdcnt) || (subcpu.datacnt)) {
                 (!Z80_ABLEINTERRUPT())) {                                               // 割り込めなかったら                  ievent_set(IEVENT_SUBCPU);
                 return(1);                                                                              // また来週〜                  return(FALSE);
         }          }
         keystat.req_int = 0;  
         if (!subcpu.Ex[4][0]) {                         // 割り込み不要だったら捨てる          if (!subcpu.Ex[4][0]) {                         // 割り込み不要だったら捨てる
                 return(1);                  return(FALSE);
         }          }
         if (keystat.shift & 0x40) {                                     // キーが押された場合          if (keystat.shift & 0x40) {                                     // キーが押された場合
                 key = keystat_getflag();                  key = keystat_getflag();
                 subcpu.Ex[0x06][0] = (UINT8)(key >> 0);                  subcpu.Ex[0x06][0] = (UINT8)(key >> 0);
                 subcpu.Ex[0x06][1] = (UINT8)(key >> 8);                  subcpu.Ex[0x06][1] = (UINT8)(key >> 8);
                 if (!subcpu.Ex[0x06][1]) {              // 無効なキーだったら捨てる                  if (!subcpu.Ex[0x06][1]) {              // 無効なキーだったら捨てる
                         return(1);                          return(FALSE);
                 }                  }
                 subcpu.INT_SW = 1;                  subcpu.INT_SW = 1;
         }          }
         else {          else {
                 if (!subcpu.INT_SW) {                   // 何も押されてなかったら割り込まない                  if (!subcpu.INT_SW) {                   // 何も押されてなかったら割り込まない
                         return(1);                          return(FALSE);
                 }                  }
                 subcpu.INT_SW = 0;                  subcpu.INT_SW = 0;
                 key = keystat_getflag();                  key = keystat_getflag();
Line 52  short x1_sub_int(void) {        // 99092 Line 61  short x1_sub_int(void) {        // 99092
         subcpu.OBF = 0;          subcpu.OBF = 0;
         subcpu.IBF = 1;          subcpu.IBF = 1;
   
         Z80_INT2(subcpu.Ex[4][0]);          Z80_INTERRUPT(subcpu.Ex[4][0]);
         return(0);          (void)id;
           return(TRUE);
 }  }
   
 //**********************************************************************  
   // ----
   
 void IOOUTCALL subcpu_o(UINT port, REG8 value) {  void IOOUTCALL subcpu_o(UINT port, REG8 value) {
   
Line 69  void IOOUTCALL subcpu_o(UINT port, REG8  Line 80  void IOOUTCALL subcpu_o(UINT port, REG8 
                 subcpu.mode = (UINT8)value;                  subcpu.mode = (UINT8)value;
                 subcpu.cmdcnt = 0;                  subcpu.cmdcnt = 0;
                 subcpu.datacnt = 0;                  subcpu.datacnt = 0;
                 if (value >= 0xd0 && value <= 0xd7) {                  if ((value >= 0xd0) && (value <= 0xd7)) {
                         subcpu.cmdcnt = 6;                          subcpu.cmdcnt = 6;
                         subcpu.datacnt = 0;                          subcpu.datacnt = 0;
                 }                  }
                 else if (value >= 0xd8 && value <= 0xdf) {                  else if ((value >= 0xd8) && (value <= 0xdf)) {
                         subcpu.cmdcnt = 0;                          subcpu.cmdcnt = 0;
                         subcpu.datacnt = 6;                          subcpu.datacnt = 6;
                 }                  }
                 else if (value >= 0xe3 && value <= 0xef) {                  else if ((value >= 0xe3) && (value <= 0xef)) {
                         subcpu.cmdcnt = CMD_TBL[value - 0xe3];                          subcpu.cmdcnt = cmdtbl[value - 0xe3];
                         subcpu.datacnt = DAT_TBL[value - 0xe3];                          subcpu.datacnt = dattbl[value - 0xe3];
                 }                  }
                 if (value < 0xe0) {                  if (value < 0xe0) {
                         subcpu.dataptr = offsetof(SUBCPU, Dx[value - 0xd0][0]);                          subcpu.dataptr = offsetof(SUBCPU, Dx[value - 0xd0][0]);
Line 227  void subcpu_reset(void) { Line 238  void subcpu_reset(void) {
   
         ZeroMemory(&subcpu, sizeof(subcpu));          ZeroMemory(&subcpu, sizeof(subcpu));
         subcpu.OBF = 1;          subcpu.OBF = 1;
           nevent_set(NEVENT_SUBCPU, pccore.realclock / 480,
                                                                                                   neitem_scpu, NEVENT_ABSOLUTE);
 }  }
   

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


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