]> Joshua Wise's Git repositories - fpgaboy.git/blobdiff - insn_vop_intr.v
Add an interrupt ack, so that interrupts are cleared automatically. This fixes APOCAL...
[fpgaboy.git] / insn_vop_intr.v
index 134d462602950e763feeefe0d69d0473ca9ea176..ce0bcf8acb5f91bbaf9b645f412da983f63825c6 100644 (file)
@@ -1,18 +1,11 @@
 `ifdef EXECUTE
        `INSN_VOP_INTR: begin
                case (cycle)
-               0:      begin
-                               address <= {registers[`REG_SPH],registers[`REG_SPL]} - 1;
-                               wdata <= registers[`REG_PCH];
-                               wr <= 1;
-                       end
-               1:      begin
-                               address <= {registers[`REG_SPH],registers[`REG_SPL]} - 2;
-                               wdata <= registers[`REG_PCL];
-                               wr <= 1;
-                       end
+               0:      `EXEC_WRITE(`_SP - 1, `_PCH)
+               1:      `EXEC_WRITE(`_SP - 2, `_PCL)
                2:      begin
-                               `EXEC_NEWCYCLE;
+                               irqack <= 1;
+                               `EXEC_NEWCYCLE
                        end
                endcase
        end
                1:      begin end
                2:      begin
                                ie <= 0;
-                               {registers[`REG_PCH],registers[`REG_PCL]} <=
-                                       {8'b0,jaddr};
-                               {registers[`REG_SPH],registers[`REG_SPL]} <=
-                                       {registers[`REG_SPH],registers[`REG_SPL]} - 2;
+                               `_PC <= {8'b0, jaddr};
+                               irqack <= 0;    // Must be at the same time as we latch jaddr, or we race!
+                               `_SP <= `_SP - 2;
                        end
                endcase
        end
This page took 0.022174 seconds and 4 git commands to generate.