aboutsummaryrefslogtreecommitdiff
path: root/NDSCart.cpp
diff options
context:
space:
mode:
authorStapleButter <thetotalworm@gmail.com>2017-02-05 17:45:17 +0100
committerStapleButter <thetotalworm@gmail.com>2017-02-05 17:45:17 +0100
commite88cf1b43d554e16ca8f5ba67c7737231c935f0e (patch)
tree60189ab56a9f4f83888c4b74e8ecf6e29004249d /NDSCart.cpp
parentff3b60bc9338ae9753c0f08d38492484f6ed81c6 (diff)
apparently when you set an out-of-bounds address for EEPROM, it should wrap around
TODO: check if it also happens with Flash also fix shit that could have later turned into memory leaks
Diffstat (limited to 'NDSCart.cpp')
-rw-r--r--NDSCart.cpp15
1 files changed, 7 insertions, 8 deletions
diff --git a/NDSCart.cpp b/NDSCart.cpp
index 3bfc814..523f575 100644
--- a/NDSCart.cpp
+++ b/NDSCart.cpp
@@ -56,6 +56,7 @@ void Write_Discover(u8 val, bool islast);
void Init()
{
SRAM = NULL;
+ Discover_Buffer = NULL;
}
void Reset()
@@ -66,6 +67,7 @@ void Reset()
void LoadSave(char* path)
{
if (SRAM) delete[] SRAM;
+ if (Discover_Buffer) delete[] Discover_Buffer;
strncpy(SRAMPath, path, 255);
SRAMPath[255] = '\0';
@@ -181,6 +183,8 @@ void SetMemoryType()
}
CurCmd = prev_cmd;
+
+ delete[] Discover_Buffer;
}
void Write_Discover(u8 val, bool islast)
@@ -272,9 +276,7 @@ void Write_EEPROM(u8 val, bool islast)
}
else
{
- if (Addr < SRAMLength)
- SRAM[Addr] = val;
-
+ SRAM[Addr & (SRAMLength-1)] = val;
Addr++;
}
break;
@@ -288,11 +290,7 @@ void Write_EEPROM(u8 val, bool islast)
}
else
{
- if (Addr >= SRAMLength)
- Data = 0;
- else
- Data = SRAM[Addr];
-
+ Data = SRAM[Addr & (SRAMLength-1)];
Addr++;
}
break;
@@ -321,6 +319,7 @@ void Write_Flash(u8 val, bool islast)
}
else
{
+ // CHECKME: does Flash also wraparound when the address is out of bounds?
if (Addr >= SRAMLength)
Data = 0;
else