Rename SRAMFlash to SRAMFlashState
This commit is contained in:
parent
4d1f3d419e
commit
0092937148
|
@ -26,7 +26,6 @@
|
||||||
namespace GBACart_SRAM
|
namespace GBACart_SRAM
|
||||||
{
|
{
|
||||||
|
|
||||||
|
|
||||||
enum SaveType {
|
enum SaveType {
|
||||||
S_NULL,
|
S_NULL,
|
||||||
S_EEPROM4K,
|
S_EEPROM4K,
|
||||||
|
@ -50,7 +49,7 @@ u8* SRAM;
|
||||||
FILE* SRAMFile;
|
FILE* SRAMFile;
|
||||||
u32 SRAMLength;
|
u32 SRAMLength;
|
||||||
SaveType SRAMType;
|
SaveType SRAMType;
|
||||||
FlashProperties SRAMFlash;
|
FlashProperties SRAMFlashState;
|
||||||
|
|
||||||
char SRAMPath[1024];
|
char SRAMPath[1024];
|
||||||
|
|
||||||
|
@ -85,7 +84,7 @@ void Reset()
|
||||||
SRAMFile = NULL;
|
SRAMFile = NULL;
|
||||||
SRAMLength = 0;
|
SRAMLength = 0;
|
||||||
SRAMType = S_NULL;
|
SRAMType = S_NULL;
|
||||||
SRAMFlash = {};
|
SRAMFlashState = {};
|
||||||
}
|
}
|
||||||
|
|
||||||
void DoSavestate(Savestate* file)
|
void DoSavestate(Savestate* file)
|
||||||
|
@ -147,14 +146,14 @@ void LoadSave(const char* path)
|
||||||
if (SRAMType == S_FLASH512K)
|
if (SRAMType == S_FLASH512K)
|
||||||
{
|
{
|
||||||
// Panasonic 64K chip
|
// Panasonic 64K chip
|
||||||
SRAMFlash.device = 0x1B;
|
SRAMFlashState.device = 0x1B;
|
||||||
SRAMFlash.manufacturer = 0x32;
|
SRAMFlashState.manufacturer = 0x32;
|
||||||
}
|
}
|
||||||
else if (SRAMType == S_FLASH1M)
|
else if (SRAMType == S_FLASH1M)
|
||||||
{
|
{
|
||||||
// Sanyo 128K chip
|
// Sanyo 128K chip
|
||||||
SRAMFlash.device = 0x13;
|
SRAMFlashState.device = 0x13;
|
||||||
SRAMFlash.manufacturer = 0x62;
|
SRAMFlashState.manufacturer = 0x62;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -183,27 +182,27 @@ void RelocateSave(const char* path, bool write)
|
||||||
// mostly ported from DeSmuME
|
// mostly ported from DeSmuME
|
||||||
u8 Read_Flash(u32 addr)
|
u8 Read_Flash(u32 addr)
|
||||||
{
|
{
|
||||||
if (SRAMFlash.cmd == 0) // no cmd
|
if (SRAMFlashState.cmd == 0) // no cmd
|
||||||
{
|
{
|
||||||
return *(u8*)&SRAM[addr + 0x10000 * SRAMFlash.bank];
|
return *(u8*)&SRAM[addr + 0x10000 * SRAMFlashState.bank];
|
||||||
}
|
}
|
||||||
|
|
||||||
switch (SRAMFlash.cmd)
|
switch (SRAMFlashState.cmd)
|
||||||
{
|
{
|
||||||
case 0x90: // chip ID
|
case 0x90: // chip ID
|
||||||
if (addr == 0x0000) return SRAMFlash.manufacturer;
|
if (addr == 0x0000) return SRAMFlashState.manufacturer;
|
||||||
if (addr == 0x0001) return SRAMFlash.device;
|
if (addr == 0x0001) return SRAMFlashState.device;
|
||||||
break;
|
break;
|
||||||
case 0xF0: // terminate command (TODO: break if non-Macronix chip and not at the end of an ID call?)
|
case 0xF0: // terminate command (TODO: break if non-Macronix chip and not at the end of an ID call?)
|
||||||
SRAMFlash.state = 0;
|
SRAMFlashState.state = 0;
|
||||||
SRAMFlash.cmd = 0;
|
SRAMFlashState.cmd = 0;
|
||||||
break;
|
break;
|
||||||
case 0xA0: // write command
|
case 0xA0: // write command
|
||||||
break; // ignore here, handled in Write_Flash()
|
break; // ignore here, handled in Write_Flash()
|
||||||
case 0xB0: // bank switching (128K only)
|
case 0xB0: // bank switching (128K only)
|
||||||
break; // ignore here, handled in Write_Flash()
|
break; // ignore here, handled in Write_Flash()
|
||||||
default:
|
default:
|
||||||
printf("GBACart_SRAM::Read_Flash: unknown command 0x%02X @ 0x%04X\n", SRAMFlash.cmd, addr);
|
printf("GBACart_SRAM::Read_Flash: unknown command 0x%02X @ 0x%04X\n", SRAMFlashState.cmd, addr);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -220,7 +219,7 @@ void Write_EEPROM(u32 addr, u8 val)
|
||||||
// mostly ported from DeSmuME
|
// mostly ported from DeSmuME
|
||||||
void Write_Flash(u32 addr, u8 val)
|
void Write_Flash(u32 addr, u8 val)
|
||||||
{
|
{
|
||||||
switch (SRAMFlash.state)
|
switch (SRAMFlashState.state)
|
||||||
{
|
{
|
||||||
case 0x00:
|
case 0x00:
|
||||||
if (addr == 0x5555)
|
if (addr == 0x5555)
|
||||||
|
@ -228,23 +227,23 @@ void Write_Flash(u32 addr, u8 val)
|
||||||
if (val == 0xF0)
|
if (val == 0xF0)
|
||||||
{
|
{
|
||||||
// reset
|
// reset
|
||||||
SRAMFlash.state = 0;
|
SRAMFlashState.state = 0;
|
||||||
SRAMFlash.cmd = 0;
|
SRAMFlashState.cmd = 0;
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
else if (val == 0xAA)
|
else if (val == 0xAA)
|
||||||
{
|
{
|
||||||
SRAMFlash.state = 1;
|
SRAMFlashState.state = 1;
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (addr == 0x0000)
|
if (addr == 0x0000)
|
||||||
{
|
{
|
||||||
if (SRAMFlash.cmd == 0xB0)
|
if (SRAMFlashState.cmd == 0xB0)
|
||||||
{
|
{
|
||||||
// bank switching
|
// bank switching
|
||||||
SRAMFlash.bank = val;
|
SRAMFlashState.bank = val;
|
||||||
SRAMFlash.cmd = 0;
|
SRAMFlashState.cmd = 0;
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -252,10 +251,10 @@ void Write_Flash(u32 addr, u8 val)
|
||||||
case 0x01:
|
case 0x01:
|
||||||
if (addr == 0x2AAA && val == 0x55)
|
if (addr == 0x2AAA && val == 0x55)
|
||||||
{
|
{
|
||||||
SRAMFlash.state = 2;
|
SRAMFlashState.state = 2;
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
SRAMFlash.state = 0;
|
SRAMFlashState.state = 0;
|
||||||
break;
|
break;
|
||||||
case 0x02:
|
case 0x02:
|
||||||
if (addr == 0x5555)
|
if (addr == 0x5555)
|
||||||
|
@ -264,45 +263,45 @@ void Write_Flash(u32 addr, u8 val)
|
||||||
switch (val)
|
switch (val)
|
||||||
{
|
{
|
||||||
case 0x80: // erase
|
case 0x80: // erase
|
||||||
SRAMFlash.state = 0x80;
|
SRAMFlashState.state = 0x80;
|
||||||
break;
|
break;
|
||||||
case 0x90: // chip ID
|
case 0x90: // chip ID
|
||||||
SRAMFlash.state = 0x90;
|
SRAMFlashState.state = 0x90;
|
||||||
break;
|
break;
|
||||||
case 0xA0: // write
|
case 0xA0: // write
|
||||||
SRAMFlash.state = 0;
|
SRAMFlashState.state = 0;
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
SRAMFlash.state = 0;
|
SRAMFlashState.state = 0;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
SRAMFlash.cmd = val;
|
SRAMFlashState.cmd = val;
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
SRAMFlash.state = 0;
|
SRAMFlashState.state = 0;
|
||||||
break;
|
break;
|
||||||
// erase
|
// erase
|
||||||
case 0x80:
|
case 0x80:
|
||||||
if (addr == 0x5555 && val == 0xAA)
|
if (addr == 0x5555 && val == 0xAA)
|
||||||
{
|
{
|
||||||
SRAMFlash.state = 0x81;
|
SRAMFlashState.state = 0x81;
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
SRAMFlash.state = 0;
|
SRAMFlashState.state = 0;
|
||||||
break;
|
break;
|
||||||
case 0x81:
|
case 0x81:
|
||||||
if (addr == 0x2AAA && val == 0x55)
|
if (addr == 0x2AAA && val == 0x55)
|
||||||
{
|
{
|
||||||
SRAMFlash.state = 0x82;
|
SRAMFlashState.state = 0x82;
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
SRAMFlash.state = 0;
|
SRAMFlashState.state = 0;
|
||||||
break;
|
break;
|
||||||
case 0x82:
|
case 0x82:
|
||||||
if (val == 0x30)
|
if (val == 0x30)
|
||||||
{
|
{
|
||||||
u32 start_addr = addr + 0x10000 * SRAMFlash.bank;
|
u32 start_addr = addr + 0x10000 * SRAMFlashState.bank;
|
||||||
memset((u8*)&SRAM[start_addr], 0xFF, 0x1000);
|
memset((u8*)&SRAM[start_addr], 0xFF, 0x1000);
|
||||||
|
|
||||||
if (SRAMFile)
|
if (SRAMFile)
|
||||||
|
@ -311,44 +310,44 @@ void Write_Flash(u32 addr, u8 val)
|
||||||
fwrite((u8*)&SRAM[start_addr], 1, 0x1000, SRAMFile);
|
fwrite((u8*)&SRAM[start_addr], 1, 0x1000, SRAMFile);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
SRAMFlash.state = 0;
|
SRAMFlashState.state = 0;
|
||||||
SRAMFlash.cmd = 0;
|
SRAMFlashState.cmd = 0;
|
||||||
return;
|
return;
|
||||||
// chip ID
|
// chip ID
|
||||||
case 0x90:
|
case 0x90:
|
||||||
if (addr == 0x5555 && val == 0xAA)
|
if (addr == 0x5555 && val == 0xAA)
|
||||||
{
|
{
|
||||||
SRAMFlash.state = 0x91;
|
SRAMFlashState.state = 0x91;
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
SRAMFlash.state = 0;
|
SRAMFlashState.state = 0;
|
||||||
break;
|
break;
|
||||||
case 0x91:
|
case 0x91:
|
||||||
if (addr == 0x2AAA && val == 0x55)
|
if (addr == 0x2AAA && val == 0x55)
|
||||||
{
|
{
|
||||||
SRAMFlash.state = 0x92;
|
SRAMFlashState.state = 0x92;
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
SRAMFlash.state = 0;
|
SRAMFlashState.state = 0;
|
||||||
break;
|
break;
|
||||||
case 0x92:
|
case 0x92:
|
||||||
SRAMFlash.state = 0;
|
SRAMFlashState.state = 0;
|
||||||
SRAMFlash.cmd = 0;
|
SRAMFlashState.cmd = 0;
|
||||||
return;
|
return;
|
||||||
default:
|
default:
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (SRAMFlash.cmd == 0xA0) // write
|
if (SRAMFlashState.cmd == 0xA0) // write
|
||||||
{
|
{
|
||||||
Write_SRAM(addr + 0x10000 * SRAMFlash.bank, val);
|
Write_SRAM(addr + 0x10000 * SRAMFlashState.bank, val);
|
||||||
SRAMFlash.state = 0;
|
SRAMFlashState.state = 0;
|
||||||
SRAMFlash.cmd = 0;
|
SRAMFlashState.cmd = 0;
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
printf("GBACart_SRAM::Write_Flash: unknown write 0x%02X @ 0x%04X (state: 0x%02X)\n",
|
printf("GBACart_SRAM::Write_Flash: unknown write 0x%02X @ 0x%04X (state: 0x%02X)\n",
|
||||||
val, addr, SRAMFlash.state);
|
val, addr, SRAMFlashState.state);
|
||||||
}
|
}
|
||||||
|
|
||||||
void Write_SRAM(u32 addr, u8 val)
|
void Write_SRAM(u32 addr, u8 val)
|
||||||
|
|
Loading…
Reference in New Issue