`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