parent
f838938887
commit
2f094cf11d
|
@ -51,7 +51,7 @@ public:
|
|||
mSelectedImplementation = slot1_List[selection];
|
||||
mSelectedImplementation->connect();
|
||||
printf("Slot1 auto-selected device type: %s\n",mSelectedImplementation->info()->name());
|
||||
|
||||
slot1_selected_id = selection;
|
||||
}
|
||||
|
||||
virtual void disconnect()
|
||||
|
|
|
@ -79,6 +79,7 @@ public:
|
|||
mSelectedImplementation = slot2_List[selection];
|
||||
mSelectedImplementation->connect();
|
||||
printf("Slot2 auto-selected device type: %s\n", mSelectedImplementation->info()->name());
|
||||
slot2_selected_id = selection;
|
||||
|
||||
#ifdef HOST_WINDOWS
|
||||
Guitar.Enabled = (selection == NDS_SLOT2_GUITARGRIP)?true:false;
|
||||
|
|
|
@ -18,8 +18,6 @@
|
|||
along with the this software. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
|
||||
//MUST SAVE ADDONS! OMG HOW DID WE FORGET THAT
|
||||
|
||||
#ifdef HAVE_LIBZ
|
||||
#include <zlib.h>
|
||||
#endif
|
||||
|
@ -44,6 +42,7 @@
|
|||
#include "mic.h"
|
||||
#include "MMU_timing.h"
|
||||
#include "slot1.h"
|
||||
#include "slot2.h"
|
||||
|
||||
#include "path.h"
|
||||
|
||||
|
@ -373,8 +372,12 @@ static bool s_slot1_loadstate(EMUFILE* is, int size)
|
|||
//version 0:
|
||||
if(version >= 0)
|
||||
{
|
||||
int slotType = is->read32le();
|
||||
slot1_Change((NDS_SLOT1_TYPE)slotType);
|
||||
u8 slotID = is->read32le();
|
||||
NDS_SLOT1_TYPE slotType = NDS_SLOT1_RETAIL_AUTO;
|
||||
if (version >= 1)
|
||||
slot1_getTypeByID(slotID, slotType);
|
||||
|
||||
slot1_Change(slotType);
|
||||
|
||||
EMUFILE_MEMORY temp;
|
||||
is->readMemoryStream(&temp);
|
||||
|
@ -387,18 +390,52 @@ static bool s_slot1_loadstate(EMUFILE* is, int size)
|
|||
|
||||
static void s_slot1_savestate(EMUFILE* os)
|
||||
{
|
||||
u32 version = 0;
|
||||
u32 version = 1;
|
||||
os->write32le(version);
|
||||
|
||||
//version 0:
|
||||
int slotType = (int)slot1_GetCurrentType();
|
||||
os->write32le(slotType);
|
||||
u8 slotID = (u8)slot1_List[slot1_GetCurrentType()]->info()->id();
|
||||
os->write32le(slotID);
|
||||
|
||||
EMUFILE_MEMORY temp;
|
||||
slot1_Savestate(&temp);
|
||||
os->writeMemoryStream(&temp);
|
||||
}
|
||||
|
||||
static bool s_slot2_loadstate(EMUFILE* is, int size)
|
||||
{
|
||||
u32 version = is->read32le();
|
||||
|
||||
//version 0:
|
||||
if(version >= 0)
|
||||
{
|
||||
u8 slotID = is->read32le();
|
||||
NDS_SLOT2_TYPE slotType = NDS_SLOT2_AUTO;
|
||||
slot2_getTypeByID(slotID, slotType);
|
||||
|
||||
slot2_Change(slotType);
|
||||
|
||||
EMUFILE_MEMORY temp;
|
||||
is->readMemoryStream(&temp);
|
||||
temp.fseek(0,SEEK_SET);
|
||||
slot2_Loadstate(&temp);
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
static void s_slot2_savestate(EMUFILE* os)
|
||||
{
|
||||
u32 version = 0;
|
||||
os->write32le(version);
|
||||
|
||||
u8 slotID = (u8)slot2_List[slot2_GetCurrentType()]->info()->id();
|
||||
os->write32le(slotID);
|
||||
|
||||
EMUFILE_MEMORY temp;
|
||||
slot2_Savestate(&temp);
|
||||
os->writeMemoryStream(&temp);
|
||||
}
|
||||
|
||||
static void mmu_savestate(EMUFILE* os)
|
||||
{
|
||||
u32 version = 8;
|
||||
|
@ -988,8 +1025,8 @@ static void writechunks(EMUFILE* os) {
|
|||
savestate_WriteChunk(os,120,SF_RTC);
|
||||
savestate_WriteChunk(os,130,SF_NDS_HEADER);
|
||||
savestate_WriteChunk(os,140,s_slot1_savestate);
|
||||
savestate_WriteChunk(os,150,s_slot2_savestate);
|
||||
// reserved for future versions
|
||||
savestate_WriteChunk(os,150,reserveChunks);
|
||||
savestate_WriteChunk(os,160,reserveChunks);
|
||||
savestate_WriteChunk(os,170,reserveChunks);
|
||||
savestate_WriteChunk(os,180,reserveChunks);
|
||||
|
@ -1039,8 +1076,8 @@ static bool ReadStateChunks(EMUFILE* is, s32 totalsize)
|
|||
case 120: if(!ReadStateChunk(is,SF_RTC,size)) ret=false; break;
|
||||
case 130: if(!ReadStateChunk(is,SF_HEADER,size)) ret=false; else haveInfo=true; break;
|
||||
case 140: if(!s_slot1_loadstate(is, size)) ret=false; break;
|
||||
case 150: if(!s_slot2_loadstate(is, size)) ret=false; break;
|
||||
// reserved for future versions
|
||||
case 150:
|
||||
case 160:
|
||||
case 170:
|
||||
case 180:
|
||||
|
@ -1067,6 +1104,8 @@ static bool ReadStateChunks(EMUFILE* is, s32 totalsize)
|
|||
printf("\tDevice capacity: %dMb (real size %dMb)\n", ((128 * 1024) << header.cardSize) / (1024 * 1024), romsize / (1024 * 1024));
|
||||
printf("\tCRC16: %04Xh\n", header.CRC16);
|
||||
printf("\tHeader CRC16: %04Xh\n", header.headerCRC16);
|
||||
printf("\tSlot1: %s\n", slot1_List[slot1_GetCurrentType()]->info()->name());
|
||||
printf("\tSlot2: %s\n", slot2_List[slot2_GetCurrentType()]->info()->name());
|
||||
|
||||
if (gameInfo.romsize != romsize || memcmp(&gameInfo.header, &header, sizeof(header)) != 0)
|
||||
msgbox->warn("The savestate you are loading does not match the ROM you are running.\nYou should find the correct ROM");
|
||||
|
|
|
@ -36,6 +36,8 @@ Since GCROMCTRL[26:24] can't represent 'data block size' of 1 or 2, it is assume
|
|||
#include "utils/vfat.h"
|
||||
#include "path.h"
|
||||
|
||||
NDS_SLOT1_TYPE slot1_selected_id = NDS_SLOT1_NONE;
|
||||
|
||||
bool slot1_R4_path_type = false;
|
||||
|
||||
//-------
|
||||
|
@ -189,6 +191,13 @@ NDS_SLOT1_TYPE slot1_GetCurrentType()
|
|||
return slot1_device_type;
|
||||
}
|
||||
|
||||
NDS_SLOT1_TYPE slot1_GetSelectedType()
|
||||
{
|
||||
if (slot1_device_type == NDS_SLOT1_RETAIL_AUTO)
|
||||
return slot1_selected_id;
|
||||
return slot1_device_type;
|
||||
}
|
||||
|
||||
void slot1_Savestate(EMUFILE* os)
|
||||
{
|
||||
slot1_device->savestate(os);
|
||||
|
|
|
@ -108,6 +108,7 @@ enum NDS_SLOT1_TYPE
|
|||
|
||||
extern ISlot1Interface* slot1_device; //the current slot1 device instance
|
||||
extern ISlot1Interface* slot1_List[NDS_SLOT1_COUNT];
|
||||
extern NDS_SLOT1_TYPE slot1_selected_id;
|
||||
|
||||
void slot1_Init();
|
||||
bool slot1_Connect();
|
||||
|
@ -129,6 +130,7 @@ bool slot1_ChangeByID(u8 ID);
|
|||
|
||||
//check on the current device
|
||||
NDS_SLOT1_TYPE slot1_GetCurrentType();
|
||||
NDS_SLOT1_TYPE slot1_GetSelectedType();
|
||||
|
||||
extern bool slot1_R4_path_type;
|
||||
void slot1_SetFatDir(const std::string& dir, bool sameAsRom = false);
|
||||
|
|
|
@ -19,6 +19,8 @@
|
|||
#include "mem.h"
|
||||
#include "MMU.h"
|
||||
|
||||
NDS_SLOT2_TYPE slot2_selected_id = NDS_SLOT2_NONE;
|
||||
|
||||
//this is the currently-configured cflash mode
|
||||
ADDON_CFLASH_MODE CFlash_Mode = ADDON_CFLASH_MODE_RomPath;
|
||||
|
||||
|
@ -140,6 +142,14 @@ NDS_SLOT2_TYPE slot2_GetCurrentType()
|
|||
return slot2_device_type;
|
||||
}
|
||||
|
||||
NDS_SLOT2_TYPE slot2_GetSelectetType()
|
||||
{
|
||||
if (slot2_device_type == NDS_SLOT2_AUTO)
|
||||
return slot2_selected_id;
|
||||
|
||||
return slot2_device_type;
|
||||
}
|
||||
|
||||
void slot2_Savestate(EMUFILE* os)
|
||||
{
|
||||
slot2_device->savestate(os);
|
||||
|
|
|
@ -97,6 +97,7 @@ enum NDS_SLOT2_TYPE
|
|||
|
||||
extern ISlot2Interface* slot2_device; //the current slot2 device instance
|
||||
extern ISlot2Interface* slot2_List[NDS_SLOT2_COUNT];
|
||||
extern NDS_SLOT2_TYPE slot2_selected_id;
|
||||
|
||||
void slot2_Init();
|
||||
bool slot2_Connect();
|
||||
|
@ -118,6 +119,7 @@ bool slot2_ChangeByID(u8 ID);
|
|||
|
||||
//check on the current device
|
||||
NDS_SLOT2_TYPE slot2_GetCurrentType();
|
||||
NDS_SLOT2_TYPE slot2_GetSelectedType();
|
||||
|
||||
template <u8 PROCNUM, typename T>
|
||||
bool slot2_write(u32 addr, T val);
|
||||
|
|
Loading…
Reference in New Issue