<?xml version="1.0" encoding="UTF-8"?>
<commit>
  <added type="array"/>
  <modified type="array">
    <modified>
      <diff>@@ -91,6 +91,7 @@ WriteFunction IOWrite[0x100];
 PollFunction PollFunctions[MAX_POLL_FUNCTIONS];
 int PollFunctionCount;
 int PendingIRQ[MAX_IRQ];
+int PendingIRQCount;
 int State;
 u16 PC;
 u32 Cycle;
@@ -1170,12 +1171,18 @@ static void do_halt(u16 instr)
 void irq(int n)
 {
     if (Data.SREG.I) {
+        #ifdef TRACE
+            if (n != 17) { // timer
+                fprintf(stderr, &quot;irq: %d\n&quot;, n);
+            }
+        #endif
         write(Data.SP--, PC &gt;&gt; 8);
         write(Data.SP--, PC &amp; 0xff);
         PC = (n - 1) &lt;&lt; 1;
         Data.SREG.I = 0;
     } else {
         PendingIRQ[n] = 1;
+        PendingIRQCount++;
     }
 }
 
@@ -1201,6 +1208,20 @@ static void iowrite(u16 addr, u8 value)
         f(addr, value);
     }
     Data._Bytes[addr] = value;
+    if (addr == 0x5f &amp;&amp; PendingIRQCount &gt; 0 &amp;&amp; Data.SREG.I) {
+        int i;
+        for (i = 0; i &lt; MAX_IRQ; i++) {
+            if (PendingIRQ[i]) {
+                #ifdef TRACE
+                    fprintf(stderr, &quot;pending irq %d\n&quot;, i);
+                #endif
+                PendingIRQ[i] = 0;
+                PendingIRQCount--;
+                irq(i);
+                break;
+            }
+        }
+    }
 }
 
 void register_io(u16 addr, ReadFunction rf, WriteFunction wf)</diff>
      <filename>cpu.c</filename>
    </modified>
  </modified>
  <removed type="array"/>
  <parents type="array">
    <parent>
      <id>ddb144c16d5f0551c2350b0cb1cfcfd83cfa28bd</id>
    </parent>
  </parents>
  <author>
    <name>Greg Hewgill</name>
    <email>greg@hewgill.com</email>
  </author>
  <url>http://github.com/ghewgill/emulino/commit/2ef2340bfbc39d7f019c689ee3eee68ef33b2192</url>
  <id>2ef2340bfbc39d7f019c689ee3eee68ef33b2192</id>
  <committed-date>2009-06-09T02:24:59-07:00</committed-date>
  <authored-date>2009-06-09T02:24:59-07:00</authored-date>
  <message>handling deferred irqs after reenabling I bit</message>
  <tree>3b5cc5338532073cfff94a2f43d978af2553e151</tree>
  <committer>
    <name>Greg Hewgill</name>
    <email>greg@hewgill.com</email>
  </committer>
</commit>
