G2: Add Dev Device DMA

backport from upstream
This commit is contained in:
Flyinghead 2019-11-03 21:24:28 +01:00
parent 0e12da4395
commit 84bdcd9a10
1 changed files with 31 additions and 2 deletions

View File

@ -324,8 +324,37 @@ void Write_SB_E2ST(u32 addr, u32 data)
void Write_SB_DDST(u32 addr, u32 data)
{
if (data & 1)
die("SB_DDST DMA not implemented");
if ((data & 1) && (SB_DDEN & 1))
{
u32 src = SB_DDSTAR;
u32 dst = SB_DDSTAG;
u32 len = SB_DDLEN & 0x7FFFFFFF;
if (SB_DDDIR == 1)
{
u32 t = src;
src = dst;
dst = t;
DEBUG_LOG(AICA, "G2-DDev DMA: SB_DDDIR==1 DMA Read to 0x%X from 0x%X %d bytes", dst, src, len);
}
else
DEBUG_LOG(AICA, "G2-DDev DMA: SB_DDDIR==0 DMA Write to 0x%X from 0x%X %d bytes", dst, src, len);
WriteMemBlock_nommu_dma(dst, src, len);
if (SB_DDLEN & 0x80000000)
SB_DDEN = 1;
else
SB_DDEN = 0;
SB_DDSTAR += len;
SB_DDSTAG += len;
SB_DDST = 0x00000000;//dma done
SB_DDLEN = 0x00000000;
asic_RaiseInterrupt(holly_DEV_DMA);
}
}
void aica_sb_Init()