From 7b146ad7cae6443d4e5a4ff8c71fa4705e91ed64 Mon Sep 17 00:00:00 2001 From: Rekai Musuka Date: Sun, 9 Oct 2022 14:11:18 -0300 Subject: [PATCH] fix(bios): set addr_latch even if bios is skipped --- src/core/cpu.zig | 8 ++++++++ src/main.zig | 3 ++- 2 files changed, 10 insertions(+), 1 deletion(-) diff --git a/src/core/cpu.zig b/src/core/cpu.zig index fbde5ab..6f15cae 100644 --- a/src/core/cpu.zig +++ b/src/core/cpu.zig @@ -412,6 +412,12 @@ pub const Arm7tdmi = struct { self.cpsr.mode.write(@enumToInt(next)); } + /// Advances state so that the BIOS is skipped + /// + /// Note: This accesses the CPU's bus ptr so it only may be called + /// once the Bus has been properly initialized + /// + /// TODO: Make above notice impossible to do in code pub fn fastBoot(self: *Self) void { self.r = std.mem.zeroes([16]u32); @@ -425,6 +431,8 @@ pub const Arm7tdmi = struct { // self.cpsr.raw = 0x6000001F; self.cpsr.raw = 0x0000_001F; + + self.bus.bios.addr_latch = 0x0000_00DC + 8; } pub fn step(self: *Self) void { diff --git a/src/main.zig b/src/main.zig index a2c5ac0..e723949 100644 --- a/src/main.zig +++ b/src/main.zig @@ -60,11 +60,12 @@ pub fn main() anyerror!void { var bus: Bus = undefined; var cpu = Arm7tdmi.init(&scheduler, &bus, log_file); - if (paths.bios == null) cpu.fastBoot(); try bus.init(allocator, &scheduler, &cpu, paths); defer bus.deinit(); + if (paths.bios == null) cpu.fastBoot(); + var gui = Gui.init(&bus.pak.title, &bus.apu, width, height); defer gui.deinit();