|
|
| version 1.3, 2004/08/11 16:09:04 | version 1.4, 2004/08/14 12:16:17 |
|---|---|
| Line 9 | Line 9 |
| // ここでデイジーチェイン | // ここでデイジーチェイン |
| IEVENT ievent; | |
| typedef BRESULT (*IEVENTFN)(UINT id); | typedef BRESULT (*IEVENTFN)(UINT id); |
| static BRESULT dummy(UINT id) { | static BRESULT dummy(UINT id) { |
| Line 31 static const IEVENTFN ieventfn[IEVENT_MA | Line 28 static const IEVENTFN ieventfn[IEVENT_MA |
| // ---- | // ---- |
| void ievent_reset(void) { | |
| } | |
| void ievent_progress(void) { | void ievent_progress(void) { |
| UINT i; | UINT i; |
| UINT bit; | UINT bit; |
| if ((CPU_REQIRQ == 0) || (!Z80_ABLEINTERRUPT())) { | if ((CPU_REQIRQ == 0) || (Z80_DI)) { |
| return; | return; |
| } | } |
| for (i=0, bit=1; i<IEVENT_MAX; i++, bit<<=1) { | for (i=0, bit=1; i<IEVENT_MAX; i++, bit<<=1) { |
| if (CPU_IRQ & bit) { | |
| break; | |
| } | |
| if (CPU_REQIRQ & bit) { | if (CPU_REQIRQ & bit) { |
| CPU_REQIRQ ^= bit; | CPU_REQIRQ ^= bit; |
| if (ieventfn[i](i)) { | if (ieventfn[i](i)) { |
| if (i != IEVENT_SUBCPU) { // サブCPUは別処理 | |
| CPU_IRQ |= bit; | |
| } | |
| return; | return; |
| } | } |
| } | } |
| Line 56 void ievent_setbit(UINT bit) { | Line 56 void ievent_setbit(UINT bit) { |
| UINT r; | UINT r; |
| r = CPU_REQIRQ; | if (CPU_REQIRQ & bit) { |
| if (r & bit) { | |
| return; | return; |
| } | } |
| CPU_REQIRQ |= bit; | CPU_REQIRQ |= bit; |
| if ((!r) && (Z80_ABLEINTERRUPT())) { | if (Z80_DI) { |
| nevent_forceexit(); | return; |
| } | |
| r = CPU_IRQ; | |
| r = (r ^ (r - 1)) >> 1; | |
| if (!(r & bit)) { | |
| return; | |
| } | } |
| nevent_forceexit(); | |
| } | } |