--- xmil/io/ctc.c 2004/08/13 01:35:59 1.8 +++ xmil/io/ctc.c 2004/08/13 03:47:23 1.10 @@ -173,25 +173,26 @@ BRESULT ieitem_ctc(UINT id) { if (intr) { for (i=0, bit=1; i<4; i++, bit<<=1) { if (intr & bit) { + if (!(ch->cmd[i] & 0x80)) { + intr ^= bit; + } #if 0 // アークスのタイミング→あとで修正 - if (0) + else if (0) #elif 1 - if ((ch->countmax[i] - ch->count[i]) >= 256) + else if (((ch->cmd[i] & 0x10) == 0) && + ((ch->countmax[i] - ch->count[i]) >= 256)) #elif 0 - if (((ch->count[i] * 17) >> 4) < ch->countmax[i]) + else if (((ch->count[i] * 17) >> 4) < ch->countmax[i]) #else - if (ch->count[i] != ch->countmax[i]) + else if (ch->count[i] != ch->countmax[i]) #endif { intr ^= bit; } - else if (!(ch->cmd[i] & 0x80)) { - intr ^= bit; - } else if (!r) { r = TRUE; intr ^= bit; -// TRACEOUT(("ctc int %d", i)); +// TRACEOUT(("ctc int %d %d", ch->num, i)); Z80_INTERRUPT((REG8)(ch->vector + (i << 1))); } } @@ -283,7 +284,7 @@ void IOOUTCALL ctc_o(UINT port, REG8 val CTCCH *ch; -// TRACEOUT(("ctc - %.4x %.2x [%.4x]", port, value, Z80_PC)); + TRACEOUT(("ctc - %.4x %.2x [%.4x]", port, value, Z80_PC)); ch = getctcch(port); if (ch != NULL) { ctcch_o(ch, port, value);