--- xmil/ievent.c 2004/08/14 12:16:17 1.4 +++ xmil/ievent.c 2008/06/02 20:07:30 1.6 @@ -6,7 +6,7 @@ #include "ievent.h" -// ここでデイジーチェイン +/* ここでデイジーチェイン */ typedef BRESULT (*IEVENTFN)(UINT id); @@ -18,15 +18,15 @@ static BRESULT dummy(UINT id) { } static const IEVENTFN ieventfn[IEVENT_MAX] = { - dummy, // IEVENT_SIO - ieitem_dmac, // IEVENT_DMA - ieitem_ctc, // IEVENT_CTC0 - ieitem_ctc, // IEVENT_CTC1 - ieitem_ctc, // IEVENT_CTC2 - ieitem_scpu}; // IEVENT_SUBCPU + dummy, /* IEVENT_SIO */ + ieitem_dmac, /* IEVENT_DMA */ + ieitem_ctc, /* IEVENT_CTC0 */ + ieitem_ctc, /* IEVENT_CTC1 */ + ieitem_ctc, /* IEVENT_CTC2 */ + ieitem_scpu}; /* IEVENT_SUBCPU */ -// ---- +/* ---- */ void ievent_progress(void) { @@ -43,7 +43,7 @@ void ievent_progress(void) { if (CPU_REQIRQ & bit) { CPU_REQIRQ ^= bit; if (ieventfn[i](i)) { - if (i != IEVENT_SUBCPU) { // サブCPUは別処理 + if (i != IEVENT_SUBCPU) { /* サブCPUは別処理 */ CPU_IRQ |= bit; } return; @@ -71,3 +71,27 @@ void ievent_setbit(UINT bit) { nevent_forceexit(); } +void ievent_eoi(void) { + + UINT i; + UINT bit; + + if (CPU_IRQ == 0) { + return; + } + for (i=0, bit=1; i= IEVENT_CTC0) && (i <= IEVENT_CTC2)) { + ieeoi_ctc(i); + } + break; + } + } + if ((!(Z80_IFF & ((1 << IFF_IFLAG) | (1 << IFF_NMI)))) && + (CPU_REQIRQ != 0)) { + CPU_BASECLOCK -= CPU_REMCLOCK; + CPU_REMCLOCK = 0; + } +} +