#include "SpuFakeDma.h" #include //for btAssert //Disabling memcpy sometimes helps debugging DMA #define USE_MEMCPY 1 void* cellDmaLargeGetReadOnly(void *ls, uint64_t ea, uint32_t size, uint32_t tag, uint32_t tid, uint32_t rid) { #if defined (WIN32) || defined (__PPU__) return (void*)(uint32_t)ea; #else cellDmaLargeGet(ls,ea,size,tag,tid,rid); return ls; #endif //WIN32 } void* cellDmaGetReadOnly(void *ls, uint64_t ea, uint32_t size, uint32_t tag, uint32_t tid, uint32_t rid) { #if defined (WIN32) || defined (__PPU__) return (void*)(uint32_t)ea; #else cellDmaGet(ls,ea,size,tag,tid,rid); return ls; #endif //WIN32 } ///this unalignedDma should not be frequently used, only for small data. It handles alignment and performs check on size (<16 bytes) int stallingUnalignedDmaSmallGet(void *ls, uint64_t ea, uint32_t size) { btAssert(size<32); ATTRIBUTE_ALIGNED16(char tmpBuffer[32]); char* mainMem = (char*)ea; char* localStore = (char*)ls; uint32_t i; ///make sure last 4 bits are the same, for cellDmaSmallGet uint32_t last4BitsOffset = ea & 0x0f; char* tmpTarget = tmpBuffer + last4BitsOffset; #ifdef WIN32 #ifdef USE_MEMCPY memcpy(tmpTarget,mainMem,size); #else for ( i=0;i