mcpx/dsp: Migrate some DPRINTFs to trace events

This commit is contained in:
Matt Borgerson 2025-02-17 01:49:29 -07:00
parent 91b7581f84
commit fa8e4c7afb
5 changed files with 29 additions and 12 deletions

View File

@ -29,6 +29,7 @@
#include "dsp_state.h" #include "dsp_state.h"
#include "dsp.h" #include "dsp.h"
#include "debug.h" #include "debug.h"
#include "trace.h"
/* Defines */ /* Defines */
#define BITMASK(x) ((1<<(x))-1) #define BITMASK(x) ((1<<(x))-1)
@ -76,8 +77,6 @@ void dsp_destroy(DSPState* dsp)
static uint32_t read_peripheral(dsp_core_t* core, uint32_t address) { static uint32_t read_peripheral(dsp_core_t* core, uint32_t address) {
DSPState* dsp = container_of(core, DSPState, core); DSPState* dsp = container_of(core, DSPState, core);
DPRINTF("read_peripheral 0x%06x", address);
uint32_t v = 0xababa; uint32_t v = 0xababa;
switch(address) { switch(address) {
case 0xFFFFB3: case 0xFFFFB3:
@ -103,15 +102,13 @@ static uint32_t read_peripheral(dsp_core_t* core, uint32_t address) {
break; break;
} }
DPRINTF(" -> 0x%06x\n", v); trace_dsp_read_peripheral(address, v);
return v; return v;
} }
static void write_peripheral(dsp_core_t* core, uint32_t address, uint32_t value) { static void write_peripheral(dsp_core_t* core, uint32_t address, uint32_t value) {
DSPState* dsp = container_of(core, DSPState, core); DSPState* dsp = container_of(core, DSPState, core);
DPRINTF("write_peripheral [0x%06x] = 0x%06x\n", address, value);
switch(address) { switch(address) {
case 0xFFFFC4: case 0xFFFFC4:
if (value & 1) { if (value & 1) {
@ -137,6 +134,8 @@ static void write_peripheral(dsp_core_t* core, uint32_t address, uint32_t value)
dsp_dma_write(&dsp->dma, DMA_CONFIGURATION, value); dsp_dma_write(&dsp->dma, DMA_CONFIGURATION, value);
break; break;
} }
trace_dsp_write_peripheral(address, value);
} }

View File

@ -27,6 +27,7 @@
#include "qemu/bswap.h" #include "qemu/bswap.h"
#include "dsp_cpu.h" #include "dsp_cpu.h"
#include "debug.h" #include "debug.h"
#include "trace.h"
#define BITMASK(x) ((1<<(x))-1) #define BITMASK(x) ((1<<(x))-1)
@ -583,21 +584,21 @@ static void disasm_reg_compare(dsp_core_t* dsp)
static const char* disasm_get_instruction_text(dsp_core_t* dsp) static const char* disasm_get_instruction_text(dsp_core_t* dsp)
{ {
const int len = sizeof(dsp->disasm_str_instr);
if (dsp->disasm_is_looping) { if (dsp->disasm_is_looping) {
dsp->disasm_str_instr2[0] = 0; dsp->disasm_str_instr2[0] = 0;
} }
if (dsp->disasm_cur_inst_len == 1) { if (dsp->disasm_cur_inst_len == 1) {
snprintf(dsp->disasm_str_instr2, sizeof(dsp->disasm_str_instr2), "p:%04x %06x (%02d cyc) %-*s\n", dsp->disasm_prev_inst_pc, dsp->disasm_cur_inst, dsp->instr_cycle, len, dsp->disasm_str_instr); snprintf(dsp->disasm_str_instr2, sizeof(dsp->disasm_str_instr2), "p:%04x %06x (%02d cyc) %s", dsp->disasm_prev_inst_pc, dsp->disasm_cur_inst, dsp->instr_cycle, dsp->disasm_str_instr);
} else { } else {
snprintf(dsp->disasm_str_instr2, sizeof(dsp->disasm_str_instr2), "p:%04x %06x %06x (%02d cyc) %-*s\n", dsp->disasm_prev_inst_pc, dsp->disasm_cur_inst, read_memory_p(dsp, dsp->disasm_prev_inst_pc + 1), dsp->instr_cycle, len, dsp->disasm_str_instr); snprintf(dsp->disasm_str_instr2, sizeof(dsp->disasm_str_instr2), "p:%04x %06x %06x (%02d cyc) %s", dsp->disasm_prev_inst_pc, dsp->disasm_cur_inst, read_memory_p(dsp, dsp->disasm_prev_inst_pc + 1), dsp->instr_cycle, dsp->disasm_str_instr);
} }
return dsp->disasm_str_instr2; return dsp->disasm_str_instr2;
} }
void dsp56k_execute_instruction(dsp_core_t* dsp) void dsp56k_execute_instruction(dsp_core_t* dsp)
{ {
trace_dsp56k_execute_instruction(dsp->is_gp, dsp->pc);
uint32_t disasm_return = 0; uint32_t disasm_return = 0;
dsp->disasm_memory_ptr = 0; dsp->disasm_memory_ptr = 0;
@ -608,11 +609,17 @@ void dsp56k_execute_instruction(dsp_core_t* dsp)
dsp->cur_inst_len = 1; dsp->cur_inst_len = 1;
dsp->instr_cycle = 2; dsp->instr_cycle = 2;
bool tracing = TRACE_DSP_DISASM || trace_event_get_state(TRACE_DSP56K_EXECUTE_INSTRUCTION_DISASM);
/* Disasm current instruction ? (trace mode only) */ /* Disasm current instruction ? (trace mode only) */
if (TRACE_DSP_DISASM) { if (tracing) {
disasm_return = disasm_instruction(dsp, DSP_TRACE_MODE); disasm_return = disasm_instruction(dsp, DSP_TRACE_MODE);
if (disasm_return) { if (disasm_return) {
DPRINTF("%s", disasm_get_instruction_text(dsp)); const char *text = disasm_get_instruction_text(dsp);
trace_dsp56k_execute_instruction_disasm(text);
if (TRACE_DSP_DISASM) {
DPRINTF("%s\n", text);
}
if (TRACE_DSP_DISASM_REG) { if (TRACE_DSP_DISASM_REG) {
disasm_reg_save(dsp); disasm_reg_save(dsp);
} }
@ -637,7 +644,7 @@ void dsp56k_execute_instruction(dsp_core_t* dsp)
} }
/* Disasm current instruction ? (trace mode only) */ /* Disasm current instruction ? (trace mode only) */
if (TRACE_DSP_DISASM && disasm_return) { if (tracing && disasm_return) {
if (TRACE_DSP_DISASM_REG) { if (TRACE_DSP_DISASM_REG) {
disasm_reg_compare(dsp); disasm_reg_compare(dsp);
} }

View File

@ -0,0 +1,9 @@
# See docs/devel/tracing.rst for syntax documentation.
# dsp.c
dsp_read_peripheral(uint32_t addr, uint32_t val) "addr 0x%"PRIx32" val 0x%"PRIx32
dsp_write_peripheral(uint32_t addr, uint32_t val) "addr 0x%"PRIx32" val 0x%"PRIx32
# dsp_cpu.c
dsp56k_execute_instruction(uint32_t id, uint32_t pc) "[gp=%d]: pc=0x%"PRIx32
dsp56k_execute_instruction_disasm(const char *disasm) "%s"

1
hw/xbox/mcpx/dsp/trace.h Normal file
View File

@ -0,0 +1 @@
#include "trace/trace-hw_xbox_mcpx_dsp.h"

View File

@ -3772,6 +3772,7 @@ if have_system
'hw/remote', 'hw/remote',
'hw/xbox/nv2a', 'hw/xbox/nv2a',
'hw/xbox/mcpx', 'hw/xbox/mcpx',
'hw/xbox/mcpx/dsp',
'hw/xbox', 'hw/xbox',
] ]
endif endif