GB: MBC3: correct behavior when bank value of 0 is written. thanks to sanqui for pointing this out

This commit is contained in:
goyuken 2014-01-31 22:30:25 +00:00
parent 33c104d418
commit 284eca0545
3 changed files with 12 additions and 2 deletions

View File

@ -57,6 +57,9 @@
<SubSystem>Windows</SubSystem>
<GenerateDebugInformation>true</GenerateDebugInformation>
</Link>
<PostBuildEvent>
<Command>copy /y $(TargetDir)$(TargetFileName) $(ProjectDir)..\output\dll\$(TargetFileName)</Command>
</PostBuildEvent>
</ItemDefinitionGroup>
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
<ClCompile>
@ -76,6 +79,9 @@
<EnableCOMDATFolding>true</EnableCOMDATFolding>
<OptimizeReferences>true</OptimizeReferences>
</Link>
<PostBuildEvent>
<Command>copy /y $(TargetDir)$(TargetFileName) $(ProjectDir)..\output\dll\$(TargetFileName)</Command>
</PostBuildEvent>
</ItemDefinitionGroup>
<ItemGroup>
<ClInclude Include="include\gambatte.h" />

View File

@ -254,6 +254,7 @@ class Mbc3 : public DefaultMbc {
unsigned char rambank;
bool enableRam;
static unsigned adjustedRombank(unsigned bank) { return bank & 0x7F ? bank : bank | 1; }
void setRambank() const {
unsigned flags = enableRam ? MemPtrs::READ_EN | MemPtrs::WRITE_EN : 0;
@ -266,6 +267,9 @@ class Mbc3 : public DefaultMbc {
memptrs.setRambank(flags, rambank & (rambanks(memptrs) - 1));
}
// we adjust the rombank before masking with size? this seems correct, as how would the mbc
// know that high rom address outputs were not connected
void setRombank() const { memptrs.setRombank(adjustedRombank(rombank) & (rombanks(memptrs) - 1)); }
public:
Mbc3(MemPtrs &memptrs, Rtc *const rtc)
@ -285,7 +289,7 @@ public:
break;
case 1:
rombank = data & 0x7F;
memptrs.setRombank(rombank & (rombanks(memptrs) - 1));
setRombank();
break;
case 2:
rambank = data;
@ -310,7 +314,7 @@ public:
rambank = ss.rambank;
enableRam = ss.enableRam;
setRambank();
memptrs.setRombank(rombank & (rombanks(memptrs) - 1));
setRombank();
}
};

Binary file not shown.