DMA Channels | Contents Index | Prev Next |
1F80108xh DMA0 channel 0 MDECin (RAM to MDEC) 1F80109xh DMA1 channel 1 MDECout (MDEC to RAM) 1F8010Axh DMA2 channel 2 GPU (lists + image data) 1F8010Bxh DMA3 channel 3 CDROM (CDROM to RAM) 1F8010Cxh DMA4 channel 4 SPU 1F8010Dxh DMA5 channel 5 PIO (Expansion Port) 1F8010Exh DMA6 channel 6 OTC (reverse clear OT) (GPU related) 1F8010F0h DPCR - DMA Control register 1F8010F4h DICR - DMA Interrupt register |
0-23 Memory Address where the DMA will start reading from/writing to 24-31 Not used (always zero) |
0-15 BC Number of words (0001h..FFFFh) (or 0=10000h words) 16-31 0 Not used (usually 0 for OTC, or 1 ("one block") for CDROM) |
0-15 BS Blocksize (words) ;for GPU/SPU max 10h, for MDEC max 20h 16-31 BA Amount of blocks ;ie. total length = BS*BA words |
0-31 0 Not used (should be zero) (transfer ends at END-CODE in list) |
0 Transfer Direction (0=To Main RAM, 1=From Main RAM) 1 Memory Address Step (0=Forward;+4, 1=Backward;-4) 2-7 Not used (always zero) 8 Chopping Enable (0=Normal, 1=Chopping; run CPU during DMA gaps) 9-10 SyncMode, Transfer Synchronisation/Mode (0-3): 0 Start immediately and transfer all at once (used for CDROM, OTC) 1 Sync blocks to DMA requests (used for MDEC, SPU, and GPU-data) 2 Linked-List mode (used for GPU-command-lists) 3 Reserved (not used) 11-15 Not used (always zero) 16-18 Chopping DMA Window Size (1 SHL N words) 19 Not used (always zero) 20-22 Chopping CPU Window Size (1 SHL N clks) 23 Not used (always zero) 24 Start/Busy (0=Stopped/Completed, 1=Start/Enable/Busy) 25-27 Not used (always zero) 28 Start/Trigger (0=Normal, 1=Manual Start; use for SyncMode=0) 29 Unknown (R/W) Pause? (0=No, 1=Pause?) (For SyncMode=0 only?) 30 Unknown (R/W) 31 Not used (always zero) |
0-2 DMA0, MDECin Priority (0..7; 0=Highest, 7=Lowest) 3 DMA0, MDECin Master Enable (0=Disable, 1=Enable) 4-6 DMA1, MDECout Priority (0..7; 0=Highest, 7=Lowest) 7 DMA1, MDECout Master Enable (0=Disable, 1=Enable) 8-10 DMA2, GPU Priority (0..7; 0=Highest, 7=Lowest) 11 DMA2, GPU Master Enable (0=Disable, 1=Enable) 12-14 DMA3, CDROM Priority (0..7; 0=Highest, 7=Lowest) 15 DMA3, CDROM Master Enable (0=Disable, 1=Enable) 16-18 DMA4, SPU Priority (0..7; 0=Highest, 7=Lowest) 19 DMA4, SPU Master Enable (0=Disable, 1=Enable) 20-22 DMA5, PIO Priority (0..7; 0=Highest, 7=Lowest) 23 DMA5, PIO Master Enable (0=Disable, 1=Enable) 24-26 DMA6, OTC Priority (0..7; 0=Highest, 7=Lowest) 27 DMA6, OTC Master Enable (0=Disable, 1=Enable) 28-30 Unknown, Priority Offset or so? (R/W) 31 Unknown, no effect? (R/W) |
0-5 Unknown (read/write-able) 6-14 Not used (always zero) 15 Force IRQ (sets bit31) (0=None, 1=Force Bit31=1) 16-22 IRQ Enable setting bit24-30 upon DMA0..DMA6 (0=None, 1=Enable) 23 IRQ Enable setting bit31 when bit24-30=nonzero (0=None, 1=Enable) 24-30 IRQ Flags for DMA0..DMA6 (Write 1 to reset) (0=None, 1=IRQ) 31 IRQ Signal (0-to-1 triggers 1F801070h.bit3) (0=None, 1=IRQ) (R) |
IF bit15=1 OR (bit23=1 AND bit(24-30)>0) THEN bit31=1 ELSE bit31=0 |
(changes to 7FE358D1h after DMA transfer) |
(stays so even after DMA transfer) |
DMA0 MDEC.IN 01000201h (always) DMA1 MDEC.OUT 01000200h (always) DMA2 GPU 01000200h (VramRead), 01000201h (VramWrite), 01000401h (List) DMA3 CDROM 11000000h (normal), 11400100h (chopped, rarely used) DMA4 SPU 01000201h (write), 01000200h (read, rarely used) DMA5 PIO N/A (not used by any known games) DMA6 OTC 11000002h (always) |
DMA0 MDEC.IN 1 clk/word ;0110h clks per 100h words ;\plus whatever DMA1 MDEC.OUT 1 clk/word ;0110h clks per 100h words ;/decompression time DMA2 GPU 1 clk/word ;0110h clks per 100h words ;-plus ... DMA3 CDROM/BIOS 24 clks/word ;1800h clks per 100h words ;\plus single/double DMA3 CDROM/GAMES 40 clks/word ;2800h clks per 100h words ;/speed sector rate DMA4 SPU 4 clks/word ;0420h clks per 100h words ;-plus ... DMA5 PIO 20 clks/word ;1400h clks per 100h words ;-not actually used DMA6 OTC 1 clk/word ;0110h clks per 100h words ;-plus nothing |
extracted from no$psx v2.2 - homepage - patreon - whole doc htm/txt - copyright 2022 martin korth (nocash) |