diff --git a/src/main/java/li/cil/circuity/vm/riscv/R5CPU.java b/src/main/java/li/cil/circuity/vm/riscv/R5CPU.java index b8469e71..d5694c64 100644 --- a/src/main/java/li/cil/circuity/vm/riscv/R5CPU.java +++ b/src/main/java/li/cil/circuity/vm/riscv/R5CPU.java @@ -199,6 +199,11 @@ public class R5CPU implements Steppable, RealTimeCounter, InterruptController { } public void step(final int cycles) { + if (waitingForInterrupt) { + mcycle += cycles; + return; + } + final long cycleLimit = mcycle + cycles; while (!waitingForInterrupt && mcycle < cycleLimit) { final int pending = mip.get() & mie; @@ -232,6 +237,10 @@ public class R5CPU implements Steppable, RealTimeCounter, InterruptController { raiseException(e.getExceptionCause(), e.getExceptionValue()); } } + + if (waitingForInterrupt && mcycle < cycleLimit) { + mcycle = cycleLimit; + } } private void interpret() throws R5Exception, MemoryAccessException {