diff --git a/desmume/src/addons/none.cpp b/desmume/src/addons/none.cpp index 1fbad5e5a..a1cee0f2d 100644 --- a/desmume/src/addons/none.cpp +++ b/desmume/src/addons/none.cpp @@ -1,5 +1,4 @@ -/* Copyright (C) 2009 CrazyMax - Copyright (C) 2009 DeSmuME team +/* Copyright (C) 2009-2010 DeSmuME team This file is part of DeSmuME @@ -18,8 +17,9 @@ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA */ -#include "../addons.h" #include +#include "../addons.h" +#include "../NDSSystem.h" static BOOL None_init(void) { return (TRUE); } 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_write16(u32 adr, u16 val) {} static void None_write32(u32 adr, u32 val) {} -static u8 None_read08(u32 adr){ return (0xFF); } -static u16 None_read16(u32 adr){ return (0xFFFF); } -static u32 None_read32(u32 adr){ return (0xFFFFFFFF); } +static u8 None_read08(u32 adr) +{ + 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"); } ADDONINTERFACE addonNone = { diff --git a/desmume/src/mc.h b/desmume/src/mc.h index 8875558cd..8420f81e2 100644 --- a/desmume/src/mc.h +++ b/desmume/src/mc.h @@ -90,6 +90,7 @@ public: //commands from mmu void reset_command(); u8 data_command(u8,int); + std::vector data; //this info was saved before the last reset (used for savestate compatibility) struct SavedInfo @@ -129,7 +130,7 @@ private: u32 addr_size, addr_counter; u32 addr; - std::vector data; + std::vector data_autodetect; enum STATE { DETECTING = 0, RUNNING = 1