Mapper 114: Fixed crash in Lion King (Unl)

This commit is contained in:
Sour 2018-08-19 20:42:10 -04:00
parent f25e6f5532
commit 8b3ddfa20d

View file

@ -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;
}
} }
} }
}; };