diff --git a/src/cpu.zig b/src/cpu.zig index 416868e..98a5bb2 100644 --- a/src/cpu.zig +++ b/src/cpu.zig @@ -148,6 +148,10 @@ pub const Arm7tdmi = struct { }; } + pub inline fn isHalted(self: *const Self) bool { + return self.bus.io.haltcnt == .Halt; + } + pub fn setCpsr(self: *Self, value: u32) void { if (value & 0x1F != self.cpsr.raw & 0x1F) self.changeModeFromIdx(@truncate(u5, value & 0x1F)); self.cpsr.raw = value; diff --git a/src/emu.zig b/src/emu.zig index d297b4f..e963b25 100644 --- a/src/emu.zig +++ b/src/emu.zig @@ -52,7 +52,7 @@ pub fn runFrame(sched: *Scheduler, cpu: *Arm7tdmi) void { while (true) { while (sched.tick < std.math.min(frame_end, sched.nextTimestamp())) { - if (cpu.bus.io.haltcnt == .Execute) cpu.step() else sched.tick += 1; + if (!cpu.isHalted()) cpu.step() else sched.tick += 1; cpu.handleDMATransfers(); }