Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

CP15 Cache Emulation Work #1955

Open
wants to merge 43 commits into
base: master
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
43 commits
Select commit Hold shift + click to select a range
a2f711c
Added CP15 Data and Instruction Cache Lockdown Register
DesperateProgrammer Jan 18, 2024
3b13cf7
Merge branch 'melonDS-emu:master' into mem9_timings
DesperateProgrammer Jan 18, 2024
716b4af
Added ICacheLockDown and DCacheLockDown to CP15 savestate
DesperateProgrammer Jan 18, 2024
a4f8e6f
Updated savestate version
DesperateProgrammer Jan 18, 2024
1019afe
Cleaned up magic numbers and simplified (not yet used) ICache functions
DesperateProgrammer Jan 19, 2024
434c234
Enable instruction cache routines. Fixed typos in constants.
DesperateProgrammer Jan 19, 2024
d9fcc2e
Replaced more CP15 magic values with named constants
DesperateProgrammer Jan 19, 2024
b6b0197
Implemented "weird" instruction cache invalidation by Set/Way
DesperateProgrammer Jan 19, 2024
0a07661
Implemented DCache and several CP15 registers
DesperateProgrammer Jan 24, 2024
a46f972
Added Cache Data Write and Read via CP15
DesperateProgrammer Jan 24, 2024
f67e939
Fixed data cache using only 1 cycle on miss.
DesperateProgrammer Jan 24, 2024
b23cb81
Changed write to cached data from invalidating to updating the cached…
DesperateProgrammer Jan 24, 2024
71b5c82
Fixed unaligned access to data cache
DesperateProgrammer Jan 24, 2024
7b8327d
Disabled Caches, when JIT is enabled
DesperateProgrammer Jan 25, 2024
9d2e515
Implemented CacheLockDown
DesperateProgrammer Jan 25, 2024
028b674
Merge branch 'melonDS-emu:master' into mem9_timings
DesperateProgrammer Jan 25, 2024
bf0767b
Added CP15 prefetch routine
DesperateProgrammer Jan 25, 2024
3c94802
Removed magic number from Cache Fill timings.
DesperateProgrammer Jan 25, 2024
8a0ad8a
Added permission checks to CP15 Cache register write operations
DesperateProgrammer Jan 25, 2024
6959d6f
Added privilege checks for reading & writing CP15 cache registers
DesperateProgrammer Jan 25, 2024
cd60c13
Replaced Magic numbers in CP15 cache type register
DesperateProgrammer Jan 25, 2024
a0f4eb6
Fixed Typo and missing file on the cache type constants
DesperateProgrammer Jan 25, 2024
caa90dd
Changed DCache Random Cache-Line selection to a double Galoise LFSR
DesperateProgrammer Jan 26, 2024
1dc15a0
Simplified set selection adjustment for the cache lock down
DesperateProgrammer Jan 26, 2024
06ea3f6
Cleaned up and fastened up
DesperateProgrammer Jan 31, 2024
c8204a8
Further clean up, removal of magic numbers from CP15.cpp
DesperateProgrammer Feb 1, 2024
1a9179b
Removed unneccessary wfcsettings file
DesperateProgrammer Feb 1, 2024
81c9434
Added CP15 Trace Process ID
DesperateProgrammer Feb 1, 2024
9fa814b
Added check of op1 in MCR/MRC
DesperateProgrammer Feb 1, 2024
c007540
Included the I/DCache Streaming disable bits in cache lookup
DesperateProgrammer Feb 1, 2024
02d6fba
Added several doxygen-style comments for documentation
DesperateProgrammer Feb 2, 2024
f9a831e
Removed Thumb Check on CP15 Access restriction as MCR/MRC are not pre…
DesperateProgrammer Feb 3, 2024
2a385b5
Cleaned up some more magic numbers
DesperateProgrammer Feb 4, 2024
b1637e2
Added more function documenting comments
DesperateProgrammer Feb 4, 2024
d5a351a
Added more documenting comments
DesperateProgrammer Feb 4, 2024
4b20c1b
Added more documenting comments
DesperateProgrammer Feb 5, 2024
97aabe0
Merge branch 'melonDS-emu:master' into mem9_timings
DesperateProgrammer Feb 5, 2024
129a3e0
Added write-back ability in addition to write-through for the data cache
DesperateProgrammer Feb 6, 2024
a8306f2
Removed some debug remains
DesperateProgrammer Feb 6, 2024
4164687
Fixed an issue with caclulating DTCM/ITCM masks after addr was declar…
DesperateProgrammer Feb 6, 2024
01bb5f1
Enabled Overlapping region fix again
DesperateProgrammer Feb 6, 2024
b2d196c
Formatting corrections
DesperateProgrammer Feb 7, 2024
9ad2ff3
Merge branch 'melonDS-emu:master' into mem9_timings
DesperateProgrammer Feb 13, 2024
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
40 changes: 14 additions & 26 deletions src/ARM.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -1152,69 +1152,57 @@ u32 ARMv5::ReadMem(u32 addr, int size)
}
#endif

void ARMv4::DataRead8(u32 addr, u32* val)
void ARMv4::DataRead8(const u32 addr, u32* val)
{
*val = BusRead8(addr);
DataRegion = addr;
DataCycles = NDS.ARM7MemTimings[addr >> 15][0];
}

void ARMv4::DataRead16(u32 addr, u32* val)
void ARMv4::DataRead16(const u32 addr, u32* val)
{
addr &= ~1;

*val = BusRead16(addr);
*val = BusRead16(addr & ~1);
DataRegion = addr;
DataCycles = NDS.ARM7MemTimings[addr >> 15][0];
}

void ARMv4::DataRead32(u32 addr, u32* val)
void ARMv4::DataRead32(const u32 addr, u32* val)
{
addr &= ~3;

*val = BusRead32(addr);
*val = BusRead32(addr & ~3);
DataRegion = addr;
DataCycles = NDS.ARM7MemTimings[addr >> 15][2];
}

void ARMv4::DataRead32S(u32 addr, u32* val)
void ARMv4::DataRead32S(const u32 addr, u32* val)
{
addr &= ~3;

*val = BusRead32(addr);
*val = BusRead32(addr & ~3);
DataCycles += NDS.ARM7MemTimings[addr >> 15][3];
}

void ARMv4::DataWrite8(u32 addr, u8 val)
void ARMv4::DataWrite8(const u32 addr, const u8 val)
{
BusWrite8(addr, val);
DataRegion = addr;
DataCycles = NDS.ARM7MemTimings[addr >> 15][0];
}

void ARMv4::DataWrite16(u32 addr, u16 val)
void ARMv4::DataWrite16(const u32 addr, const u16 val)
{
addr &= ~1;

BusWrite16(addr, val);
BusWrite16(addr & ~1, val);
DataRegion = addr;
DataCycles = NDS.ARM7MemTimings[addr >> 15][0];
}

void ARMv4::DataWrite32(u32 addr, u32 val)
void ARMv4::DataWrite32(const u32 addr, const u32 val)
{
addr &= ~3;

BusWrite32(addr, val);
BusWrite32(addr & ~3, val);
DataRegion = addr;
DataCycles = NDS.ARM7MemTimings[addr >> 15][2];
}

void ARMv4::DataWrite32S(u32 addr, u32 val)
void ARMv4::DataWrite32S(const u32 addr, const u32 val)
{
addr &= ~3;

BusWrite32(addr, val);
BusWrite32(addr & ~3, val);
DataCycles += NDS.ARM7MemTimings[addr >> 15][3];
}

Expand Down
Loading
Loading