diff --git a/src/device/rcp/rsp/rsp_core.c b/src/device/rcp/rsp/rsp_core.c index f96dae19..47d91178 100644 --- a/src/device/rcp/rsp/rsp_core.c +++ b/src/device/rcp/rsp/rsp_core.c @@ -64,6 +64,10 @@ static void do_sp_dma(struct rsp_core* sp, const struct sp_dma* dma) post_framebuffer_write(&sp->dp->fb, dramaddr - length, length); dramaddr+=skip; } + + sp->regs[SP_MEM_ADDR_REG] = memaddr & 0xfff; + sp->regs[SP_DRAM_ADDR_REG] = dramaddr & 0xffffff; + sp->regs[SP_RD_LEN_REG] = 0xff8; } else { @@ -77,6 +81,10 @@ static void do_sp_dma(struct rsp_core* sp, const struct sp_dma* dma) } dramaddr+=skip; } + + sp->regs[SP_MEM_ADDR_REG] = memaddr & 0xfff; + sp->regs[SP_DRAM_ADDR_REG] = dramaddr & 0xffffff; + sp->regs[SP_RD_LEN_REG] = 0xff8; } /* schedule end of dma event */ @@ -224,6 +232,8 @@ void poweron_rsp(struct rsp_core* sp) sp->rsp_task_locked = 0; sp->mi->r4300->cp0.interrupt_unsafe_state &= ~INTR_UNSAFE_RSP; sp->regs[SP_STATUS_REG] = 1; + sp->regs[SP_RD_LEN_REG] = 0xff8; + sp->regs[SP_WR_LEN_REG] = 0xff8; }