|
|
| version 1.18, 2003/12/01 10:45:46 | version 1.20, 2003/12/01 18:25:03 |
|---|---|
| Line 10 | Line 10 |
| #define MAX_PREFIX 8 | #define MAX_PREFIX 8 |
| #define EXISTINTR (isI286EI) && (!pic.ext_irq) && \ | |
| ((pic.pi[0].irr & (~pic.pi[0].imr)) || \ | |
| (pic.pi[1].irr & (~pic.pi[1].imr))) | |
| #define NEXT_OPCODE \ | #define NEXT_OPCODE \ |
| if (I286_REMCLOCK < 1) { \ | if (I286_REMCLOCK < 1) { \ |
| Line 1817 I286FN _popf(void) { // 9D: popf | Line 1813 I286FN _popf(void) { // 9D: popf |
| UINT flag; | UINT flag; |
| I286_WORKCLOCK(5); | |
| REGPOP0(flag) | REGPOP0(flag) |
| I286_OV = flag & O_FLAG; | I286_OV = flag & O_FLAG; |
| I286_FLAG = flag & (0xfff ^ O_FLAG); | I286_FLAG = flag & (0xfff ^ O_FLAG); |
| I286_TRAP = ((flag & 0x300) == 0x300); | I286_TRAP = ((flag & 0x300) == 0x300); |
| I286_WORKCLOCK(5); | |
| #if defined(INTR_FAST) | #if defined(INTR_FAST) |
| if (EXISTINTR) { | if ((flag & I_FLAG) && (PICEXISTINTR)) { |
| I286IRQCHECKTERM | I286IRQCHECKTERM |
| } | } |
| #else | #else |
| Line 2276 I286FN _iret(void) { // CF: iret | Line 2272 I286FN _iret(void) { // CF: iret |
| UINT flag; | UINT flag; |
| extirq_pop(); | extirq_pop(); |
| I286_WORKCLOCK(31); | |
| REGPOP0(I286_IP) | REGPOP0(I286_IP) |
| REGPOP0(I286_CS) | REGPOP0(I286_CS) |
| REGPOP0(flag) | REGPOP0(flag) |
| Line 2284 I286FN _iret(void) { // CF: iret | Line 2279 I286FN _iret(void) { // CF: iret |
| I286_FLAG = flag & (0xfff ^ O_FLAG); | I286_FLAG = flag & (0xfff ^ O_FLAG); |
| I286_TRAP = ((flag & 0x300) == 0x300); | I286_TRAP = ((flag & 0x300) == 0x300); |
| CS_BASE = I286_CS << 4; | CS_BASE = I286_CS << 4; |
| I286_WORKCLOCK(31); | |
| #if defined(INTR_FAST) | #if defined(INTR_FAST) |
| if (EXISTINTR) { | if ((flag & I_FLAG) && (PICEXISTINTR)) { |
| I286IRQCHECKTERM | I286IRQCHECKTERM |
| } | } |
| #else | #else |
| Line 2658 I286FN _sti(void) { // FB: sti | Line 2654 I286FN _sti(void) { // FB: sti |
| I286_WORKCLOCK(2); | I286_WORKCLOCK(2); |
| #if defined(INTR_FAST) | #if defined(INTR_FAST) |
| if (I286_FLAG & I_FLAG) { | if (I286_FLAG & I_FLAG) { |
| NEXT_OPCODE; | |
| return; // 更新の意味なし | return; // 更新の意味なし |
| } | } |
| #endif | #endif |
| I286_FLAG |= I_FLAG; | I286_FLAG |= I_FLAG; |
| I286_TRAP = (I286_FLAG & T_FLAG) >> 8; | I286_TRAP = (I286_FLAG & T_FLAG) >> 8; |
| #if defined(INTR_FAST) | #if defined(INTR_FAST) |
| if (EXISTINTR) { | if (!PICEXISTINTR) { |
| NEXT_OPCODE; | |
| } | |
| else { | |
| REMAIN_ADJUST(1) | REMAIN_ADJUST(1) |
| } | } |
| #else | #else |