chore: improve debug messages

This commit is contained in:
Rekai Nyangadzayi Musuka 2024-02-14 13:51:06 -06:00
parent 32e54c67bf
commit ed346cff45
5 changed files with 72 additions and 16 deletions

2
.gitignore vendored
View File

@ -4,3 +4,5 @@ bin/
doc/ doc/
imgui.ini imgui.ini
.build_config/ .build_config/
**/*.log

View File

@ -223,7 +223,34 @@ fn Controller(comptime id: u2) type {
else => log.err("TODO: Implement DMA({}) {s} mode", .{ id, @tagName(start_timing) }), else => log.err("TODO: Implement DMA({}) {s} mode", .{ id, @tagName(start_timing) }),
} }
log.debug("configured {s} transfer from 0x{X:0>8} -> 0x{X:0>8} ({} words) for DMA{}", .{ @tagName(start_timing), self.sad_latch, self.dad_latch, self._word_count, id }); // Debug stuff
{
const sad_adj: Adjustment = @enumFromInt(new.sad_adj.read());
const dad_adj: Adjustment = @enumFromInt(new.dad_adj.read());
const byte_count = @as(u32, @sizeOf(u16)) << @intFromBool(new.transfer_type.read());
const sad_final = switch (sad_adj) {
.Increment, .IncrementReload => self.sad_latch +% self._word_count * byte_count,
.Decrement => self.sad_latch -% self._word_count * byte_count,
.Fixed => self.sad_latch,
};
const dad_final = switch (dad_adj) {
.Increment, .IncrementReload => self.dad_latch +% self._word_count * byte_count,
.Decrement => self.dad_latch -% self._word_count * byte_count,
.Fixed => self.dad_latch,
};
log.debug("configured {s} transfrom from 0x{X:0>8} -> 0x{X:0>8} to 0x{X:0>8} -> 0x{X:0>8} ({} words) for DMA{}", .{
@tagName(start_timing),
self.sad_latch,
sad_final,
self.dad_latch,
dad_final,
self._word_count,
id,
});
}
} }
self.cnt.raw = halfword; self.cnt.raw = halfword;

View File

@ -57,7 +57,7 @@ pub fn read(bus: *const Bus, comptime T: type, address: u32) T {
0x0400_00B0...0x0400_00DC => dma.read(T, &bus.dma, address) orelse 0x000_0000, 0x0400_00B0...0x0400_00DC => dma.read(T, &bus.dma, address) orelse 0x000_0000,
// Timers // Timers
0x0400_0100...0x0400_010C => warn("TODO: impl timer", .{}), 0x0400_0100...0x0400_010C => warn("TODO(timer): read(T: {}, addr: 0x{X:0>8}) {}", .{ T, address, T }),
0x0400_0180 => bus.io.shr.ipc._nds7.sync.raw, 0x0400_0180 => bus.io.shr.ipc._nds7.sync.raw,
0x0400_0208 => @intFromBool(bus.io.ime), 0x0400_0208 => @intFromBool(bus.io.ime),
@ -73,7 +73,7 @@ pub fn read(bus: *const Bus, comptime T: type, address: u32) T {
0x0400_00B0...0x0400_00DE => dma.read(T, &bus.dma, address) orelse 0x0000, 0x0400_00B0...0x0400_00DE => dma.read(T, &bus.dma, address) orelse 0x0000,
// Timers // Timers
0x0400_0100...0x0400_010E => warn("TODO: impl timer", .{}), 0x0400_0100...0x0400_010E => warn("TODO(timer): read(T: {}, addr: 0x{X:0>8}) {}", .{ T, address, T }),
0x0400_0130 => bus.io.shr.input.keyinput().raw, 0x0400_0130 => bus.io.shr.input.keyinput().raw,
0x0400_0136 => bus.io.shr.input.extkeyin().raw, 0x0400_0136 => bus.io.shr.input.extkeyin().raw,
@ -87,10 +87,10 @@ pub fn read(bus: *const Bus, comptime T: type, address: u32) T {
0x0400_00B0...0x0400_00DF => dma.read(T, &bus.dma, address) orelse 0x00, 0x0400_00B0...0x0400_00DF => dma.read(T, &bus.dma, address) orelse 0x00,
// Timers // Timers
0x0400_0100...0x0400_010F => warn("TODO: impl timer", .{}), 0x0400_0100...0x0400_010F => warn("TODO(timer): read(T: {}, addr: 0x{X:0>8}) {}", .{ T, address, T }),
// RTC // RTC
0x0400_0138 => warn("TODO: RTC read", .{}), 0x0400_0138 => warn("TODO(rtc): read(T: {}, addr: 0x{X:0>8}) {}", .{ T, address, T }),
0x0400_0240 => bus.vram.stat().raw, 0x0400_0240 => bus.vram.stat().raw,
0x0400_0241 => bus.io.shr.wramcnt.raw, 0x0400_0241 => bus.io.shr.wramcnt.raw,
@ -109,7 +109,7 @@ pub fn write(bus: *Bus, comptime T: type, address: u32, value: T) void {
0x0400_00B0...0x0400_00DC => dma.write(T, &bus.dma, address, value), 0x0400_00B0...0x0400_00DC => dma.write(T, &bus.dma, address, value),
// Timers // Timers
0x0400_0100...0x0400_010C => log.warn("TODO: impl timer", .{}), 0x0400_0100...0x0400_010C => log.warn("TODO(timer): write(T: {}, addr: 0x{X:0>8}, value: 0x{X:0>8})", .{ T, address, value }),
0x0400_0180 => bus.io.shr.ipc.setIpcSync(.nds7, value), 0x0400_0180 => bus.io.shr.ipc.setIpcSync(.nds7, value),
0x0400_0208 => bus.io.ime = value & 1 == 1, 0x0400_0208 => bus.io.ime = value & 1 == 1,
@ -126,7 +126,7 @@ pub fn write(bus: *Bus, comptime T: type, address: u32, value: T) void {
0x0400_00B0...0x0400_00DE => dma.write(T, &bus.dma, address, value), 0x0400_00B0...0x0400_00DE => dma.write(T, &bus.dma, address, value),
// Timers // Timers
0x0400_0100...0x0400_010E => log.warn("TODO: impl timer", .{}), 0x0400_0100...0x0400_010E => log.warn("TODO(timer): write(T: {}, addr: 0x{X:0>8}, value: 0x{X:0>8})", .{ T, address, value }),
0x0400_0180 => bus.io.shr.ipc.setIpcSync(.nds7, value), 0x0400_0180 => bus.io.shr.ipc.setIpcSync(.nds7, value),
0x0400_0184 => bus.io.shr.ipc.setIpcFifoCnt(.nds7, value), 0x0400_0184 => bus.io.shr.ipc.setIpcFifoCnt(.nds7, value),
@ -139,10 +139,10 @@ pub fn write(bus: *Bus, comptime T: type, address: u32, value: T) void {
0x0400_00B0...0x0400_00DF => dma.write(T, &bus.dma, address, value), 0x0400_00B0...0x0400_00DF => dma.write(T, &bus.dma, address, value),
// Timers // Timers
0x0400_0100...0x0400_010F => log.warn("TODO: impl timer", .{}), 0x0400_0100...0x0400_010F => log.warn("TODO(timer): write(T: {}, addr: 0x{X:0>8}, value: 0x{X:0>8})", .{ T, address, value }),
// RTC // RTC
0x0400_0138 => log.warn("TODO: RTC write", .{}), 0x0400_0138 => log.warn("TODO(rtc): write(T: {}, addr: 0x{X:0>8}, value: 0x{X:0>8})", .{ T, address, value }),
0x0400_0208 => bus.io.ime = value & 1 == 1, 0x0400_0208 => bus.io.ime = value & 1 == 1,

View File

@ -223,7 +223,34 @@ fn Controller(comptime id: u2) type {
else => log.err("TODO: Implement DMA({}) {s} mode", .{ id, @tagName(start_timing) }), else => log.err("TODO: Implement DMA({}) {s} mode", .{ id, @tagName(start_timing) }),
} }
log.debug("configured {s} transfer from 0x{X:0>8} -> 0x{X:0>8} ({} words) for DMA{}", .{ @tagName(start_timing), self.sad_latch, self.dad_latch, self._word_count, id }); // Debug stuff
{
const sad_adj: Adjustment = @enumFromInt(new.sad_adj.read());
const dad_adj: Adjustment = @enumFromInt(new.dad_adj.read());
const byte_count = @as(u32, @sizeOf(u16)) << @intFromBool(new.transfer_type.read());
const sad_final = switch (sad_adj) {
.Increment, .IncrementReload => self.sad_latch +% self._word_count * byte_count,
.Decrement => self.sad_latch -% self._word_count * byte_count,
.Fixed => self.sad_latch,
};
const dad_final = switch (dad_adj) {
.Increment, .IncrementReload => self.dad_latch +% self._word_count * byte_count,
.Decrement => self.dad_latch -% self._word_count * byte_count,
.Fixed => self.dad_latch,
};
log.debug("configured {s} transfrom from 0x{X:0>8} -> 0x{X:0>8} to 0x{X:0>8} -> 0x{X:0>8} ({} words) for DMA{}", .{
@tagName(start_timing),
self.sad_latch,
sad_final,
self.dad_latch,
dad_final,
self._word_count,
id,
});
}
} }
self.cnt.raw = halfword; self.cnt.raw = halfword;

View File

@ -58,7 +58,7 @@ pub fn read(bus: *const Bus, comptime T: type, address: u32) T {
0x0400_00E0...0x0400_00EC => std.mem.readInt(T, bus.io.dma_fill[address & 0xF ..][0..@sizeOf(T)], .little), 0x0400_00E0...0x0400_00EC => std.mem.readInt(T, bus.io.dma_fill[address & 0xF ..][0..@sizeOf(T)], .little),
// Timers // Timers
0x0400_0100...0x0400_010C => warn("TODO: impl timer", .{}), 0x0400_0100...0x0400_010C => warn("TODO(timer): read(T: {}, addr: 0x{X:0>8}) {} ", .{ T, address, T }),
0x0400_0180 => bus.io.shr.ipc._nds9.sync.raw, 0x0400_0180 => bus.io.shr.ipc._nds9.sync.raw,
0x0400_0208 => @intFromBool(bus.io.ime), 0x0400_0208 => @intFromBool(bus.io.ime),
@ -92,7 +92,7 @@ pub fn read(bus: *const Bus, comptime T: type, address: u32) T {
0x0400_00E0...0x0400_00EE => std.mem.readInt(T, bus.io.dma_fill[address & 0xF ..][0..@sizeOf(T)], .little), 0x0400_00E0...0x0400_00EE => std.mem.readInt(T, bus.io.dma_fill[address & 0xF ..][0..@sizeOf(T)], .little),
// Timers // Timers
0x0400_0100...0x0400_010E => warn("TODO: impl timer", .{}), 0x0400_0100...0x0400_010E => warn("TODO(timer): read(T: {}, addr: 0x{X:0>8}) {} ", .{ T, address, T }),
0x0400_0004 => bus.ppu.io.nds9.dispstat.raw, 0x0400_0004 => bus.ppu.io.nds9.dispstat.raw,
0x0400_0130 => bus.io.shr.input.keyinput().raw, 0x0400_0130 => bus.io.shr.input.keyinput().raw,
@ -125,7 +125,7 @@ pub fn read(bus: *const Bus, comptime T: type, address: u32) T {
0x0400_00E0...0x0400_00EF => std.mem.readInt(T, bus.io.dma_fill[address & 0xF ..][0..@sizeOf(T)], .little), 0x0400_00E0...0x0400_00EF => std.mem.readInt(T, bus.io.dma_fill[address & 0xF ..][0..@sizeOf(T)], .little),
// Timers // Timers
0x0400_0100...0x0400_010F => warn("TODO: impl timer", .{}), 0x0400_0100...0x0400_010F => warn("TODO(timer): read(T: {}, addr: 0x{X:0>8}) {} ", .{ T, address, T }),
0x0400_0208 => @intFromBool(bus.io.ime), 0x0400_0208 => @intFromBool(bus.io.ime),
@ -173,7 +173,7 @@ pub fn write(bus: *Bus, comptime T: type, address: u32, value: T) void {
0x0400_00E0...0x0400_00EC => std.mem.writeInt(T, bus.io.dma_fill[address & 0xF ..][0..@sizeOf(T)], value, .little), 0x0400_00E0...0x0400_00EC => std.mem.writeInt(T, bus.io.dma_fill[address & 0xF ..][0..@sizeOf(T)], value, .little),
// Timers // Timers
0x0400_0100...0x0400_010C => log.warn("TODO: impl timer", .{}), 0x0400_0100...0x0400_010C => log.warn("TODO(timer): write(T: {}, addr: 0x{X:0>8}, value: 0x{X:0>8})", .{ T, address, value }),
0x0400_0180 => bus.io.shr.ipc.setIpcSync(.nds9, value), 0x0400_0180 => bus.io.shr.ipc.setIpcSync(.nds9, value),
0x0400_0184 => bus.io.shr.ipc.setIpcFifoCnt(.nds9, value), 0x0400_0184 => bus.io.shr.ipc.setIpcFifoCnt(.nds9, value),
@ -265,7 +265,7 @@ pub fn write(bus: *Bus, comptime T: type, address: u32, value: T) void {
0x0400_00E0...0x0400_00EE => std.mem.writeInt(T, bus.io.dma_fill[address & 0xF ..][0..@sizeOf(T)], value, .little), 0x0400_00E0...0x0400_00EE => std.mem.writeInt(T, bus.io.dma_fill[address & 0xF ..][0..@sizeOf(T)], value, .little),
// Timers // Timers
0x0400_0100...0x0400_010E => log.warn("TODO: impl timer", .{}), 0x0400_0100...0x0400_010E => log.warn("TODO(timer): write(T: {}, addr: 0x{X:0>8}, value: 0x{X:0>8})", .{ T, address, value }),
0x0400_0180 => bus.io.shr.ipc.setIpcSync(.nds9, value), 0x0400_0180 => bus.io.shr.ipc.setIpcSync(.nds9, value),
0x0400_0184 => bus.io.shr.ipc.setIpcFifoCnt(.nds9, value), 0x0400_0184 => bus.io.shr.ipc.setIpcFifoCnt(.nds9, value),
@ -305,7 +305,7 @@ pub fn write(bus: *Bus, comptime T: type, address: u32, value: T) void {
0x0400_00E0...0x0400_00EF => std.mem.writeInt(T, bus.io.dma_fill[address & 0xF ..][0..@sizeOf(T)], value, .little), 0x0400_00E0...0x0400_00EF => std.mem.writeInt(T, bus.io.dma_fill[address & 0xF ..][0..@sizeOf(T)], value, .little),
// Timers // Timers
0x0400_0100...0x0400_010F => log.warn("TODO: impl timer", .{}), 0x0400_0100...0x0400_010F => log.warn("TODO(timer): write(T: {}, addr: 0x{X:0>8}, value: 0x{X:0>8})", .{ T, address, value }),
0x0400_0208 => bus.io.ime = value & 1 == 1, 0x0400_0208 => bus.io.ime = value & 1 == 1,