- add lock/unlock control bit in Memory Expansion Pack;
This commit is contained in:
mtabachenko 2013-11-06 08:53:10 +00:00
parent c2e9dbb126
commit cb5e9df984
1 changed files with 31 additions and 5 deletions

View File

@ -1,4 +1,4 @@
/* Copyright (C) 2009-2010 DeSmuME team /* Copyright (C) 2009-2013 DeSmuME team
This file is part of DeSmuME This file is part of DeSmuME
@ -22,8 +22,9 @@
#include <string.h> #include <string.h>
#include "../MMU.h" #include "../MMU.h"
u8 *expMemory = NULL; static u8 *expMemory = NULL;
u32 expMemSize = 8 * 1024 * 1024; // 8Mb static u32 expMemSize = 8 * 1024 * 1024; // 8Mb
static bool ext_ram_lock = true;
#if 0 #if 0
#define EXPINFO(...) INFO(__VA_ARGS__) #define EXPINFO(...) INFO(__VA_ARGS__)
@ -41,6 +42,7 @@ static void ExpMemory_reset(void)
} }
expMemory = new u8 [expMemSize]; expMemory = new u8 [expMemSize];
memset(expMemory, 0xFF, expMemSize); memset(expMemory, 0xFF, expMemSize);
ext_ram_lock = true;
} }
static void ExpMemory_close(void) static void ExpMemory_close(void)
{ {
@ -53,6 +55,8 @@ static void ExpMemory_close(void)
static void ExpMemory_config(void) {} static void ExpMemory_config(void) {}
static void ExpMemory_write08(u32 procnum, u32 adr, u8 val) static void ExpMemory_write08(u32 procnum, u32 adr, u8 val)
{ {
if (ext_ram_lock) return;
if (adr >= 0x09000000) if (adr >= 0x09000000)
{ {
u32 offs = (adr - 0x09000000); u32 offs = (adr - 0x09000000);
@ -63,6 +67,18 @@ static void ExpMemory_write08(u32 procnum, u32 adr, u8 val)
} }
static void ExpMemory_write16(u32 procnum, u32 adr, u16 val) static void ExpMemory_write16(u32 procnum, u32 adr, u16 val)
{ {
if (adr == 0x08240000)
{
if (val == 0)
ext_ram_lock = true;
else
if (val == 1)
ext_ram_lock = false;
return;
}
if (ext_ram_lock) return;
if (adr >= 0x09000000) if (adr >= 0x09000000)
{ {
u32 offs = (adr - 0x09000000); u32 offs = (adr - 0x09000000);
@ -73,6 +89,7 @@ static void ExpMemory_write16(u32 procnum, u32 adr, u16 val)
} }
static void ExpMemory_write32(u32 procnum, u32 adr, u32 val) static void ExpMemory_write32(u32 procnum, u32 adr, u32 val)
{ {
if (ext_ram_lock) return;
if (adr >= 0x09000000) if (adr >= 0x09000000)
{ {
@ -94,6 +111,9 @@ static u8 ExpMemory_read08(u32 procnum, u32 adr)
{ {
EXPINFO("ExpMemory: read 08 at 0x%08X\n", adr); EXPINFO("ExpMemory: read 08 at 0x%08X\n", adr);
if (adr == 0x08240000)
return (ext_ram_lock?0:1);
if(adr>=0x080000B0 && adr<0x080000C0) if(adr>=0x080000B0 && adr<0x080000C0)
return T1ReadByte(header_0x00B0,adr-0x080000B0); return T1ReadByte(header_0x00B0,adr-0x080000B0);
@ -108,6 +128,9 @@ static u8 ExpMemory_read08(u32 procnum, u32 adr)
} }
static u16 ExpMemory_read16(u32 procnum, u32 adr) static u16 ExpMemory_read16(u32 procnum, u32 adr)
{ {
if (adr == 0x08240000)
return (ext_ram_lock?0:1);
if(adr>=0x080000B0 && adr<0x080000C0) if(adr>=0x080000B0 && adr<0x080000C0)
return T1ReadWord(header_0x00B0,adr-0x080000B0); return T1ReadWord(header_0x00B0,adr-0x080000B0);
@ -126,6 +149,9 @@ static u16 ExpMemory_read16(u32 procnum, u32 adr)
} }
static u32 ExpMemory_read32(u32 procnum, u32 adr) static u32 ExpMemory_read32(u32 procnum, u32 adr)
{ {
if (adr == 0x08240000)
return (ext_ram_lock?0:1);
if(adr>=0x080000B0 && adr<0x080000C0) if(adr>=0x080000B0 && adr<0x080000C0)
return T1ReadLong(header_0x00B0,adr-0x080000B0); return T1ReadLong(header_0x00B0,adr-0x080000B0);
@ -139,7 +165,7 @@ static u32 ExpMemory_read32(u32 procnum, u32 adr)
EXPINFO("ExpMemory: read 32 at 0x%08X\n", adr); EXPINFO("ExpMemory: read 32 at 0x%08X\n", adr);
return 0xFFFFFFFF; return 0xFFFFFFFF;
} }
static void ExpMemory_info(char *info) { strcpy(info, "Memory Expansion Pak"); } static void ExpMemory_info(char *info) { strcpy(info, "Official RAM expansion for Opera browser"); }
ADDONINTERFACE addonExpMemory = { ADDONINTERFACE addonExpMemory = {
"Memory Expansion Pak", "Memory Expansion Pak",