From e463cdea431707ce04d9b53ea3b05b0f9f58b062 Mon Sep 17 00:00:00 2001 From: marcan Date: Fri, 6 Mar 2009 05:25:28 +0100 Subject: [PATCH] Add dma_addr to convert pointers to DMA addresses --- memory.c | 19 +++++++++++++++++++ memory.h | 2 ++ 2 files changed, 21 insertions(+) diff --git a/memory.c b/memory.c index 5946c8d..e058c2a 100644 --- a/memory.c +++ b/memory.c @@ -229,6 +229,25 @@ void mem_setswap(int enable) } +u32 dma_addr(void *p) +{ + u32 addr = (u32)p; + + switch(addr>>20) { + case 0xfff: + case 0x0d4: + case 0x0dc: + if(read32(HW_MEMMIRR) & 0x20) { + addr ^= 0x10000; + } + addr &= 0x0001FFFF; + addr |= 0x0d400000; + break; + } + //gecko_printf("DMA to %p: address %08x\n", p, addr); + return addr; +} + #define SECTION 0x012 #define NONBUFFERABLE 0x000 diff --git a/memory.h b/memory.h index 6421171..b792109 100644 --- a/memory.h +++ b/memory.h @@ -27,6 +27,8 @@ void mem_setswap(int enable); void mem_initialize(void); void mem_shutdown(void); +u32 dma_addr(void *); + static inline u32 get_cr(void) { u32 data;