Diff for /xmil/io/ctc.c between versions 1.5 and 1.6

version 1.5, 2004/08/11 12:08:16 version 1.6, 2004/08/11 13:53:53
Line 93  static void ctcstep(CTCCH *ch) { Line 93  static void ctcstep(CTCCH *ch) {
         intr = ctcwork(ch);          intr = ctcwork(ch);
         if (intr) {          if (intr) {
                 ch->intr |= intr;                  ch->intr |= intr;
                 TRACEOUT(("-> ievent_set"));  
                 ievent_set(IEVENT_CTC0 + ch->num);                  ievent_set(IEVENT_CTC0 + ch->num);
         }          }
 }  }
Line 114  static void ctcnextevent(CTCCH *ch) { Line 113  static void ctcnextevent(CTCCH *ch) {
                         if (ch->cmd[i] & 0x40) {                          if (ch->cmd[i] & 0x40) {
                                 clock = clock * 2;                                  clock = clock * 2;
                         }                          }
                         TRACEOUT(("ch %d -> %d :%.2x:%.8x", i, clock, ch->cmd[i], ch->count[i]));  
                         event = min(event, clock);                          event = min(event, clock);
                 }                  }
         }          }
Line 127  static void ctcnextevent(CTCCH *ch) { Line 125  static void ctcnextevent(CTCCH *ch) {
                                 clock = clock * 2;                                  clock = clock * 2;
                         }                          }
                 }                  }
                 TRACEOUT(("ch %d -> %d", 3, clock));  
                 event = min(event, clock);                  event = min(event, clock);
         }          }
         event /= 2;          event /= 2;
         event *= pccore.multiple;          event *= pccore.multiple;
         nevent_set(NEVENT_CTC0 + ch->num, event, neitem_ctc, NEVENT_ABSOLUTE);          nevent_set(NEVENT_CTC0 + ch->num, event, neitem_ctc, NEVENT_ABSOLUTE);
         TRACEOUT(("ctc -> %d (%x)", event, event));  
 }  }
   
 void neitem_ctc(UINT id) {  void neitem_ctc(UINT id) {
Line 145  void neitem_ctc(UINT id) { Line 141  void neitem_ctc(UINT id) {
         intr = ctcwork(ch);          intr = ctcwork(ch);
         if (intr) {          if (intr) {
                 ch->intr |= intr;                  ch->intr |= intr;
                 TRACEOUT(("-> ievent_set"));  
                 ievent_set(IEVENT_CTC0 + ch->num);                  ievent_set(IEVENT_CTC0 + ch->num);
         }          }
         else {          else {
Line 164  BRESULT ieitem_ctc(UINT id) { Line 159  BRESULT ieitem_ctc(UINT id) {
         ch = ctc.ch + (id - IEVENT_CTC0);          ch = ctc.ch + (id - IEVENT_CTC0);
         intr = ctcwork(ch);          intr = ctcwork(ch);
         intr |= ch->intr;          intr |= ch->intr;
         TRACEOUT(("ieitem_ctc %d - %.2x", id - IEVENT_CTC0, intr));  
         r = FALSE;          r = FALSE;
         if (intr) {          if (intr) {
                 for (i=0, bit=1; i<4; i++, bit<<=1) {                  for (i=0, bit=1; i<4; i++, bit<<=1) {
Line 185  BRESULT ieitem_ctc(UINT id) { Line 179  BRESULT ieitem_ctc(UINT id) {
                                 else if (!r) {                                  else if (!r) {
                                         r = TRUE;                                          r = TRUE;
                                         intr ^= bit;                                          intr ^= bit;
                                         TRACEOUT(("z80int %d", i));                                          Z80_INTERRUPT((REG8)(ch->vector + (i << 1)));
                                         Z80_INT((REG8)(ch->vector + (i << 1)));  
                                 }                                  }
                         }                          }
                 }                  }
         }          }
         TRACEOUT(("--> %.2x", intr));  
         ch->intr = intr;          ch->intr = intr;
         if (intr) {          if (intr) {
                 TRACEOUT(("-> ievent_set"));  
                 ievent_set(IEVENT_CTC0 + ch->num);                  ievent_set(IEVENT_CTC0 + ch->num);
         }          }
         else {          else {
Line 204  BRESULT ieitem_ctc(UINT id) { Line 195  BRESULT ieitem_ctc(UINT id) {
 }  }
   
   
   
   
 #if 0  
 void x1_ctc_int(void) {  
   
         CTCCH   *ch;  
         UINT    r;  
         SINT32  clk0;  
         SINT32  clk4;  
         SINT32  clk2;  
         SINT32  subcnt;  
         UINT    i;  
         REG8    bit;  
         REG8    ctcint_flg;  
   
         ctcint_flg = Z80_ABLEINTERRUPT();  
   
         clk4 = pccore.HSYNC_CLK;  
         clk2 = clk4 >> 1;  
   
         if (pccore.ROM_TYPE >= 2) {  
                 ch = ctc.ch + 0;  
                 r = 3;  
         }  
         else {  
                 ch = ctc.ch + 2;  
                 r = 1;  
         }  
   
         do {  
                 clk0 = 0;  
                 bit = 1;  
                 for (i=0; i<4; i++) {  
                         if (!(ch->cmd[i] & 0x02)) {  
                                 if (ch->count[i] <= 0) {  
                                         ch->count[i] += ch->countmax[i];  
                                 }  
                                 if (!(ch->cmd[i] & 0x40)) {  
                                         subcnt = clk4;  
                                 }  
                                 else if (i == 3) {  
                                         subcnt = clk0;  
                                 }  
                                 else {  
                                         subcnt = clk2;  
                                 }  
                                 ch->count[i] -= subcnt;  
                                 if (ch->count[i] <= 0) {  
                                         ch->int_flag |= bit;  
                                         if (!i) {  
                                                 clk0 = 1;  
                                         }  
                                 }  
                         }  
                         bit <<= 1;  
                 }  
   
                 bit = 1;  
                 for (i=0; i<4; i++) {  
                         if (ch->int_flag & bit) {  
                                 if (!(ch->cmd[i] & 0x80)) {  
                                         ch->int_flag ^= bit;  
                                 }  
                                 else if (ctcint_flg) {  
                                         ctcint_flg = 0;  
                                         ch->int_flag ^= bit;  
 //                                      TRACEOUT(("ctc%u int -- %d", 3 - r, i));  
                                         Z80_INT((REG8)(ch->vector + (i << 1)));  
                                 }  
                         }  
                         bit <<= 1;  
                 }  
                 ch++;  
         } while(--r);  
 }  
 #endif  
   
   
 // ----  // ----
   
 static void ctcch_o(CTCCH *ch, UINT port, REG8 value) {  static void ctcch_o(CTCCH *ch, UINT port, REG8 value) {
Line 367  void IOOUTCALL ctc_o(UINT port, REG8 val Line 280  void IOOUTCALL ctc_o(UINT port, REG8 val
   
         CTCCH   *ch;          CTCCH   *ch;
   
         TRACEOUT(("ctc - %.4x %.2x [%.4x]", port, value, Z80_PC));  //      TRACEOUT(("ctc - %.4x %.2x [%.4x]", port, value, Z80_PC));
         ch = getctcch(port);          ch = getctcch(port);
         if (ch != NULL) {          if (ch != NULL) {
                 ctcch_o(ch, port, value);                  ctcch_o(ch, port, value);

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


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