mirror of
https://github.com/melonDS-emu/melonDS.git
synced 2025-03-06 21:00:31 +01:00
small improvements to arm9 dma timings
This commit is contained in:
parent
9981a6b98f
commit
85dc9f71d9
3 changed files with 19 additions and 270 deletions
20
src/CP15.cpp
20
src/CP15.cpp
|
@ -2268,7 +2268,7 @@ void ARMv5::CodeRead32_4()
|
||||||
|
|
||||||
u8 cycles = MemTimings[addr >> 14][1];
|
u8 cycles = MemTimings[addr >> 14][1];
|
||||||
|
|
||||||
NDS.ARM9Timestamp += cycles;
|
NDS.DMA9Timestamp = NDS.ARM9Timestamp += cycles;
|
||||||
|
|
||||||
if (WBTimestamp < ((NDS.ARM9Timestamp - (3<<NDS.ARM9ClockShift) + ((1<<NDS.ARM9ClockShift)-1)) & ~((1<<NDS.ARM9ClockShift)-1)))
|
if (WBTimestamp < ((NDS.ARM9Timestamp - (3<<NDS.ARM9ClockShift) + ((1<<NDS.ARM9ClockShift)-1)) & ~((1<<NDS.ARM9ClockShift)-1)))
|
||||||
WBTimestamp = (NDS.ARM9Timestamp - (3<<NDS.ARM9ClockShift) + ((1<<NDS.ARM9ClockShift)-1)) & ~((1<<NDS.ARM9ClockShift)-1);
|
WBTimestamp = (NDS.ARM9Timestamp - (3<<NDS.ARM9ClockShift) + ((1<<NDS.ARM9ClockShift)-1)) & ~((1<<NDS.ARM9ClockShift)-1);
|
||||||
|
@ -2419,7 +2419,7 @@ void ARMv5::DRead8_5()
|
||||||
|
|
||||||
if (NDS.ARM9Timestamp < NDS.DMA9Timestamp) NDS.ARM9Timestamp = NDS.DMA9Timestamp;
|
if (NDS.ARM9Timestamp < NDS.DMA9Timestamp) NDS.ARM9Timestamp = NDS.DMA9Timestamp;
|
||||||
|
|
||||||
NDS.ARM9Timestamp += MemTimings[addr >> 14][0];
|
NDS.DMA9Timestamp = NDS.ARM9Timestamp += MemTimings[addr >> 14][0];
|
||||||
DataCycles = 3<<NDS.ARM9ClockShift;
|
DataCycles = 3<<NDS.ARM9ClockShift;
|
||||||
|
|
||||||
if (WBTimestamp < ((NDS.ARM9Timestamp - (3<<NDS.ARM9ClockShift) + ((1<<NDS.ARM9ClockShift)-1)) & ~((1<<NDS.ARM9ClockShift)-1)))
|
if (WBTimestamp < ((NDS.ARM9Timestamp - (3<<NDS.ARM9ClockShift) + ((1<<NDS.ARM9ClockShift)-1)) & ~((1<<NDS.ARM9ClockShift)-1)))
|
||||||
|
@ -2556,7 +2556,7 @@ void ARMv5::DRead16_5()
|
||||||
|
|
||||||
if (NDS.ARM9Timestamp < NDS.DMA9Timestamp) NDS.ARM9Timestamp = NDS.DMA9Timestamp;
|
if (NDS.ARM9Timestamp < NDS.DMA9Timestamp) NDS.ARM9Timestamp = NDS.DMA9Timestamp;
|
||||||
|
|
||||||
NDS.ARM9Timestamp += MemTimings[addr >> 14][0];
|
NDS.DMA9Timestamp = NDS.ARM9Timestamp += MemTimings[addr >> 14][0];
|
||||||
DataCycles = 3<<NDS.ARM9ClockShift;
|
DataCycles = 3<<NDS.ARM9ClockShift;
|
||||||
|
|
||||||
if (WBTimestamp < ((NDS.ARM9Timestamp - (3<<NDS.ARM9ClockShift) + ((1<<NDS.ARM9ClockShift)-1)) & ~((1<<NDS.ARM9ClockShift)-1)))
|
if (WBTimestamp < ((NDS.ARM9Timestamp - (3<<NDS.ARM9ClockShift) + ((1<<NDS.ARM9ClockShift)-1)) & ~((1<<NDS.ARM9ClockShift)-1)))
|
||||||
|
@ -2696,7 +2696,7 @@ void ARMv5::DRead32_5()
|
||||||
|
|
||||||
if (NDS.ARM9Timestamp < NDS.DMA9Timestamp) NDS.ARM9Timestamp = NDS.DMA9Timestamp;
|
if (NDS.ARM9Timestamp < NDS.DMA9Timestamp) NDS.ARM9Timestamp = NDS.DMA9Timestamp;
|
||||||
|
|
||||||
NDS.ARM9Timestamp += MemTimings[addr >> 14][1];
|
NDS.DMA9Timestamp = NDS.ARM9Timestamp += MemTimings[addr >> 14][1];
|
||||||
DataCycles = 3<<NDS.ARM9ClockShift;
|
DataCycles = 3<<NDS.ARM9ClockShift;
|
||||||
|
|
||||||
if (WBTimestamp < ((NDS.ARM9Timestamp - (3<<NDS.ARM9ClockShift) + ((1<<NDS.ARM9ClockShift)-1)) & ~((1<<NDS.ARM9ClockShift)-1)))
|
if (WBTimestamp < ((NDS.ARM9Timestamp - (3<<NDS.ARM9ClockShift) + ((1<<NDS.ARM9ClockShift)-1)) & ~((1<<NDS.ARM9ClockShift)-1)))
|
||||||
|
@ -2845,7 +2845,7 @@ void ARMv5::DRead32S_5A()
|
||||||
|
|
||||||
if (NDS.ARM9Timestamp < NDS.DMA9Timestamp) NDS.ARM9Timestamp = NDS.DMA9Timestamp;
|
if (NDS.ARM9Timestamp < NDS.DMA9Timestamp) NDS.ARM9Timestamp = NDS.DMA9Timestamp;
|
||||||
|
|
||||||
NDS.ARM9Timestamp += MemTimings[addr>>14][2];
|
NDS.DMA9Timestamp = NDS.ARM9Timestamp += MemTimings[addr>>14][2];
|
||||||
DataCycles = MemTimings[addr>>14][2];
|
DataCycles = MemTimings[addr>>14][2];
|
||||||
|
|
||||||
if (WBTimestamp < ((NDS.ARM9Timestamp - (3<<NDS.ARM9ClockShift) + ((1<<NDS.ARM9ClockShift)-1)) & ~((1<<NDS.ARM9ClockShift)-1)))
|
if (WBTimestamp < ((NDS.ARM9Timestamp - (3<<NDS.ARM9ClockShift) + ((1<<NDS.ARM9ClockShift)-1)) & ~((1<<NDS.ARM9ClockShift)-1)))
|
||||||
|
@ -2992,7 +2992,7 @@ void ARMv5::DWrite8_5()
|
||||||
|
|
||||||
if (NDS.ARM9Timestamp < NDS.DMA9Timestamp) NDS.ARM9Timestamp = NDS.DMA9Timestamp;
|
if (NDS.ARM9Timestamp < NDS.DMA9Timestamp) NDS.ARM9Timestamp = NDS.DMA9Timestamp;
|
||||||
|
|
||||||
NDS.ARM9Timestamp += MemTimings[addr >> 14][0];
|
NDS.DMA9Timestamp = NDS.ARM9Timestamp += MemTimings[addr >> 14][0];
|
||||||
DataCycles = 3<<NDS.ARM9ClockShift;
|
DataCycles = 3<<NDS.ARM9ClockShift;
|
||||||
DataRegion = NDS.ARM9Regions[addr>>14];
|
DataRegion = NDS.ARM9Regions[addr>>14];
|
||||||
|
|
||||||
|
@ -3123,7 +3123,7 @@ void ARMv5::DWrite16_5()
|
||||||
|
|
||||||
if (NDS.ARM9Timestamp < NDS.DMA9Timestamp) NDS.ARM9Timestamp = NDS.DMA9Timestamp;
|
if (NDS.ARM9Timestamp < NDS.DMA9Timestamp) NDS.ARM9Timestamp = NDS.DMA9Timestamp;
|
||||||
|
|
||||||
NDS.ARM9Timestamp += MemTimings[addr >> 14][0];
|
NDS.DMA9Timestamp = NDS.ARM9Timestamp += MemTimings[addr >> 14][0];
|
||||||
DataCycles = 3<<NDS.ARM9ClockShift;
|
DataCycles = 3<<NDS.ARM9ClockShift;
|
||||||
DataRegion = NDS.ARM9Regions[addr>>14];
|
DataRegion = NDS.ARM9Regions[addr>>14];
|
||||||
|
|
||||||
|
@ -3262,7 +3262,7 @@ void ARMv5::DWrite32_5()
|
||||||
|
|
||||||
if (NDS.ARM9Timestamp < NDS.DMA9Timestamp) NDS.ARM9Timestamp = NDS.DMA9Timestamp;
|
if (NDS.ARM9Timestamp < NDS.DMA9Timestamp) NDS.ARM9Timestamp = NDS.DMA9Timestamp;
|
||||||
|
|
||||||
NDS.ARM9Timestamp += MemTimings[addr >> 14][1];
|
NDS.DMA9Timestamp = NDS.ARM9Timestamp += MemTimings[addr >> 14][1];
|
||||||
DataCycles = 3<<NDS.ARM9ClockShift;
|
DataCycles = 3<<NDS.ARM9ClockShift;
|
||||||
DataRegion = NDS.ARM9Regions[addr>>14];
|
DataRegion = NDS.ARM9Regions[addr>>14];
|
||||||
|
|
||||||
|
@ -3410,7 +3410,7 @@ void ARMv5::DWrite32S_5A()
|
||||||
|
|
||||||
if (NDS.ARM9Timestamp < NDS.DMA9Timestamp) NDS.ARM9Timestamp = NDS.DMA9Timestamp;
|
if (NDS.ARM9Timestamp < NDS.DMA9Timestamp) NDS.ARM9Timestamp = NDS.DMA9Timestamp;
|
||||||
|
|
||||||
NDS.ARM9Timestamp += MemTimings[addr>>14][2];
|
NDS.DMA9Timestamp = NDS.ARM9Timestamp += MemTimings[addr>>14][2];
|
||||||
DataRegion = NDS.ARM9Regions[addr>>14];
|
DataRegion = NDS.ARM9Regions[addr>>14];
|
||||||
|
|
||||||
if (WBTimestamp < ((NDS.ARM9Timestamp + ((1<<NDS.ARM9ClockShift)-1)) & ~((1<<NDS.ARM9ClockShift)-1)))
|
if (WBTimestamp < ((NDS.ARM9Timestamp + ((1<<NDS.ARM9ClockShift)-1)) & ~((1<<NDS.ARM9ClockShift)-1)))
|
||||||
|
@ -3428,7 +3428,7 @@ void ARMv5::DWrite32S_5B()
|
||||||
|
|
||||||
if (NDS.ARM9Timestamp < NDS.DMA9Timestamp) NDS.ARM9Timestamp = NDS.DMA9Timestamp;
|
if (NDS.ARM9Timestamp < NDS.DMA9Timestamp) NDS.ARM9Timestamp = NDS.DMA9Timestamp;
|
||||||
|
|
||||||
NDS.ARM9Timestamp += MemTimings[addr>>14][1];
|
NDS.DMA9Timestamp = NDS.ARM9Timestamp += MemTimings[addr>>14][1];
|
||||||
DataCycles = 3 << NDS.ARM9ClockShift;
|
DataCycles = 3 << NDS.ARM9ClockShift;
|
||||||
DataRegion = NDS.ARM9Regions[addr>>14];
|
DataRegion = NDS.ARM9Regions[addr>>14];
|
||||||
|
|
||||||
|
|
267
src/DMA.cpp
267
src/DMA.cpp
|
@ -217,12 +217,7 @@ void DMA::Start()
|
||||||
|
|
||||||
if (CPU == 0)
|
if (CPU == 0)
|
||||||
{
|
{
|
||||||
u64 ts;
|
u64 ts = NDS.SysTimestamp << NDS.ARM9ClockShift;
|
||||||
/*if (StartMode == 0x00)
|
|
||||||
{
|
|
||||||
ts = (NDS.ARM9Timestamp + ((1<<NDS.ARM9ClockShift)-1)) & ~((1<<NDS.ARM9ClockShift)-1);
|
|
||||||
}
|
|
||||||
else*/ ts = NDS.SysTimestamp << NDS.ARM9ClockShift;
|
|
||||||
|
|
||||||
if (NDS.DMA9Timestamp < ts) NDS.DMA9Timestamp = ts;
|
if (NDS.DMA9Timestamp < ts) NDS.DMA9Timestamp = ts;
|
||||||
}
|
}
|
||||||
|
@ -246,68 +241,7 @@ u32 DMA::UnitTimings9_16(int burststart)
|
||||||
dst_n = NDS.ARM9MemTimings[dst_id][4];
|
dst_n = NDS.ARM9MemTimings[dst_id][4];
|
||||||
dst_s = NDS.ARM9MemTimings[dst_id][5];
|
dst_s = NDS.ARM9MemTimings[dst_id][5];
|
||||||
|
|
||||||
/*if (src_rgn == Mem9_MainRAM)
|
if (src_rgn & dst_rgn)
|
||||||
{
|
|
||||||
if (dst_rgn == Mem9_MainRAM)
|
|
||||||
{
|
|
||||||
return (burststart == 2) ? 11 : 16;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (SrcAddrInc > 0)
|
|
||||||
{
|
|
||||||
if ((burststart == 2) || MRAMBurstTable[MRAMBurstCount] == 0)
|
|
||||||
{
|
|
||||||
MRAMBurstCount = 0;
|
|
||||||
|
|
||||||
if (dst_rgn == Mem9_GBAROM)
|
|
||||||
{
|
|
||||||
if (dst_s == 4)
|
|
||||||
MRAMBurstTable = DMATiming::MRAMRead16Bursts[1];
|
|
||||||
else
|
|
||||||
MRAMBurstTable = DMATiming::MRAMRead16Bursts[2];
|
|
||||||
}
|
|
||||||
else
|
|
||||||
MRAMBurstTable = DMATiming::MRAMRead16Bursts[0];
|
|
||||||
}
|
|
||||||
|
|
||||||
u32 ret = MRAMBurstTable[MRAMBurstCount++];
|
|
||||||
return ret;
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
// TODO: not quite right for GBA slot
|
|
||||||
return (((CurSrcAddr & 0x1F) == 0x1E) ? 7 : 8) +
|
|
||||||
((burststart == 2) ? dst_n : dst_s);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
else if (dst_rgn == Mem9_MainRAM)
|
|
||||||
{
|
|
||||||
if (DstAddrInc > 0)
|
|
||||||
{
|
|
||||||
if ((burststart == 2) || MRAMBurstTable[MRAMBurstCount] == 0)
|
|
||||||
{
|
|
||||||
MRAMBurstCount = 0;
|
|
||||||
|
|
||||||
if (src_rgn == Mem9_GBAROM)
|
|
||||||
{
|
|
||||||
if (src_s == 4)
|
|
||||||
MRAMBurstTable = DMATiming::MRAMWrite16Bursts[1];
|
|
||||||
else
|
|
||||||
MRAMBurstTable = DMATiming::MRAMWrite16Bursts[2];
|
|
||||||
}
|
|
||||||
else
|
|
||||||
MRAMBurstTable = DMATiming::MRAMWrite16Bursts[0];
|
|
||||||
}
|
|
||||||
|
|
||||||
u32 ret = MRAMBurstTable[MRAMBurstCount++];
|
|
||||||
return ret;
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
return ((burststart == 2) ? src_n : src_s) + 7;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
else*/ if (src_rgn & dst_rgn)
|
|
||||||
{
|
{
|
||||||
if (burststart != 1)
|
if (burststart != 1)
|
||||||
return src_n + dst_n + (src_n == 1 || burststart <= 0);
|
return src_n + dst_n + (src_n == 1 || burststart <= 0);
|
||||||
|
@ -337,70 +271,7 @@ u32 DMA::UnitTimings9_32(int burststart)
|
||||||
dst_n = NDS.ARM9MemTimings[dst_id][6];
|
dst_n = NDS.ARM9MemTimings[dst_id][6];
|
||||||
dst_s = NDS.ARM9MemTimings[dst_id][7];
|
dst_s = NDS.ARM9MemTimings[dst_id][7];
|
||||||
|
|
||||||
/*if (src_rgn == Mem9_MainRAM)
|
if (src_rgn & dst_rgn)
|
||||||
{
|
|
||||||
if (dst_rgn == Mem9_MainRAM)
|
|
||||||
return (burststart == 2) ? 13 : 18;
|
|
||||||
|
|
||||||
if (SrcAddrInc > 0)
|
|
||||||
{
|
|
||||||
if ((burststart == 2) || MRAMBurstTable[MRAMBurstCount] == 0)
|
|
||||||
{
|
|
||||||
MRAMBurstCount = 0;
|
|
||||||
|
|
||||||
if (dst_rgn == Mem9_GBAROM)
|
|
||||||
{
|
|
||||||
if (dst_s == 8)
|
|
||||||
MRAMBurstTable = DMATiming::MRAMRead32Bursts[2];
|
|
||||||
else
|
|
||||||
MRAMBurstTable = DMATiming::MRAMRead32Bursts[3];
|
|
||||||
}
|
|
||||||
else if (dst_n == 2)
|
|
||||||
MRAMBurstTable = DMATiming::MRAMRead32Bursts[0];
|
|
||||||
else
|
|
||||||
MRAMBurstTable = DMATiming::MRAMRead32Bursts[1];
|
|
||||||
}
|
|
||||||
|
|
||||||
u32 ret = MRAMBurstTable[MRAMBurstCount++];
|
|
||||||
return ret;
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
// TODO: not quite right for GBA slot
|
|
||||||
return (((CurSrcAddr & 0x1F) == 0x1C) ? (dst_n==2 ? 7:8) : 9) +
|
|
||||||
((burststart == 2) ? dst_n : dst_s);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
else if (dst_rgn == Mem9_MainRAM)
|
|
||||||
{
|
|
||||||
if (DstAddrInc > 0)
|
|
||||||
{
|
|
||||||
if ((burststart == 2) || MRAMBurstTable[MRAMBurstCount] == 0)
|
|
||||||
{
|
|
||||||
MRAMBurstCount = 0;
|
|
||||||
|
|
||||||
if (src_rgn == Mem9_GBAROM)
|
|
||||||
{
|
|
||||||
if (src_s == 8)
|
|
||||||
MRAMBurstTable = DMATiming::MRAMWrite32Bursts[2];
|
|
||||||
else
|
|
||||||
MRAMBurstTable = DMATiming::MRAMWrite32Bursts[3];
|
|
||||||
}
|
|
||||||
else if (src_n == 2)
|
|
||||||
MRAMBurstTable = DMATiming::MRAMWrite32Bursts[0];
|
|
||||||
else
|
|
||||||
MRAMBurstTable = DMATiming::MRAMWrite32Bursts[1];
|
|
||||||
}
|
|
||||||
|
|
||||||
u32 ret = MRAMBurstTable[MRAMBurstCount++];
|
|
||||||
return ret;
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
return ((burststart == 2) ? src_n : src_s) + 8;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
else*/ if (src_rgn & dst_rgn)
|
|
||||||
{
|
{
|
||||||
if (burststart != 1)
|
if (burststart != 1)
|
||||||
return src_n + dst_n + (src_n == 1 || burststart <= 0);
|
return src_n + dst_n + (src_n == 1 || burststart <= 0);
|
||||||
|
@ -432,66 +303,7 @@ u32 DMA::UnitTimings7_16(int burststart)
|
||||||
dst_n = NDS.ARM7MemTimings[dst_id][0];
|
dst_n = NDS.ARM7MemTimings[dst_id][0];
|
||||||
dst_s = NDS.ARM7MemTimings[dst_id][1];
|
dst_s = NDS.ARM7MemTimings[dst_id][1];
|
||||||
|
|
||||||
/*if (src_rgn == Mem7_MainRAM)
|
if (src_rgn & dst_rgn)
|
||||||
{
|
|
||||||
if (dst_rgn == Mem7_MainRAM)
|
|
||||||
return 16;
|
|
||||||
|
|
||||||
if (SrcAddrInc > 0)
|
|
||||||
{
|
|
||||||
if (burststart || MRAMBurstTable[MRAMBurstCount] == 0)
|
|
||||||
{
|
|
||||||
MRAMBurstCount = 0;
|
|
||||||
|
|
||||||
if (dst_rgn == Mem7_GBAROM || dst_rgn == Mem7_Wifi0 || dst_rgn == Mem7_Wifi1)
|
|
||||||
{
|
|
||||||
if (dst_s == 4)
|
|
||||||
MRAMBurstTable = DMATiming::MRAMRead16Bursts[1];
|
|
||||||
else
|
|
||||||
MRAMBurstTable = DMATiming::MRAMRead16Bursts[2];
|
|
||||||
}
|
|
||||||
else
|
|
||||||
MRAMBurstTable = DMATiming::MRAMRead16Bursts[0];
|
|
||||||
}
|
|
||||||
|
|
||||||
u32 ret = MRAMBurstTable[MRAMBurstCount++];
|
|
||||||
return ret;
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
// TODO: not quite right for GBA slot
|
|
||||||
return (((CurSrcAddr & 0x1F) == 0x1E) ? 7 : 8) +
|
|
||||||
(burststart ? dst_n : dst_s);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
else if (dst_rgn == Mem7_MainRAM)
|
|
||||||
{
|
|
||||||
if (DstAddrInc > 0)
|
|
||||||
{
|
|
||||||
if (burststart || MRAMBurstTable[MRAMBurstCount] == 0)
|
|
||||||
{
|
|
||||||
MRAMBurstCount = 0;
|
|
||||||
|
|
||||||
if (src_rgn == Mem7_GBAROM || src_rgn == Mem7_Wifi0 || src_rgn == Mem7_Wifi1)
|
|
||||||
{
|
|
||||||
if (src_s == 4)
|
|
||||||
MRAMBurstTable = DMATiming::MRAMWrite16Bursts[1];
|
|
||||||
else
|
|
||||||
MRAMBurstTable = DMATiming::MRAMWrite16Bursts[2];
|
|
||||||
}
|
|
||||||
else
|
|
||||||
MRAMBurstTable = DMATiming::MRAMWrite16Bursts[0];
|
|
||||||
}
|
|
||||||
|
|
||||||
u32 ret = MRAMBurstTable[MRAMBurstCount++];
|
|
||||||
return ret;
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
return (burststart ? src_n : src_s) + 7;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
else*/ if (src_rgn & dst_rgn)
|
|
||||||
{
|
{
|
||||||
if (burststart != 1)
|
if (burststart != 1)
|
||||||
return src_n + dst_n + (src_n == 1 || burststart <= 0);
|
return src_n + dst_n + (src_n == 1 || burststart <= 0);
|
||||||
|
@ -521,70 +333,7 @@ u32 DMA::UnitTimings7_32(int burststart)
|
||||||
dst_n = NDS.ARM7MemTimings[dst_id][2];
|
dst_n = NDS.ARM7MemTimings[dst_id][2];
|
||||||
dst_s = NDS.ARM7MemTimings[dst_id][3];
|
dst_s = NDS.ARM7MemTimings[dst_id][3];
|
||||||
|
|
||||||
/*if (src_rgn == Mem7_MainRAM)
|
if (src_rgn & dst_rgn)
|
||||||
{
|
|
||||||
if (dst_rgn == Mem7_MainRAM)
|
|
||||||
return 18;
|
|
||||||
|
|
||||||
if (SrcAddrInc > 0)
|
|
||||||
{
|
|
||||||
if (burststart || MRAMBurstTable[MRAMBurstCount] == 0)
|
|
||||||
{
|
|
||||||
MRAMBurstCount = 0;
|
|
||||||
|
|
||||||
if (dst_rgn == Mem7_GBAROM || dst_rgn == Mem7_Wifi0 || dst_rgn == Mem7_Wifi1)
|
|
||||||
{
|
|
||||||
if (dst_s == 8)
|
|
||||||
MRAMBurstTable = DMATiming::MRAMRead32Bursts[2];
|
|
||||||
else
|
|
||||||
MRAMBurstTable = DMATiming::MRAMRead32Bursts[3];
|
|
||||||
}
|
|
||||||
else if (dst_n == 2)
|
|
||||||
MRAMBurstTable = DMATiming::MRAMRead32Bursts[0];
|
|
||||||
else
|
|
||||||
MRAMBurstTable = DMATiming::MRAMRead32Bursts[1];
|
|
||||||
}
|
|
||||||
|
|
||||||
u32 ret = MRAMBurstTable[MRAMBurstCount++];
|
|
||||||
return ret;
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
// TODO: not quite right for GBA slot
|
|
||||||
return (((CurSrcAddr & 0x1F) == 0x1C) ? (dst_n==2 ? 7:8) : 9) +
|
|
||||||
(burststart ? dst_n : dst_s);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
else if (dst_rgn == Mem7_MainRAM)
|
|
||||||
{
|
|
||||||
if (DstAddrInc > 0)
|
|
||||||
{
|
|
||||||
if (burststart || MRAMBurstTable[MRAMBurstCount] == 0)
|
|
||||||
{
|
|
||||||
MRAMBurstCount = 0;
|
|
||||||
|
|
||||||
if (src_rgn == Mem7_GBAROM || src_rgn == Mem7_Wifi0 || src_rgn == Mem7_Wifi1)
|
|
||||||
{
|
|
||||||
if (src_s == 8)
|
|
||||||
MRAMBurstTable = DMATiming::MRAMWrite32Bursts[2];
|
|
||||||
else
|
|
||||||
MRAMBurstTable = DMATiming::MRAMWrite32Bursts[3];
|
|
||||||
}
|
|
||||||
else if (src_n == 2)
|
|
||||||
MRAMBurstTable = DMATiming::MRAMWrite32Bursts[0];
|
|
||||||
else
|
|
||||||
MRAMBurstTable = DMATiming::MRAMWrite32Bursts[1];
|
|
||||||
}
|
|
||||||
|
|
||||||
u32 ret = MRAMBurstTable[MRAMBurstCount++];
|
|
||||||
return ret;
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
return (burststart ? src_n : src_s) + 8;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
else*/ if (src_rgn & dst_rgn)
|
|
||||||
{
|
{
|
||||||
if (burststart != 1)
|
if (burststart != 1)
|
||||||
return src_n + dst_n + (src_n == 1 || burststart <= 0);
|
return src_n + dst_n + (src_n == 1 || burststart <= 0);
|
||||||
|
@ -605,7 +354,7 @@ void DMA::Run9()
|
||||||
//NDS.DMA9Timestamp = std::max(NDS.DMA9Timestamp, NDS.SysTimestamp << NDS.ARM9ClockShift);
|
//NDS.DMA9Timestamp = std::max(NDS.DMA9Timestamp, NDS.SysTimestamp << NDS.ARM9ClockShift);
|
||||||
//NDS.DMA9Timestamp = (NDS.DMA9Timestamp + ((1<<NDS.ARM9ClockShift)-1)) & ~((1<<NDS.ARM9ClockShift)-1);
|
//NDS.DMA9Timestamp = (NDS.DMA9Timestamp + ((1<<NDS.ARM9ClockShift)-1)) & ~((1<<NDS.ARM9ClockShift)-1);
|
||||||
|
|
||||||
if (NDS.DMA9Timestamp-1 >= NDS.ARM9Target) return;
|
if (NDS.DMA9Timestamp >= NDS.ARM9Target) return;
|
||||||
|
|
||||||
Executing = true;
|
Executing = true;
|
||||||
|
|
||||||
|
@ -634,7 +383,7 @@ void DMA::Run9()
|
||||||
IterCount--;
|
IterCount--;
|
||||||
RemCount--;
|
RemCount--;
|
||||||
|
|
||||||
if (NDS.DMA9Timestamp-1 >= NDS.ARM9Target) break;
|
if (NDS.DMA9Timestamp >= NDS.ARM9Target) break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
|
@ -659,7 +408,7 @@ void DMA::Run9()
|
||||||
IterCount--;
|
IterCount--;
|
||||||
RemCount--;
|
RemCount--;
|
||||||
|
|
||||||
if (NDS.DMA9Timestamp-1 >= NDS.ARM9Target) break;
|
if (NDS.DMA9Timestamp >= NDS.ARM9Target) break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -969,7 +969,7 @@ void NDS::MainRAMHandleARM9()
|
||||||
}
|
}
|
||||||
MainRAMLastAccess = A9LAST;
|
MainRAMLastAccess = A9LAST;
|
||||||
}
|
}
|
||||||
ARM9Timestamp = (A9ContentionTS << ARM9ClockShift) - 1;
|
DMA9Timestamp = ARM9Timestamp = (A9ContentionTS << ARM9ClockShift) - 1;
|
||||||
|
|
||||||
if (var & MRCodeFetch)
|
if (var & MRCodeFetch)
|
||||||
{
|
{
|
||||||
|
|
Loading…
Add table
Reference in a new issue