GB: MBC3: correct behavior when bank value of 0 is written. thanks to sanqui for pointing this out
This commit is contained in:
parent
33c104d418
commit
284eca0545
|
@ -57,6 +57,9 @@
|
||||||
<SubSystem>Windows</SubSystem>
|
<SubSystem>Windows</SubSystem>
|
||||||
<GenerateDebugInformation>true</GenerateDebugInformation>
|
<GenerateDebugInformation>true</GenerateDebugInformation>
|
||||||
</Link>
|
</Link>
|
||||||
|
<PostBuildEvent>
|
||||||
|
<Command>copy /y $(TargetDir)$(TargetFileName) $(ProjectDir)..\output\dll\$(TargetFileName)</Command>
|
||||||
|
</PostBuildEvent>
|
||||||
</ItemDefinitionGroup>
|
</ItemDefinitionGroup>
|
||||||
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
|
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
|
||||||
<ClCompile>
|
<ClCompile>
|
||||||
|
@ -76,6 +79,9 @@
|
||||||
<EnableCOMDATFolding>true</EnableCOMDATFolding>
|
<EnableCOMDATFolding>true</EnableCOMDATFolding>
|
||||||
<OptimizeReferences>true</OptimizeReferences>
|
<OptimizeReferences>true</OptimizeReferences>
|
||||||
</Link>
|
</Link>
|
||||||
|
<PostBuildEvent>
|
||||||
|
<Command>copy /y $(TargetDir)$(TargetFileName) $(ProjectDir)..\output\dll\$(TargetFileName)</Command>
|
||||||
|
</PostBuildEvent>
|
||||||
</ItemDefinitionGroup>
|
</ItemDefinitionGroup>
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
<ClInclude Include="include\gambatte.h" />
|
<ClInclude Include="include\gambatte.h" />
|
||||||
|
|
|
@ -254,6 +254,7 @@ class Mbc3 : public DefaultMbc {
|
||||||
unsigned char rambank;
|
unsigned char rambank;
|
||||||
bool enableRam;
|
bool enableRam;
|
||||||
|
|
||||||
|
static unsigned adjustedRombank(unsigned bank) { return bank & 0x7F ? bank : bank | 1; }
|
||||||
void setRambank() const {
|
void setRambank() const {
|
||||||
unsigned flags = enableRam ? MemPtrs::READ_EN | MemPtrs::WRITE_EN : 0;
|
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));
|
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:
|
public:
|
||||||
Mbc3(MemPtrs &memptrs, Rtc *const rtc)
|
Mbc3(MemPtrs &memptrs, Rtc *const rtc)
|
||||||
|
@ -285,7 +289,7 @@ public:
|
||||||
break;
|
break;
|
||||||
case 1:
|
case 1:
|
||||||
rombank = data & 0x7F;
|
rombank = data & 0x7F;
|
||||||
memptrs.setRombank(rombank & (rombanks(memptrs) - 1));
|
setRombank();
|
||||||
break;
|
break;
|
||||||
case 2:
|
case 2:
|
||||||
rambank = data;
|
rambank = data;
|
||||||
|
@ -310,7 +314,7 @@ public:
|
||||||
rambank = ss.rambank;
|
rambank = ss.rambank;
|
||||||
enableRam = ss.enableRam;
|
enableRam = ss.enableRam;
|
||||||
setRambank();
|
setRambank();
|
||||||
memptrs.setRombank(rombank & (rombanks(memptrs) - 1));
|
setRombank();
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
Binary file not shown.
Loading…
Reference in New Issue