From 924729dcb10bf7dceda22b052f0bd9fd9be107e7 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 7601761..73666f1 100644 --- a/src/core/cpu.zig +++ b/src/core/cpu.zig @@ -413,6 +413,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); @@ -426,6 +432,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 fd6cfeb..6ffc73a 100644 --- a/src/main.zig +++ b/src/main.zig @@ -49,11 +49,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();