diff options
| author | spicyjpeg <thatspicyjpeg@gmail.com> | 2022-12-28 12:18:29 +0100 |
|---|---|---|
| committer | spicyjpeg <thatspicyjpeg@gmail.com> | 2022-12-28 12:18:29 +0100 |
| commit | 7e350980d5c09bbc81a0de01bf016a87ecfc4feb (patch) | |
| tree | 26b403d12eea34a4644b3d147f00e1d1455e7f52 /libpsn00b/psxpress | |
| parent | eaec942f56ceec9c14de5c4185a02602abadd50a (diff) | |
| download | psn00bsdk-7e350980d5c09bbc81a0de01bf016a87ecfc4feb.tar.gz | |
Add CdUnlock() and DMA priority API
Diffstat (limited to 'libpsn00b/psxpress')
| -rw-r--r-- | libpsn00b/psxpress/mdec.c | 35 |
1 files changed, 20 insertions, 15 deletions
diff --git a/libpsn00b/psxpress/mdec.c b/libpsn00b/psxpress/mdec.c index d15a4db..3596188 100644 --- a/libpsn00b/psxpress/mdec.c +++ b/libpsn00b/psxpress/mdec.c @@ -5,6 +5,7 @@ #include <stdint.h> #include <assert.h> +#include <psxetc.h> #include <psxapi.h> #include <psxpress.h> #include <hwregs_c.h> @@ -86,11 +87,13 @@ static const DECDCTENV _default_mdec_env = { void DecDCTReset(int mode) { FastEnterCriticalSection(); - DMA_DPCR |= 0x000000bb; // Enable DMA0 and DMA1 - DMA_CHCR(0) = 0x00000201; // Stop DMA0 - DMA_CHCR(1) = 0x00000200; // Stop DMA1 - MDEC1 = 0x80000000; // Reset MDEC - MDEC1 = 0x60000000; // Enable DMA in/out requests + SetDMAPriority(DMA_MDEC_IN, 3); + SetDMAPriority(DMA_MDEC_OUT, 3); + DMA_CHCR(DMA_MDEC_IN) = 0x00000201; // Stop DMA + DMA_CHCR(DMA_MDEC_OUT) = 0x00000200; // Stop DMA + + MDEC1 = 0x80000000; // Reset MDEC + MDEC1 = 0x60000000; // Enable DMA in/out requests FastExitCriticalSection(); if (!mode) @@ -131,13 +134,14 @@ void DecDCTinRaw(const uint32_t *data, size_t length) { length += DMA_CHUNK_LENGTH - 1; } - DMA_MADR(0) = (uint32_t) data; + DMA_MADR(DMA_MDEC_IN) = (uint32_t) data; if (length < DMA_CHUNK_LENGTH) - DMA_BCR(0) = 0x00010000 | length; + DMA_BCR(DMA_MDEC_IN) = 0x00010000 | length; else - DMA_BCR(0) = DMA_CHUNK_LENGTH | ((length / DMA_CHUNK_LENGTH) << 16); + DMA_BCR(DMA_MDEC_IN) = DMA_CHUNK_LENGTH | + ((length / DMA_CHUNK_LENGTH) << 16); - DMA_CHCR(0) = 0x01000201; + DMA_CHCR(DMA_MDEC_IN) = 0x01000201; } int DecDCTinSync(int mode) { @@ -161,21 +165,22 @@ void DecDCTout(uint32_t *data, size_t length) { length += DMA_CHUNK_LENGTH - 1; } - DMA_MADR(1) = (uint32_t) data; + DMA_MADR(DMA_MDEC_OUT) = (uint32_t) data; if (length < DMA_CHUNK_LENGTH) - DMA_BCR(1) = 0x00010000 | length; + DMA_BCR(DMA_MDEC_OUT) = 0x00010000 | length; else - DMA_BCR(1) = DMA_CHUNK_LENGTH | ((length / DMA_CHUNK_LENGTH) << 16); + DMA_BCR(DMA_MDEC_OUT) = DMA_CHUNK_LENGTH | + ((length / DMA_CHUNK_LENGTH) << 16); - DMA_CHCR(1) = 0x01000200; + DMA_CHCR(DMA_MDEC_OUT) = 0x01000200; } int DecDCToutSync(int mode) { if (mode) - return (DMA_CHCR(1) >> 24) & 1; + return (DMA_CHCR(DMA_MDEC_OUT) >> 24) & 1; for (int i = MDEC_SYNC_TIMEOUT; i; i--) { - if (!(DMA_CHCR(1) & (1 << 24))) + if (!(DMA_CHCR(DMA_MDEC_OUT) & (1 << 24))) return 0; } |
