diff options
Diffstat (limited to 'libpsn00b/psxspu/common.c')
| -rw-r--r-- | libpsn00b/psxspu/common.c | 9 |
1 files changed, 6 insertions, 3 deletions
diff --git a/libpsn00b/psxspu/common.c b/libpsn00b/psxspu/common.c index 42f7cb7..1613ca9 100644 --- a/libpsn00b/psxspu/common.c +++ b/libpsn00b/psxspu/common.c @@ -38,13 +38,16 @@ static void _dma_transfer(uint32_t *data, size_t length, int write) { length += DMA_CHUNK_LENGTH - 1; } - SPU_CTRL &= 0xffcf; // Disable DMA request + SPU_DMA_CTRL = 0x0004; // Reset transfer mode + SPU_CTRL &= 0xffcf; // Disable DMA request _wait_status(0x0030, 0x0000); // Enable DMA request for writing (2) or reading (3) + uint16_t ctrl = write ? 0x0020 : 0x0030; + SPU_ADDR = _transfer_addr; - SPU_CTRL |= write ? 0x0020 : 0x0030; - _wait_status(0x0400, 0x0000); + SPU_CTRL |= ctrl; + _wait_status(0x0430, ctrl); DMA_MADR(4) = (uint32_t) data; if (length < DMA_CHUNK_LENGTH) |
