Mapper 114: Fixed crash in Lion King (Unl)
This commit is contained in:
parent
f25e6f5532
commit
8b3ddfa20d
1 changed files with 34 additions and 37 deletions
|
@ -28,54 +28,51 @@ protected:
|
||||||
virtual void UpdatePrgMapping() override
|
virtual void UpdatePrgMapping() override
|
||||||
{
|
{
|
||||||
if(_exRegs[0] & 0x80) {
|
if(_exRegs[0] & 0x80) {
|
||||||
SelectPrgPage2x(0, _exRegs[0] & 0x1F);
|
SelectPrgPage2x(0, (_exRegs[0] & 0x0F) << 1);
|
||||||
SelectPrgPage2x(1, _exRegs[0] & 0x1F);
|
SelectPrgPage2x(1, (_exRegs[0] & 0x0F) << 1);
|
||||||
} else {
|
} else {
|
||||||
MMC3::UpdatePrgMapping();
|
MMC3::UpdatePrgMapping();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
virtual void UpdateMirroring() override
|
|
||||||
{
|
|
||||||
//See $8000 writes below
|
|
||||||
}
|
|
||||||
|
|
||||||
virtual void WriteRegister(uint16_t addr, uint8_t value) override
|
virtual void WriteRegister(uint16_t addr, uint8_t value) override
|
||||||
{
|
{
|
||||||
switch(addr & 0xE000) {
|
if(addr < 0x8000) {
|
||||||
case 0x4000: case 0x6000:
|
_exRegs[0] = value;
|
||||||
if((addr & 0x07) == 0x00) {
|
UpdatePrgMapping();
|
||||||
_exRegs[0] = value;
|
} else {
|
||||||
UpdatePrgMapping();
|
switch(addr & 0xE001) {
|
||||||
}
|
case 0x8001: MMC3::WriteRegister(0xA000, value); break;
|
||||||
break;
|
|
||||||
|
|
||||||
case 0x8000:
|
case 0xA000:
|
||||||
SetMirroringType(value & 0x01 ? MirroringType::Horizontal : MirroringType::Vertical);
|
MMC3::WriteRegister(0x8000, (value & 0xC0) | _security[value & 0x07]);
|
||||||
break;
|
_exRegs[1] = 1;
|
||||||
|
break;
|
||||||
|
|
||||||
case 0xA000:
|
case 0xA001:
|
||||||
value = (value & 0xC0) | _security[value & 0x07];
|
_irqReloadValue = value;
|
||||||
_exRegs[1] = 1;
|
break;
|
||||||
MMC3::WriteRegister(0x8000, value);
|
|
||||||
break;
|
|
||||||
|
|
||||||
case 0xC000:
|
case 0xC000:
|
||||||
if(_exRegs[1]) {
|
if(_exRegs[1]) {
|
||||||
_exRegs[1] = 0;
|
_exRegs[1] = 0;
|
||||||
MMC3::WriteRegister(0x8001, value);
|
MMC3::WriteRegister(0x8001, value);
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case 0xE000:
|
case 0xC001:
|
||||||
if(value > 0) {
|
_irqReload = true;
|
||||||
MMC3::WriteRegister(0xE001, value);
|
break;
|
||||||
MMC3::WriteRegister(0xC000, value);
|
|
||||||
MMC3::WriteRegister(0xC001, value);
|
case 0xE000:
|
||||||
} else {
|
_console->GetCpu()->ClearIrqSource(IRQSource::External);
|
||||||
MMC3::WriteRegister(0xE000, value);
|
_irqEnabled = false;
|
||||||
}
|
break;
|
||||||
break;
|
|
||||||
|
case 0xE001:
|
||||||
|
_irqEnabled = true;
|
||||||
|
break;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
};
|
};
|
Loading…
Add table
Reference in a new issue