mirror of https://github.com/xemu-project/xemu.git
dsp: Fix EP memory register reads; implement writes
This commit is contained in:
parent
57e9059e17
commit
2543aaf615
|
@ -198,27 +198,47 @@ uint32_t dsp_disasm_address(DSPState* dsp, FILE *out, uint32_t lowerAdr, uint32_
|
|||
return dsp_pc;
|
||||
}
|
||||
|
||||
uint32_t dsp_read_memory(DSPState* dsp, char space_id, uint32_t address)
|
||||
uint32_t dsp_read_memory(DSPState* dsp, char space, uint32_t address)
|
||||
{
|
||||
int space;
|
||||
int space_id;
|
||||
|
||||
switch (space_id) {
|
||||
switch (space) {
|
||||
case 'X':
|
||||
space = DSP_SPACE_X;
|
||||
space_id = DSP_SPACE_X;
|
||||
break;
|
||||
case 'Y':
|
||||
space = DSP_SPACE_Y;
|
||||
space_id = DSP_SPACE_Y;
|
||||
break;
|
||||
case 'P':
|
||||
space = DSP_SPACE_P;
|
||||
space_id = DSP_SPACE_P;
|
||||
break;
|
||||
default:
|
||||
assert(false);
|
||||
}
|
||||
|
||||
return dsp56k_read_memory(&dsp->core, space, address);
|
||||
return dsp56k_read_memory(&dsp->core, space_id, address);
|
||||
}
|
||||
|
||||
void dsp_write_memory(DSPState* dsp, char space, uint32_t address, uint32_t value)
|
||||
{
|
||||
int space_id;
|
||||
|
||||
switch (space) {
|
||||
case 'X':
|
||||
space_id = DSP_SPACE_X;
|
||||
break;
|
||||
case 'Y':
|
||||
space_id = DSP_SPACE_Y;
|
||||
break;
|
||||
case 'P':
|
||||
space_id = DSP_SPACE_P;
|
||||
break;
|
||||
default:
|
||||
assert(false);
|
||||
}
|
||||
|
||||
dsp56k_write_memory(&dsp->core, space_id, address, value);
|
||||
}
|
||||
|
||||
/**
|
||||
* Output memory values between given addresses in given DSP address space.
|
||||
|
|
|
@ -48,6 +48,7 @@ void dsp_start_frame(DSPState* dsp);
|
|||
|
||||
/* Dsp Debugger commands */
|
||||
uint32_t dsp_read_memory(DSPState* dsp, char space, uint32_t addr);
|
||||
void dsp_write_memory(DSPState* dsp, char space, uint32_t address, uint32_t value);
|
||||
uint32_t dsp_disasm_memory(DSPState* dsp, uint32_t dsp_memdump_addr, uint32_t dsp_memdump_upper, char space);
|
||||
uint32_t dsp_disasm_address(DSPState* dsp, FILE *out, uint32_t lowerAdr, uint32_t UpperAdr);
|
||||
void dsp_info(DSPState* dsp);
|
||||
|
|
|
@ -496,20 +496,22 @@ static uint64_t ep_read(void *opaque,
|
|||
{
|
||||
MCPXAPUState *d = opaque;
|
||||
|
||||
uint64_t r = 0;
|
||||
assert(size == 4);
|
||||
assert(addr % 4 == 0);
|
||||
|
||||
uint64_t r = 0;
|
||||
switch (addr) {
|
||||
case NV_PAPU_EPXMEM ... NV_PAPU_EPXMEM + 0xC00 * 4: {
|
||||
case NV_PAPU_EPXMEM ... NV_PAPU_EPXMEM + 0xC00 * 4 - 1: {
|
||||
uint32_t xaddr = (addr - NV_PAPU_EPXMEM) / 4;
|
||||
r = dsp_read_memory(d->ep.dsp, 'X', xaddr);
|
||||
break;
|
||||
}
|
||||
case NV_PAPU_EPYMEM ... NV_PAPU_EPYMEM + 0x100 * 4: {
|
||||
case NV_PAPU_EPYMEM ... NV_PAPU_EPYMEM + 0x100 * 4 - 1: {
|
||||
uint32_t yaddr = (addr - NV_PAPU_EPYMEM) / 4;
|
||||
r = dsp_read_memory(d->ep.dsp, 'Y', yaddr);
|
||||
break;
|
||||
}
|
||||
case NV_PAPU_EPPMEM ... NV_PAPU_EPPMEM + 0x1000 * 4: {
|
||||
case NV_PAPU_EPPMEM ... NV_PAPU_EPPMEM + 0x1000 * 4 - 1: {
|
||||
uint32_t paddr = (addr - NV_PAPU_EPPMEM) / 4;
|
||||
r = dsp_read_memory(d->ep.dsp, 'P', paddr);
|
||||
break;
|
||||
|
@ -527,19 +529,25 @@ static void ep_write(void *opaque, hwaddr addr,
|
|||
{
|
||||
MCPXAPUState *d = opaque;
|
||||
|
||||
assert(size == 4);
|
||||
assert(addr % 4 == 0);
|
||||
|
||||
MCPX_DPRINTF("mcpx apu EP: [0x%llx] = 0x%llx\n", addr, val);
|
||||
|
||||
switch (addr) {
|
||||
case NV_PAPU_EPXMEM ... NV_PAPU_EPXMEM + 0xC00 * 4: {
|
||||
assert(false);
|
||||
case NV_PAPU_EPXMEM ... NV_PAPU_EPXMEM + 0xC00 * 4 - 1: {
|
||||
uint32_t xaddr = (addr - NV_PAPU_EPXMEM) / 4;
|
||||
dsp_write_memory(d->ep.dsp, 'X', xaddr, val);
|
||||
break;
|
||||
}
|
||||
case NV_PAPU_EPYMEM ... NV_PAPU_EPYMEM + 0x100 * 4: {
|
||||
assert(false);
|
||||
case NV_PAPU_EPYMEM ... NV_PAPU_EPYMEM + 0x100 * 4 - 1: {
|
||||
uint32_t yaddr = (addr - NV_PAPU_EPYMEM) / 4;
|
||||
dsp_write_memory(d->ep.dsp, 'Y', yaddr, val);
|
||||
break;
|
||||
}
|
||||
case NV_PAPU_EPPMEM ... NV_PAPU_EPPMEM + 0x1000 * 4: {
|
||||
assert(false);
|
||||
case NV_PAPU_EPPMEM ... NV_PAPU_EPPMEM + 0x1000 * 4 - 1: {
|
||||
uint32_t paddr = (addr - NV_PAPU_EPPMEM) / 4;
|
||||
dsp_write_memory(d->ep.dsp, 'P', paddr, val);
|
||||
break;
|
||||
}
|
||||
case NV_PAPU_EPRST:
|
||||
|
|
Loading…
Reference in New Issue