- add mapping ROM data to 0x08000000 (GBA ROM) and SRAM to 0x0A000000 (GBA RAM) when GBA slot is empty (fix homebrew);
This commit is contained in:
mtabachenko 2010-07-27 13:15:52 +00:00
parent 5e3b0bb527
commit f13b137867
2 changed files with 39 additions and 7 deletions

View File

@ -1,5 +1,4 @@
/* Copyright (C) 2009 CrazyMax /* Copyright (C) 2009-2010 DeSmuME team
Copyright (C) 2009 DeSmuME team
This file is part of DeSmuME This file is part of DeSmuME
@ -18,8 +17,9 @@
Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
*/ */
#include "../addons.h"
#include <string.h> #include <string.h>
#include "../addons.h"
#include "../NDSSystem.h"
static BOOL None_init(void) { return (TRUE); } static BOOL None_init(void) { return (TRUE); }
static void None_reset(void) {} static void None_reset(void) {}
@ -28,9 +28,40 @@ static void None_config(void) {}
static void None_write08(u32 adr, u8 val) {} static void None_write08(u32 adr, u8 val) {}
static void None_write16(u32 adr, u16 val) {} static void None_write16(u32 adr, u16 val) {}
static void None_write32(u32 adr, u32 val) {} static void None_write32(u32 adr, u32 val) {}
static u8 None_read08(u32 adr){ return (0xFF); } static u8 None_read08(u32 adr)
static u16 None_read16(u32 adr){ return (0xFFFF); } {
static u32 None_read32(u32 adr){ return (0xFFFFFFFF); } if (adr > 0x09FFFFFF)
{
if ((adr & 0x0000FFFF) > MMU_new.backupDevice.data.size()) return 0xFF;
return MMU_new.backupDevice.data[adr & 0x0000FFFF];
}
if ((adr - 0x08000000) > gameInfo.romsize) return 0xFF;
return T1ReadByte((u8*)gameInfo.romdata, adr - 0x08000000);
}
static u16 None_read16(u32 adr)
{
if (adr > 0x09FFFFFF)
{
if ((adr & 0x0000FFFF) > MMU_new.backupDevice.data.size()) return 0xFFFF;
return (u16)MMU_new.backupDevice.data[adr & 0x0000FFFF];
}
if ((adr - 0x08000000) > gameInfo.romsize) return 0xFFFF;
return T1ReadWord((u8*)gameInfo.romdata, adr - 0x08000000);
}
static u32 None_read32(u32 adr)
{
if (adr > 0x09FFFFFF)
{
if ((adr & 0x0000FFFF) > MMU_new.backupDevice.data.size()) return 0xFFFFFFFF;
return (u32)MMU_new.backupDevice.data[adr & 0x0000FFFF];
}
if ((adr - 0x08000000) > gameInfo.romsize) return 0xFFFFFFFF;
return T1ReadLong((u8*)gameInfo.romdata, adr - 0x08000000);
}
static void None_info(char *info) { strcpy(info, "Nothing in GBA slot"); } static void None_info(char *info) { strcpy(info, "Nothing in GBA slot"); }
ADDONINTERFACE addonNone = { ADDONINTERFACE addonNone = {

View File

@ -90,6 +90,7 @@ public:
//commands from mmu //commands from mmu
void reset_command(); void reset_command();
u8 data_command(u8,int); u8 data_command(u8,int);
std::vector<u8> data;
//this info was saved before the last reset (used for savestate compatibility) //this info was saved before the last reset (used for savestate compatibility)
struct SavedInfo struct SavedInfo
@ -129,7 +130,7 @@ private:
u32 addr_size, addr_counter; u32 addr_size, addr_counter;
u32 addr; u32 addr;
std::vector<u8> data;
std::vector<u8> data_autodetect; std::vector<u8> data_autodetect;
enum STATE { enum STATE {
DETECTING = 0, RUNNING = 1 DETECTING = 0, RUNNING = 1