📄 vgsndmem.c
字号:
#include "vgSnd.h"
#include "vgSndMem.h"
// Simple Memory functions
U32 _VR0_SND_MStart[SOUND_MEMORY_BANK_COUNT],
_VR0_SND_MSize[SOUND_MEMORY_BANK_COUNT],
_VR0_SND_MOffset[SOUND_MEMORY_BANK_COUNT];
void VR0SndInitMemory( int select, U32 addr, U32 size )
{
_VR0_SND_MStart[select] = addr;
_VR0_SND_MSize[select] = size;
_VR0_SND_MOffset[select] = 0;
}
void *VR0SndMalloc( int select, U32 size )
{
U32 ret;
//zy _VGMSG(( "VR0SndMalloc : %ld -> ", size ));
// Samples must be align on DWord.(4Byte)
if( size & 0x3 ) size = size + (4 - (size&0x3));
if( _VR0_SND_MOffset[select] + size > _VR0_SND_MSize[select] ) return (void *)vgNULL;
ret = _VR0_SND_MStart[select] + _VR0_SND_MOffset[select];
_VR0_SND_MOffset[select] += size;
//zy _VGMSG(( "ret : %08X\r\n", ret ));
return (void *)ret;
}
void VR0SndAllFree( int select )
{
_VR0_SND_MOffset[select] = 0;
}
/*
// VR0 Read & Write : We support only a 16bit access.
U16 VR0MemRead( U32 addr )
{
U16 * p = (U16 * )addr;
U16 data;
data = *p;
return data;
}
void VR0MemWrite( U32 addr, U16 data )
{
volatile U16 * p = (volatile U16 * )addr;
*p = data;
}
*/
void VR0SndCopyMemory( S16 *pdst, S16 *psrc, U32 size )
{
U32 i;
U32 addr = (U32)pdst;
for( i=0 ; i<size/2 ; i++, addr+=2 )
CPUWrite16( addr, (U16)psrc[i] );
#ifdef _DEBUG
// Verifying....
addr = (U32)pdst;
for( i=0 ; i<size/2 ; i++, addr+=2 )
if( CPURead16(addr) != (U16)psrc[i] )
//zy uartprintf( "Verify Error (0x%08X) : %04X - %04X\r\n", addr, CPURead16(addr), (U16)psrc[i] );
#endif /* _DEBUG */
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -