Atari 2600 - implement hard reset, also fix a few missing Dispose calls in some mappers that utilize ram
This commit is contained in:
parent
bba2e254d3
commit
8a239b53bc
|
@ -94,7 +94,7 @@ namespace BizHawk.Emulation.Cores.Atari.Atari2600
|
|||
CoreComm.MemoryCallbackSystem.CallExecute(addr);
|
||||
}
|
||||
|
||||
public void HardReset()
|
||||
public void RebootCore()
|
||||
{
|
||||
// Regenerate mapper here to make sure its state is entirely clean
|
||||
switch (this._game.GetOptionsDict()["m"])
|
||||
|
@ -230,6 +230,28 @@ namespace BizHawk.Emulation.Cores.Atari.Atari2600
|
|||
_mapper.GetType());
|
||||
}
|
||||
|
||||
public void HardReset()
|
||||
{
|
||||
Ram = new byte[128];
|
||||
_mapper.HardReset();
|
||||
|
||||
Cpu = new MOS6502X
|
||||
{
|
||||
ReadMemory = this.ReadMemory,
|
||||
WriteMemory = this.WriteMemory,
|
||||
PeekMemory = this.PeekMemory,
|
||||
DummyReadMemory = this.ReadMemory,
|
||||
OnExecFetch = this.ExecFetch
|
||||
};
|
||||
|
||||
_tia.Reset();
|
||||
|
||||
M6532 = new M6532(this);
|
||||
Cpu.PC = (ushort)(ReadMemory(0x1FFC) + (ReadMemory(0x1FFD) << 8)); // set the initial PC
|
||||
}
|
||||
|
||||
private bool _hardResetSignal;
|
||||
|
||||
public void FrameAdvance(bool render, bool rendersound)
|
||||
{
|
||||
_frame++;
|
||||
|
@ -251,6 +273,13 @@ namespace BizHawk.Emulation.Cores.Atari.Atari2600
|
|||
_mapper.ClockCpu();
|
||||
}
|
||||
|
||||
if (_hardResetSignal)
|
||||
{
|
||||
HardReset();
|
||||
}
|
||||
|
||||
_hardResetSignal = Controller["Power"];
|
||||
|
||||
if (_islag)
|
||||
{
|
||||
LagCount++;
|
||||
|
|
|
@ -60,7 +60,7 @@ namespace BizHawk.Emulation.Cores.Atari.Atari2600
|
|||
}
|
||||
|
||||
Console.WriteLine("Game uses mapper " + game.GetOptionsDict()["m"]);
|
||||
HardReset();
|
||||
RebootCore();
|
||||
}
|
||||
|
||||
public string SystemId { get { return "A26"; } }
|
||||
|
@ -104,7 +104,7 @@ namespace BizHawk.Emulation.Cores.Atari.Atari2600
|
|||
{
|
||||
"P1 Up", "P1 Down", "P1 Left", "P1 Right", "P1 Button",
|
||||
"P2 Up", "P2 Down", "P2 Left", "P2 Right", "P2 Button",
|
||||
"Reset", "Select"
|
||||
"Reset", "Select", "Power"
|
||||
}
|
||||
};
|
||||
|
||||
|
|
|
@ -26,5 +26,7 @@ namespace BizHawk.Emulation.Cores.Atari.Atari2600
|
|||
public virtual void Dispose() { }
|
||||
|
||||
public virtual void ClockCpu() { }
|
||||
|
||||
public virtual void HardReset() { }
|
||||
}
|
||||
}
|
||||
|
|
|
@ -25,6 +25,18 @@ namespace BizHawk.Emulation.Cores.Atari.Atari2600
|
|||
{
|
||||
private int _bank4K;
|
||||
|
||||
public override void SyncState(Serializer ser)
|
||||
{
|
||||
base.SyncState(ser);
|
||||
ser.Sync("bank_4k", ref _bank4K);
|
||||
}
|
||||
|
||||
public override void HardReset()
|
||||
{
|
||||
_bank4K = 0;
|
||||
base.HardReset();
|
||||
}
|
||||
|
||||
private byte ReadMem(ushort addr, bool peek)
|
||||
{
|
||||
if (!peek)
|
||||
|
@ -59,12 +71,6 @@ namespace BizHawk.Emulation.Cores.Atari.Atari2600
|
|||
}
|
||||
}
|
||||
|
||||
public override void SyncState(Serializer ser)
|
||||
{
|
||||
base.SyncState(ser);
|
||||
ser.Sync("bank_4k", ref _bank4K);
|
||||
}
|
||||
|
||||
private void Address(ushort addr)
|
||||
{
|
||||
switch (addr & 0x1840)
|
||||
|
|
|
@ -36,6 +36,15 @@ namespace BizHawk.Emulation.Cores.Atari.Atari2600
|
|||
ser.Sync("hasRam", ref _hasRam);
|
||||
}
|
||||
|
||||
public override void HardReset()
|
||||
{
|
||||
_lowbank_2K = 0;
|
||||
_rambank_1K = 0;
|
||||
_hasRam = false;
|
||||
_ram = new ByteBuffer(256 * 1024);
|
||||
base.HardReset();
|
||||
}
|
||||
|
||||
public override void Dispose()
|
||||
{
|
||||
base.Dispose();
|
||||
|
|
|
@ -23,12 +23,18 @@ namespace BizHawk.Emulation.Cores.Atari.Atari2600
|
|||
|
||||
internal class m3F : MapperBase
|
||||
{
|
||||
private int _lowbank_2K;
|
||||
private int _lowbank2K;
|
||||
|
||||
public override void SyncState(Serializer ser)
|
||||
{
|
||||
base.SyncState(ser);
|
||||
ser.Sync("lowbank_2k", ref _lowbank_2K);
|
||||
ser.Sync("lowbank_2k", ref _lowbank2K);
|
||||
}
|
||||
|
||||
public override void HardReset()
|
||||
{
|
||||
_lowbank2K = 0;
|
||||
base.HardReset();
|
||||
}
|
||||
|
||||
public override byte ReadMemory(ushort addr)
|
||||
|
@ -40,7 +46,7 @@ namespace BizHawk.Emulation.Cores.Atari.Atari2600
|
|||
|
||||
if (addr < 0x17FF) // Low 2k Bank
|
||||
{
|
||||
return Core.Rom[(_lowbank_2K << 11) + (addr & 0x07FF)];
|
||||
return Core.Rom[(_lowbank2K << 11) + (addr & 0x07FF)];
|
||||
}
|
||||
|
||||
if (addr < 0x2000) // High bank fixed to last 2k of ROM
|
||||
|
@ -62,11 +68,11 @@ namespace BizHawk.Emulation.Cores.Atari.Atari2600
|
|||
{
|
||||
if ((value << 11) < Core.Rom.Length)
|
||||
{
|
||||
_lowbank_2K = value;
|
||||
_lowbank2K = value;
|
||||
}
|
||||
else
|
||||
{
|
||||
_lowbank_2K = value & (Core.Rom.Length >> 11);
|
||||
_lowbank2K = value & (Core.Rom.Length >> 11);
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -21,6 +21,26 @@ namespace BizHawk.Emulation.Cores.Atari.Atari2600
|
|||
throw new NotImplementedException();
|
||||
}
|
||||
|
||||
public override void SyncState(Serializer ser)
|
||||
{
|
||||
base.SyncState(ser);
|
||||
ser.Sync("bank4k", ref _bank4k);
|
||||
ser.Sync("ram", ref _ram);
|
||||
}
|
||||
|
||||
public override void HardReset()
|
||||
{
|
||||
_bank4k = 0;
|
||||
_ram = new ByteBuffer(6144);
|
||||
base.HardReset();
|
||||
}
|
||||
|
||||
public override void Dispose()
|
||||
{
|
||||
base.Dispose();
|
||||
_ram.Dispose();
|
||||
}
|
||||
|
||||
private byte ReadMem(ushort addr, bool peek)
|
||||
{
|
||||
if (!peek)
|
||||
|
@ -46,19 +66,6 @@ namespace BizHawk.Emulation.Cores.Atari.Atari2600
|
|||
return ReadMem(addr, true);
|
||||
}
|
||||
|
||||
public override void SyncState(Serializer ser)
|
||||
{
|
||||
base.SyncState(ser);
|
||||
ser.Sync("bank4k", ref _bank4k);
|
||||
ser.Sync("ram", ref _ram);
|
||||
}
|
||||
|
||||
public override void Dispose()
|
||||
{
|
||||
base.Dispose();
|
||||
_ram.Dispose();
|
||||
}
|
||||
|
||||
private void Address(ushort addr)
|
||||
{
|
||||
if (addr == 0x1FF8)
|
||||
|
|
|
@ -18,8 +18,26 @@ namespace BizHawk.Emulation.Cores.Atari.Atari2600
|
|||
|
||||
internal class mCV: MapperBase
|
||||
{
|
||||
private ByteBuffer _auxRam = new ByteBuffer(1024);
|
||||
|
||||
private ByteBuffer _ram = new ByteBuffer(1024);
|
||||
|
||||
public override void SyncState(Serializer ser)
|
||||
{
|
||||
base.SyncState(ser);
|
||||
ser.Sync("aux_ram", ref _ram);
|
||||
}
|
||||
|
||||
public override void HardReset()
|
||||
{
|
||||
_ram = new ByteBuffer(1024);
|
||||
base.HardReset();
|
||||
}
|
||||
|
||||
public override void Dispose()
|
||||
{
|
||||
base.Dispose();
|
||||
_ram.Dispose();
|
||||
}
|
||||
|
||||
public override byte ReadMemory(ushort addr)
|
||||
{
|
||||
if (addr < 0x1000)
|
||||
|
@ -29,7 +47,7 @@ namespace BizHawk.Emulation.Cores.Atari.Atari2600
|
|||
|
||||
if (addr < 0x1400)
|
||||
{
|
||||
return _auxRam[(addr & 0x3FF)];
|
||||
return _ram[(addr & 0x3FF)];
|
||||
}
|
||||
|
||||
if (addr >= 0x1800 && addr < 0x2000)
|
||||
|
@ -53,14 +71,8 @@ namespace BizHawk.Emulation.Cores.Atari.Atari2600
|
|||
}
|
||||
else if (addr >= 0x1400 && addr < 0x1800)
|
||||
{
|
||||
_auxRam[(addr & 0x3FF)] = value;
|
||||
_ram[(addr & 0x3FF)] = value;
|
||||
}
|
||||
}
|
||||
|
||||
public override void SyncState(Serializer ser)
|
||||
{
|
||||
base.SyncState(ser);
|
||||
ser.Sync("aux_ram", ref _auxRam);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -427,6 +427,12 @@ namespace BizHawk.Emulation.Cores.Atari.Atari2600
|
|||
ser.Sync("RandomNumber", ref RandomNumber);
|
||||
}
|
||||
|
||||
public override void HardReset()
|
||||
{
|
||||
// TODO
|
||||
base.HardReset();
|
||||
}
|
||||
|
||||
private void UpdateMusicModeDataFetchers()
|
||||
{
|
||||
// Calculate the number of cycles since the last update
|
||||
|
|
|
@ -29,6 +29,22 @@ namespace BizHawk.Emulation.Cores.Atari.Atari2600
|
|||
private int _toggle2;
|
||||
private int _toggle3;
|
||||
|
||||
public override void SyncState(Serializer ser)
|
||||
{
|
||||
base.SyncState(ser);
|
||||
ser.Sync("toggle1", ref _toggle1);
|
||||
ser.Sync("toggle2", ref _toggle2);
|
||||
ser.Sync("toggle3", ref _toggle3);
|
||||
}
|
||||
|
||||
public override void HardReset()
|
||||
{
|
||||
_toggle1 = 0;
|
||||
_toggle2 = 0;
|
||||
_toggle3 = 0;
|
||||
base.HardReset();
|
||||
}
|
||||
|
||||
private byte ReadMem(ushort addr, bool peek)
|
||||
{
|
||||
if (!peek)
|
||||
|
@ -78,14 +94,6 @@ namespace BizHawk.Emulation.Cores.Atari.Atari2600
|
|||
}
|
||||
}
|
||||
|
||||
public override void SyncState(Serializer ser)
|
||||
{
|
||||
base.SyncState(ser);
|
||||
ser.Sync("toggle1", ref _toggle1);
|
||||
ser.Sync("toggle2", ref _toggle2);
|
||||
ser.Sync("toggle3", ref _toggle3);
|
||||
}
|
||||
|
||||
private void Address(ushort addr)
|
||||
{
|
||||
switch (addr)
|
||||
|
|
|
@ -29,12 +29,39 @@ namespace BizHawk.Emulation.Cores.Atari.Atari2600
|
|||
|
||||
internal class mE7 : MapperBase
|
||||
{
|
||||
private int _rombank_1K;
|
||||
private int _rombank1K;
|
||||
private int _rambank1Toggle;
|
||||
private ByteBuffer _rambank0 = new ByteBuffer(1024);
|
||||
private ByteBuffer _rambank1 = new ByteBuffer(1024);
|
||||
private bool _enableRam0;
|
||||
|
||||
public override void SyncState(Serializer ser)
|
||||
{
|
||||
base.SyncState(ser);
|
||||
ser.Sync("toggle", ref _rombank1K);
|
||||
ser.Sync("rambank0", ref _rambank0);
|
||||
ser.Sync("rambank1", ref _rambank1);
|
||||
ser.Sync("EnableRam0", ref _enableRam0);
|
||||
ser.Sync("rambank1_toggle", ref _rambank1Toggle);
|
||||
}
|
||||
|
||||
public override void HardReset()
|
||||
{
|
||||
_rombank1K = 0;
|
||||
_rambank1Toggle = 0;
|
||||
_rambank0 = new ByteBuffer(1024);
|
||||
_rambank1 = new ByteBuffer(1024);
|
||||
_enableRam0 = false;
|
||||
base.HardReset();
|
||||
}
|
||||
|
||||
public override void Dispose()
|
||||
{
|
||||
base.Dispose();
|
||||
_rambank0.Dispose();
|
||||
_rambank1.Dispose();
|
||||
}
|
||||
|
||||
private byte ReadMem(ushort addr, bool peek)
|
||||
{
|
||||
if (addr < 0x1000)
|
||||
|
@ -59,7 +86,7 @@ namespace BizHawk.Emulation.Cores.Atari.Atari2600
|
|||
return _rambank0[addr & 0x3FF];
|
||||
}
|
||||
|
||||
return Core.Rom[(_rombank_1K * 0x800) + (addr & 0x7FF)];
|
||||
return Core.Rom[(_rombank1K * 0x800) + (addr & 0x7FF)];
|
||||
}
|
||||
|
||||
if (addr < 0x1900) // Ram 1 Read port
|
||||
|
@ -110,40 +137,30 @@ namespace BizHawk.Emulation.Cores.Atari.Atari2600
|
|||
}
|
||||
}
|
||||
|
||||
public override void SyncState(Serializer ser)
|
||||
{
|
||||
base.SyncState(ser);
|
||||
ser.Sync("toggle", ref _rombank_1K);
|
||||
ser.Sync("rambank0", ref _rambank0);
|
||||
ser.Sync("rambank1", ref _rambank1);
|
||||
ser.Sync("EnableRam0", ref _enableRam0);
|
||||
ser.Sync("rambank1_toggle", ref _rambank1Toggle);
|
||||
}
|
||||
|
||||
private void Address(ushort addr)
|
||||
{
|
||||
switch (addr)
|
||||
{
|
||||
case 0x1FE0:
|
||||
_rombank_1K = 0;
|
||||
_rombank1K = 0;
|
||||
break;
|
||||
case 0x1FE1:
|
||||
_rombank_1K = 1;
|
||||
_rombank1K = 1;
|
||||
break;
|
||||
case 0x1FE2:
|
||||
_rombank_1K = 2;
|
||||
_rombank1K = 2;
|
||||
break;
|
||||
case 0x1FE3:
|
||||
_rombank_1K = 3;
|
||||
_rombank1K = 3;
|
||||
break;
|
||||
case 0x1FE4:
|
||||
_rombank_1K = 4;
|
||||
_rombank1K = 4;
|
||||
break;
|
||||
case 0x1FE5:
|
||||
_rombank_1K = 5;
|
||||
_rombank1K = 5;
|
||||
break;
|
||||
case 0x1FE6:
|
||||
_rombank_1K = 6;
|
||||
_rombank1K = 6;
|
||||
break;
|
||||
case 0x1FE7:
|
||||
_enableRam0 = true;
|
||||
|
|
|
@ -16,6 +16,18 @@ namespace BizHawk.Emulation.Cores.Atari.Atari2600
|
|||
{
|
||||
private int _toggle;
|
||||
|
||||
public override void SyncState(Serializer ser)
|
||||
{
|
||||
base.SyncState(ser);
|
||||
ser.Sync("toggle", ref _toggle);
|
||||
}
|
||||
|
||||
public override void HardReset()
|
||||
{
|
||||
_toggle = 0;
|
||||
base.HardReset();
|
||||
}
|
||||
|
||||
private byte ReadMem(ushort addr, bool peek)
|
||||
{
|
||||
if (!peek)
|
||||
|
@ -50,12 +62,6 @@ namespace BizHawk.Emulation.Cores.Atari.Atari2600
|
|||
}
|
||||
}
|
||||
|
||||
public override void SyncState(Serializer ser)
|
||||
{
|
||||
base.SyncState(ser);
|
||||
ser.Sync("toggle", ref _toggle);
|
||||
}
|
||||
|
||||
private void Address(ushort addr)
|
||||
{
|
||||
if (addr == 0x1FE0) _toggle = 0;
|
||||
|
|
|
@ -12,6 +12,26 @@ namespace BizHawk.Emulation.Cores.Atari.Atari2600
|
|||
private int _bank4k;
|
||||
private ByteBuffer _ram = new ByteBuffer(128);
|
||||
|
||||
public override void SyncState(Serializer ser)
|
||||
{
|
||||
base.SyncState(ser);
|
||||
ser.Sync("bank4k", ref _bank4k);
|
||||
ser.Sync("auxRam", ref _ram);
|
||||
}
|
||||
|
||||
public override void Dispose()
|
||||
{
|
||||
base.Dispose();
|
||||
_ram.Dispose();
|
||||
}
|
||||
|
||||
public override void HardReset()
|
||||
{
|
||||
_bank4k = 0;
|
||||
_ram = new ByteBuffer(128);
|
||||
base.HardReset();
|
||||
}
|
||||
|
||||
private byte ReadMem(ushort addr, bool peek)
|
||||
{
|
||||
if (!peek)
|
||||
|
@ -61,19 +81,6 @@ namespace BizHawk.Emulation.Cores.Atari.Atari2600
|
|||
}
|
||||
}
|
||||
|
||||
public override void SyncState(Serializer ser)
|
||||
{
|
||||
base.SyncState(ser);
|
||||
ser.Sync("bank4k", ref _bank4k);
|
||||
ser.Sync("auxRam", ref _ram);
|
||||
}
|
||||
|
||||
public override void Dispose()
|
||||
{
|
||||
base.Dispose();
|
||||
_ram.Dispose();
|
||||
}
|
||||
|
||||
private void Address(ushort addr)
|
||||
{
|
||||
if (addr == 0x1FE0) _bank4k = 0;
|
||||
|
|
|
@ -22,6 +22,18 @@ namespace BizHawk.Emulation.Cores.Atari.Atari2600
|
|||
{
|
||||
private int _bank;
|
||||
|
||||
public override void SyncState(Serializer ser)
|
||||
{
|
||||
base.SyncState(ser);
|
||||
ser.Sync("bank", ref _bank);
|
||||
}
|
||||
|
||||
public override void HardReset()
|
||||
{
|
||||
_bank = 0;
|
||||
base.HardReset();
|
||||
}
|
||||
|
||||
private byte ReadMem(ushort addr, bool peek)
|
||||
{
|
||||
if (!peek)
|
||||
|
@ -62,12 +74,6 @@ namespace BizHawk.Emulation.Cores.Atari.Atari2600
|
|||
}
|
||||
}
|
||||
|
||||
public override void SyncState(Serializer ser)
|
||||
{
|
||||
base.SyncState(ser);
|
||||
ser.Sync("bank", ref _bank);
|
||||
}
|
||||
|
||||
private void Increment()
|
||||
{
|
||||
_bank++;
|
||||
|
|
|
@ -14,6 +14,18 @@ namespace BizHawk.Emulation.Cores.Atari.Atari2600
|
|||
{
|
||||
private int _toggle;
|
||||
|
||||
public override void SyncState(Serializer ser)
|
||||
{
|
||||
base.SyncState(ser);
|
||||
ser.Sync("toggle", ref _toggle);
|
||||
}
|
||||
|
||||
public override void HardReset()
|
||||
{
|
||||
_toggle = 0;
|
||||
base.HardReset();
|
||||
}
|
||||
|
||||
private byte ReadMem(ushort addr, bool peek)
|
||||
{
|
||||
if (!peek)
|
||||
|
@ -48,12 +60,6 @@ namespace BizHawk.Emulation.Cores.Atari.Atari2600
|
|||
}
|
||||
}
|
||||
|
||||
public override void SyncState(Serializer ser)
|
||||
{
|
||||
base.SyncState(ser);
|
||||
ser.Sync("toggle", ref _toggle);
|
||||
}
|
||||
|
||||
private void Address(ushort addr)
|
||||
{
|
||||
if (addr == 0x1FF4) _toggle = 0;
|
||||
|
|
|
@ -11,6 +11,26 @@ namespace BizHawk.Emulation.Cores.Atari.Atari2600
|
|||
private int _bank4k;
|
||||
private ByteBuffer _ram = new ByteBuffer(128);
|
||||
|
||||
public override void SyncState(Serializer ser)
|
||||
{
|
||||
base.SyncState(ser);
|
||||
ser.Sync("toggle", ref _bank4k);
|
||||
ser.Sync("auxRam", ref _ram);
|
||||
}
|
||||
|
||||
public override void Dispose()
|
||||
{
|
||||
base.Dispose();
|
||||
_ram.Dispose();
|
||||
}
|
||||
|
||||
public override void HardReset()
|
||||
{
|
||||
_bank4k = 0;
|
||||
_ram = new ByteBuffer(128);
|
||||
base.HardReset();
|
||||
}
|
||||
|
||||
private byte ReadMem(ushort addr, bool peek)
|
||||
{
|
||||
if (!peek)
|
||||
|
@ -59,19 +79,6 @@ namespace BizHawk.Emulation.Cores.Atari.Atari2600
|
|||
}
|
||||
}
|
||||
|
||||
public override void SyncState(Serializer ser)
|
||||
{
|
||||
base.SyncState(ser);
|
||||
ser.Sync("toggle", ref _bank4k);
|
||||
ser.Sync("auxRam", ref _ram);
|
||||
}
|
||||
|
||||
public override void Dispose()
|
||||
{
|
||||
base.Dispose();
|
||||
_ram.Dispose();
|
||||
}
|
||||
|
||||
private void Address(ushort addr)
|
||||
{
|
||||
if (addr == 0x1FF4) _bank4k = 0;
|
||||
|
|
|
@ -15,6 +15,18 @@ namespace BizHawk.Emulation.Cores.Atari.Atari2600
|
|||
{
|
||||
private int _toggle;
|
||||
|
||||
public override void SyncState(Serializer ser)
|
||||
{
|
||||
base.SyncState(ser);
|
||||
ser.Sync("toggle", ref _toggle);
|
||||
}
|
||||
|
||||
public override void HardReset()
|
||||
{
|
||||
_toggle = 0;
|
||||
base.HardReset();
|
||||
}
|
||||
|
||||
private byte ReadMem(ushort addr, bool peek)
|
||||
{
|
||||
if (!peek)
|
||||
|
@ -49,12 +61,6 @@ namespace BizHawk.Emulation.Cores.Atari.Atari2600
|
|||
}
|
||||
}
|
||||
|
||||
public override void SyncState(Serializer ser)
|
||||
{
|
||||
base.SyncState(ser);
|
||||
ser.Sync("toggle", ref _toggle);
|
||||
}
|
||||
|
||||
private void Address(ushort addr)
|
||||
{
|
||||
if (addr == 0x1FF6) _toggle = 0;
|
||||
|
|
|
@ -11,6 +11,26 @@ namespace BizHawk.Emulation.Cores.Atari.Atari2600
|
|||
private int _bank4k;
|
||||
private ByteBuffer _ram = new ByteBuffer(128);
|
||||
|
||||
public override void SyncState(Serializer ser)
|
||||
{
|
||||
base.SyncState(ser);
|
||||
ser.Sync("bank_4k", ref _bank4k);
|
||||
ser.Sync("auxRam", ref _ram);
|
||||
}
|
||||
|
||||
public override void Dispose()
|
||||
{
|
||||
base.Dispose();
|
||||
_ram.Dispose();
|
||||
}
|
||||
|
||||
public override void HardReset()
|
||||
{
|
||||
_bank4k = 0;
|
||||
_ram = new ByteBuffer(128);
|
||||
base.HardReset();
|
||||
}
|
||||
|
||||
private byte ReadMem(ushort addr, bool peek)
|
||||
{
|
||||
if (!peek)
|
||||
|
@ -60,19 +80,6 @@ namespace BizHawk.Emulation.Cores.Atari.Atari2600
|
|||
}
|
||||
}
|
||||
|
||||
public override void SyncState(Serializer ser)
|
||||
{
|
||||
base.SyncState(ser);
|
||||
ser.Sync("bank_4k", ref _bank4k);
|
||||
ser.Sync("auxRam", ref _ram);
|
||||
}
|
||||
|
||||
public override void Dispose()
|
||||
{
|
||||
base.Dispose();
|
||||
_ram.Dispose();
|
||||
}
|
||||
|
||||
private void Address(ushort addr)
|
||||
{
|
||||
if (addr == 0x1FF6) _bank4k = 0;
|
||||
|
|
|
@ -21,7 +21,19 @@ namespace BizHawk.Emulation.Cores.Atari.Atari2600
|
|||
|
||||
internal class mF8 : MapperBase
|
||||
{
|
||||
private int _bank_4K;
|
||||
private int _bank4K;
|
||||
|
||||
public override void SyncState(Serializer ser)
|
||||
{
|
||||
base.SyncState(ser);
|
||||
ser.Sync("bank_4k", ref _bank4K);
|
||||
}
|
||||
|
||||
public override void HardReset()
|
||||
{
|
||||
_bank4K = 0;
|
||||
base.HardReset();
|
||||
}
|
||||
|
||||
private byte ReadMem(ushort addr, bool peek)
|
||||
{
|
||||
|
@ -35,7 +47,7 @@ namespace BizHawk.Emulation.Cores.Atari.Atari2600
|
|||
return base.ReadMemory(addr);
|
||||
}
|
||||
|
||||
return Core.Rom[(_bank_4K << 12) + (addr & 0xFFF)];
|
||||
return Core.Rom[(_bank4K << 12) + (addr & 0xFFF)];
|
||||
}
|
||||
|
||||
public override byte ReadMemory(ushort addr)
|
||||
|
@ -57,21 +69,15 @@ namespace BizHawk.Emulation.Cores.Atari.Atari2600
|
|||
}
|
||||
}
|
||||
|
||||
public override void SyncState(Serializer ser)
|
||||
{
|
||||
base.SyncState(ser);
|
||||
ser.Sync("bank_4k", ref _bank_4K);
|
||||
}
|
||||
|
||||
private void Address(ushort addr)
|
||||
{
|
||||
if (addr == 0x1FF8)
|
||||
{
|
||||
_bank_4K = 0;
|
||||
_bank4K = 0;
|
||||
}
|
||||
else if (addr == 0x1FF9)
|
||||
{
|
||||
_bank_4K = 1;
|
||||
_bank4K = 1;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -11,6 +11,13 @@ namespace BizHawk.Emulation.Cores.Atari.Atari2600
|
|||
private int _bank_4K;
|
||||
private ByteBuffer _ram = new ByteBuffer(128);
|
||||
|
||||
public override void HardReset()
|
||||
{
|
||||
_bank_4K = 0;
|
||||
_ram = new ByteBuffer(128);
|
||||
base.HardReset();
|
||||
}
|
||||
|
||||
private byte ReadMem(ushort addr, bool peek)
|
||||
{
|
||||
if (!peek)
|
||||
|
|
|
@ -17,7 +17,27 @@ namespace BizHawk.Emulation.Cores.Atari.Atari2600
|
|||
internal class mFA : MapperBase
|
||||
{
|
||||
private int _toggle;
|
||||
private ByteBuffer _auxRam = new ByteBuffer(256);
|
||||
private ByteBuffer _ram = new ByteBuffer(256);
|
||||
|
||||
public override void SyncState(Serializer ser)
|
||||
{
|
||||
base.SyncState(ser);
|
||||
ser.Sync("toggle", ref _toggle);
|
||||
ser.Sync("auxRam", ref _ram);
|
||||
}
|
||||
|
||||
public override void Dispose()
|
||||
{
|
||||
_ram.Dispose();
|
||||
base.Dispose();
|
||||
}
|
||||
|
||||
public override void HardReset()
|
||||
{
|
||||
_toggle = 0;
|
||||
_ram = new ByteBuffer(128);
|
||||
base.HardReset();
|
||||
}
|
||||
|
||||
private byte ReadMem(ushort addr, bool peek)
|
||||
{
|
||||
|
@ -38,7 +58,7 @@ namespace BizHawk.Emulation.Cores.Atari.Atari2600
|
|||
|
||||
if (addr < 0x1200)
|
||||
{
|
||||
return _auxRam[addr & 0xFF];
|
||||
return _ram[addr & 0xFF];
|
||||
}
|
||||
|
||||
return Core.Rom[(_toggle << 12) + (addr & 0xFFF)];
|
||||
|
@ -63,17 +83,10 @@ namespace BizHawk.Emulation.Cores.Atari.Atari2600
|
|||
}
|
||||
else if (addr < 0x1100)
|
||||
{
|
||||
_auxRam[addr & 0xFF] = value;
|
||||
_ram[addr & 0xFF] = value;
|
||||
}
|
||||
}
|
||||
|
||||
public override void SyncState(Serializer ser)
|
||||
{
|
||||
base.SyncState(ser);
|
||||
ser.Sync("toggle", ref _toggle);
|
||||
ser.Sync("auxRam", ref _auxRam);
|
||||
}
|
||||
|
||||
private void Address(ushort addr)
|
||||
{
|
||||
if (addr == 0x1FF8) _toggle = 0;
|
||||
|
|
|
@ -11,7 +11,27 @@ namespace BizHawk.Emulation.Cores.Atari.Atari2600
|
|||
internal class mFA2 : MapperBase
|
||||
{
|
||||
private int _bank4k;
|
||||
private ByteBuffer _auxRam = new ByteBuffer(256);
|
||||
private ByteBuffer _ram = new ByteBuffer(256);
|
||||
|
||||
public override void SyncState(Serializer ser)
|
||||
{
|
||||
base.SyncState(ser);
|
||||
ser.Sync("bank4k", ref _bank4k);
|
||||
ser.Sync("auxRam", ref _ram);
|
||||
}
|
||||
|
||||
public override void Dispose()
|
||||
{
|
||||
base.Dispose();
|
||||
_ram.Dispose();
|
||||
}
|
||||
|
||||
public override void HardReset()
|
||||
{
|
||||
_bank4k = 0;
|
||||
_ram = new ByteBuffer(256);
|
||||
base.HardReset();
|
||||
}
|
||||
|
||||
private byte ReadMem(ushort addr, bool peek)
|
||||
{
|
||||
|
@ -32,7 +52,7 @@ namespace BizHawk.Emulation.Cores.Atari.Atari2600
|
|||
|
||||
if (addr < 0x1200)
|
||||
{
|
||||
return _auxRam[addr & 0xFF];
|
||||
return _ram[addr & 0xFF];
|
||||
}
|
||||
|
||||
return Core.Rom[(_bank4k << 12) + (addr & 0xFFF)];
|
||||
|
@ -57,23 +77,10 @@ namespace BizHawk.Emulation.Cores.Atari.Atari2600
|
|||
}
|
||||
else if (addr < 0x1100)
|
||||
{
|
||||
_auxRam[addr & 0xFF] = value;
|
||||
_ram[addr & 0xFF] = value;
|
||||
}
|
||||
}
|
||||
|
||||
public override void SyncState(Serializer ser)
|
||||
{
|
||||
base.SyncState(ser);
|
||||
ser.Sync("bank4k", ref _bank4k);
|
||||
ser.Sync("auxRam", ref _auxRam);
|
||||
}
|
||||
|
||||
public override void Dispose()
|
||||
{
|
||||
base.Dispose();
|
||||
_auxRam.Dispose();
|
||||
}
|
||||
|
||||
private void Address(ushort addr)
|
||||
{
|
||||
if (addr == 0x1FF5) _bank4k = 0;
|
||||
|
|
|
@ -16,6 +16,18 @@ namespace BizHawk.Emulation.Cores.Atari.Atari2600
|
|||
{
|
||||
private int _toggle;
|
||||
|
||||
public override void SyncState(Serializer ser)
|
||||
{
|
||||
base.SyncState(ser);
|
||||
ser.Sync("toggle", ref _toggle);
|
||||
}
|
||||
|
||||
public override void HardReset()
|
||||
{
|
||||
_toggle = 0;
|
||||
base.HardReset();
|
||||
}
|
||||
|
||||
private byte ReadMem(ushort addr, bool peek)
|
||||
{
|
||||
if (!peek)
|
||||
|
@ -50,12 +62,6 @@ namespace BizHawk.Emulation.Cores.Atari.Atari2600
|
|||
}
|
||||
}
|
||||
|
||||
public override void SyncState(Serializer ser)
|
||||
{
|
||||
base.SyncState(ser);
|
||||
ser.Sync("toggle", ref _toggle);
|
||||
}
|
||||
|
||||
private void Address(ushort addr)
|
||||
{
|
||||
if (addr == 0x0220)
|
||||
|
|
|
@ -35,7 +35,19 @@ namespace BizHawk.Emulation.Cores.Atari.Atari2600
|
|||
|
||||
internal class mX07 : MapperBase
|
||||
{
|
||||
private int _rombank_2K;
|
||||
private int _rombank2K;
|
||||
|
||||
public override void SyncState(Serializer ser)
|
||||
{
|
||||
base.SyncState(ser);
|
||||
ser.Sync("rombank_2k", ref _rombank2K);
|
||||
}
|
||||
|
||||
public override void HardReset()
|
||||
{
|
||||
_rombank2K = 0;
|
||||
base.HardReset();
|
||||
}
|
||||
|
||||
private byte ReadMem(ushort addr, bool peek)
|
||||
{
|
||||
|
@ -49,7 +61,7 @@ namespace BizHawk.Emulation.Cores.Atari.Atari2600
|
|||
return base.ReadMemory(addr);
|
||||
}
|
||||
|
||||
return Core.Rom[(_rombank_2K << 12) + (addr & 0xFFF)];
|
||||
return Core.Rom[(_rombank2K << 12) + (addr & 0xFFF)];
|
||||
}
|
||||
|
||||
public override byte ReadMemory(ushort addr)
|
||||
|
@ -71,12 +83,6 @@ namespace BizHawk.Emulation.Cores.Atari.Atari2600
|
|||
}
|
||||
}
|
||||
|
||||
public override void SyncState(Serializer ser)
|
||||
{
|
||||
base.SyncState(ser);
|
||||
ser.Sync("rombank_2k", ref _rombank_2K);
|
||||
}
|
||||
|
||||
private void Address(ushort addr)
|
||||
{
|
||||
if ((addr & 0x180F) == 0x080D)
|
||||
|
@ -85,16 +91,16 @@ namespace BizHawk.Emulation.Cores.Atari.Atari2600
|
|||
}
|
||||
else if ((addr & 0x1880) == 0)
|
||||
{
|
||||
if ((_rombank_2K & 0xE) == 0xE)
|
||||
if ((_rombank2K & 0xE) == 0xE)
|
||||
{
|
||||
Bank(((addr & 0x40) >> 6) | (_rombank_2K & 0xE));
|
||||
Bank(((addr & 0x40) >> 6) | (_rombank2K & 0xE));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private void Bank(int bank)
|
||||
{
|
||||
_rombank_2K = bank & 0x0F;
|
||||
_rombank2K = bank & 0x0F;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -76,6 +76,25 @@ namespace BizHawk.Emulation.Cores.Atari.Atari2600
|
|||
_player1.ScanCnt = 8;
|
||||
}
|
||||
|
||||
public void Reset()
|
||||
{
|
||||
_hsyncCnt = 0;
|
||||
_capChargeStart = 0;
|
||||
_capCharging = false;
|
||||
_vblankEnabled = false;
|
||||
_vsyncEnabled = false;
|
||||
_scanline = new uint[160];
|
||||
|
||||
_player0 = new PlayerData();
|
||||
_player1 = new PlayerData();
|
||||
_playField = new PlayfieldData();
|
||||
_hmove = new HMoveData();
|
||||
_ball = new BallData();
|
||||
|
||||
_player0.ScanCnt = 8;
|
||||
_player1.ScanCnt = 8;
|
||||
}
|
||||
|
||||
public bool FrameComplete { get; set; }
|
||||
public int MaxVolume { get; set; }
|
||||
|
||||
|
|
Loading…
Reference in New Issue