Mapper 123 support
This commit is contained in:
parent
34664e79ca
commit
8765e2b8cb
4 changed files with 65 additions and 1 deletions
|
@ -477,6 +477,7 @@
|
|||
<ClInclude Include="Mapper234.h" />
|
||||
<ClInclude Include="Mapper183.h" />
|
||||
<ClInclude Include="Mapper253.h" />
|
||||
<ClInclude Include="MMC3_123.h" />
|
||||
<ClInclude Include="MMC3_134.h" />
|
||||
<ClInclude Include="MMC3_196.h" />
|
||||
<ClInclude Include="MMC3_219.h" />
|
||||
|
|
|
@ -937,6 +937,9 @@
|
|||
<ClInclude Include="Mapper216.h">
|
||||
<Filter>Nes\Mappers\Unnamed</Filter>
|
||||
</ClInclude>
|
||||
<ClInclude Include="MMC3_123.h">
|
||||
<Filter>Nes\Mappers\MMC</Filter>
|
||||
</ClInclude>
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<ClCompile Include="stdafx.cpp">
|
||||
|
|
58
Core/MMC3_123.h
Normal file
58
Core/MMC3_123.h
Normal file
|
@ -0,0 +1,58 @@
|
|||
#pragma once
|
||||
#include "stdafx.h"
|
||||
#include "MMC3.h"
|
||||
|
||||
class MMC3_123 : public MMC3
|
||||
{
|
||||
private:
|
||||
const uint8_t _security[8] = { 0,3,1,5,6,7,2,4 };
|
||||
uint8_t _exReg[2];
|
||||
|
||||
void UpdatePrgMapping() override
|
||||
{
|
||||
if(_exReg[0] & 0x40) {
|
||||
uint8_t bank = (_exReg[0] & 0x05) | ((_exReg[0] & 0x08) >> 2) | ((_exReg[0] & 0x20) >> 2);
|
||||
if(_exReg[0] & 0x02) {
|
||||
SelectPrgPage4x(0, (bank & 0xFE) << 1);
|
||||
} else {
|
||||
SelectPrgPage2x(0, bank << 1);
|
||||
SelectPrgPage2x(1, bank << 1);
|
||||
}
|
||||
} else {
|
||||
MMC3::UpdatePrgMapping();
|
||||
}
|
||||
}
|
||||
|
||||
void InitMapper() override
|
||||
{
|
||||
MMC3::InitMapper();
|
||||
|
||||
_exReg[0] = _exReg[1] = 0;
|
||||
AddRegisterRange(0x5001, 0x5FFF, MemoryOperation::Write);
|
||||
}
|
||||
|
||||
void StreamState(bool saving) override
|
||||
{
|
||||
MMC3::StreamState(saving);
|
||||
Stream(_exReg[0], _exReg[1]);
|
||||
}
|
||||
|
||||
void WriteRegister(uint16_t addr, uint8_t value) override
|
||||
{
|
||||
if(addr < 0x8000 && addr & 0x0800) {
|
||||
if(addr & 0x01) {
|
||||
_exReg[1] = value;
|
||||
} else {
|
||||
_exReg[0] = value;
|
||||
}
|
||||
UpdatePrgMapping();
|
||||
} else if(addr < 0xA000) {
|
||||
switch(addr & 0x8001) {
|
||||
case 0x8000: MMC3::WriteRegister(0x8000, (value & 0xC0) | (_security[value & 0x07])); break;
|
||||
case 0x8001: MMC3::WriteRegister(0x8001, value); break;
|
||||
}
|
||||
} else {
|
||||
MMC3::WriteRegister(addr, value);
|
||||
}
|
||||
}
|
||||
};
|
|
@ -102,6 +102,7 @@
|
|||
#include "MMC3_114.h"
|
||||
#include "MMC3_115.h"
|
||||
#include "MMC3_121.h"
|
||||
#include "MMC3_123.h"
|
||||
#include "MMC3_134.h"
|
||||
#include "MMC3_165.h"
|
||||
#include "MMC3_182.h"
|
||||
|
@ -193,7 +194,7 @@ Supported mappers:
|
|||
| 64| 65| 66| 67| 68| 69| 70| 71| 72| 73| 74| 75| 76| 77| 78| 79|
|
||||
| 80|===| 82| |===| 85| 86| 87| 88| 89| 90| 91| 92| 93| 94| 95|
|
||||
| 96| 97|===| 99|...|101|===|103| |105|106|107|108|===|===|===|
|
||||
|112|113|114|115| |117|118|119|120|121|===| |===| | |===|
|
||||
|112|113|114|115| |117|118|119|120|121|===|123|===| | |===|
|
||||
|===|===|===|===|132|133|134|===|136|137|138|139|140|141|142|143|
|
||||
|144|145|146|147|148|149|150|151|152|153|154|155|156|157| |159|
|
||||
|---|===|162|163|164|165|166|167|168|===|170|171|172|173|===|175|
|
||||
|
@ -325,6 +326,7 @@ BaseMapper* MapperFactory::GetMapperFromID(RomData &romData)
|
|||
case 119: return new MMC3_ChrRam(0x40, 0x7F, 8);
|
||||
case 120: return new Mapper120();
|
||||
case 121: return new MMC3_121();
|
||||
case 123: return new MMC3_123();
|
||||
case 132: return new Txc22211A();
|
||||
case 133: return new Sachen_133();
|
||||
case 134: return new MMC3_134();
|
||||
|
|
Loading…
Add table
Reference in a new issue