snes9xgx/source/ngc/aram.cpp
dborth fb27030208 [Whats Was New 002 - July 21, 2008]
- added: classic and nunchuk support
- added: all controllers can now be configured
- added: GC version (untested)
- changed: mappings are no longer stored in SRAM, but in config file. 
           This means no per-game configurations, but one global 
           config per controller.
- one makefile to make all versions. (thanks to snes9x143 SVN)
2008-10-16 01:49:58 +00:00

78 lines
1.4 KiB
C++

/****************************************************************************
* Snes9x 1.50
*
* Nintendo Gamecube Audio RAM
*
* softdev July 2006
****************************************************************************/
#include <gccore.h>
#include <string.h>
#include "aram.h"
#define ARAM_READ 1
#define ARAM_WRITE 0
#define TEMPSIZE 32768
static char tempbuffer[TEMPSIZE] ATTRIBUTE_ALIGN (32);
/**
* ARAMPut
*
* Move data from MAIN memory to ARAM
*/
void
ARAMPut (char *src, char *dst, int len)
{
DCFlushRange (src, len);
AR_StartDMA (ARAM_WRITE, (u32) src, (u32) dst, len);
while (AR_GetDMAStatus());
}
/**
* ARAMFetch
*
* This function will move data from ARAM to MAIN memory
*/
void
ARAMFetch (char *dst, char *src, int len)
{
DCInvalidateRange (dst, len);
AR_StartDMA (ARAM_READ, (u32) dst, (u32) src, len);
while (AR_GetDMAStatus ());
}
/**
* ARAMFetchSlow
*
* Required as SNES memory may NOT be 32-byte aligned
*/
void
ARAMFetchSlow (char *dst, char *src, int len)
{
int t;
if (len > TEMPSIZE)
{
t = 0;
while (t < len)
{
ARAMFetch (tempbuffer, src + t, TEMPSIZE);
if (t + TEMPSIZE > len)
{
memcpy (dst + t, tempbuffer, len - t);
}
else
memcpy (dst + t, tempbuffer, TEMPSIZE);
t += TEMPSIZE;
}
}
else
{
ARAMFetch (tempbuffer, src, len);
memcpy (dst, tempbuffer, len);
}
}