Atari 2600 - from now on, practice safe poking. Also poking is now possible on the system bus.
This commit is contained in:
parent
f49c4492f1
commit
424f312afa
|
@ -77,6 +77,23 @@ namespace BizHawk.Emulation.Cores.Atari.Atari2600
|
|||
}
|
||||
}
|
||||
|
||||
public void BasePokeMemory(ushort addr, byte value)
|
||||
{
|
||||
addr = (ushort)(addr & 0x1FFF);
|
||||
if ((addr & 0x1080) == 0)
|
||||
{
|
||||
_tia.WriteMemory(addr, value);
|
||||
}
|
||||
else if ((addr & 0x1080) == 0x0080)
|
||||
{
|
||||
M6532.WriteMemory(addr, value);
|
||||
}
|
||||
else
|
||||
{
|
||||
Console.WriteLine("ROM write(?): " + addr.ToString("x"));
|
||||
}
|
||||
}
|
||||
|
||||
public byte ReadMemory(ushort addr)
|
||||
{
|
||||
if (addr != LastAddress)
|
||||
|
@ -112,6 +129,11 @@ namespace BizHawk.Emulation.Cores.Atari.Atari2600
|
|||
CoreComm.MemoryCallbackSystem.CallWrite(addr);
|
||||
}
|
||||
|
||||
public void PokeMemory(ushort addr, byte value)
|
||||
{
|
||||
_mapper.PokeMemory((ushort)(addr & 0x1FFF), value);
|
||||
}
|
||||
|
||||
public void ExecFetch(ushort addr)
|
||||
{
|
||||
CoreComm.MemoryCallbackSystem.CallExecute(addr);
|
||||
|
|
|
@ -53,7 +53,7 @@ namespace BizHawk.Emulation.Cores.Atari.Atari2600
|
|||
8192,
|
||||
MemoryDomain.Endian.Little,
|
||||
addr => _mapper.PeekMemory((ushort) addr),
|
||||
(addr, value) => { })
|
||||
(addr, value) => _mapper.PokeMemory((ushort) addr, value))
|
||||
};
|
||||
|
||||
CoreComm.CpuTraceAvailable = true;
|
||||
|
|
|
@ -31,6 +31,11 @@ namespace BizHawk.Emulation.Cores.Atari.Atari2600
|
|||
Core.BaseWriteMemory(addr, value);
|
||||
}
|
||||
|
||||
public virtual void PokeMemory(ushort addr, byte value)
|
||||
{
|
||||
Core.BasePokeMemory(addr, value);
|
||||
}
|
||||
|
||||
public virtual void SyncState(Serializer ser) { }
|
||||
|
||||
public virtual void Dispose() { }
|
||||
|
|
|
@ -67,15 +67,29 @@ namespace BizHawk.Emulation.Cores.Atari.Atari2600
|
|||
return ReadMem(addr, true);
|
||||
}
|
||||
|
||||
public override void WriteMemory(ushort addr, byte value)
|
||||
private void WriteMem(ushort addr, byte value, bool poke)
|
||||
{
|
||||
Address(addr);
|
||||
if (!poke)
|
||||
{
|
||||
Address(addr);
|
||||
}
|
||||
|
||||
if (addr < 0x1000)
|
||||
{
|
||||
base.WriteMemory(addr, value);
|
||||
}
|
||||
}
|
||||
|
||||
public override void WriteMemory(ushort addr, byte value)
|
||||
{
|
||||
WriteMem(addr, value, poke: false);
|
||||
}
|
||||
|
||||
public override void PokeMemory(ushort addr, byte value)
|
||||
{
|
||||
WriteMem(addr, value, poke: true);
|
||||
}
|
||||
|
||||
private void Address(ushort addr)
|
||||
{
|
||||
if (addr == 0x1FF8)
|
||||
|
|
|
@ -62,15 +62,29 @@ namespace BizHawk.Emulation.Cores.Atari.Atari2600
|
|||
return ReadMem(addr, true);
|
||||
}
|
||||
|
||||
public override void WriteMemory(ushort addr, byte value)
|
||||
private void WriteMem(ushort addr, byte value, bool poke)
|
||||
{
|
||||
Address(addr);
|
||||
if (!poke)
|
||||
{
|
||||
Address(addr);
|
||||
}
|
||||
|
||||
if (addr < 0x1000)
|
||||
{
|
||||
base.WriteMemory(addr, value);
|
||||
}
|
||||
}
|
||||
|
||||
public override void WriteMemory(ushort addr, byte value)
|
||||
{
|
||||
WriteMem(addr, value, poke: false);
|
||||
}
|
||||
|
||||
public override void PokeMemory(ushort addr, byte value)
|
||||
{
|
||||
WriteMem(addr, value, poke: true);
|
||||
}
|
||||
|
||||
private void Address(ushort addr)
|
||||
{
|
||||
switch (addr & 0x1840)
|
||||
|
|
|
@ -96,23 +96,26 @@ namespace BizHawk.Emulation.Cores.Atari.Atari2600
|
|||
return ReadMemory(addr);
|
||||
}
|
||||
|
||||
public override void WriteMemory(ushort addr, byte value)
|
||||
private void WriteMem(ushort addr, byte value, bool poke)
|
||||
{
|
||||
if (addr == 0x003E)
|
||||
if (!poke)
|
||||
{
|
||||
_hasRam = true;
|
||||
_rambank1K = value;
|
||||
}
|
||||
else if (addr == 0x003F)
|
||||
{
|
||||
_hasRam = false;
|
||||
if ((value << 11) < Core.Rom.Length)
|
||||
if (addr == 0x003E)
|
||||
{
|
||||
_lowbank2K = value;
|
||||
_hasRam = true;
|
||||
_rambank1K = value;
|
||||
}
|
||||
else
|
||||
else if (addr == 0x003F)
|
||||
{
|
||||
_lowbank2K = value & (Core.Rom.Length >> 11);
|
||||
_hasRam = false;
|
||||
if ((value << 11) < Core.Rom.Length)
|
||||
{
|
||||
_lowbank2K = value;
|
||||
}
|
||||
else
|
||||
{
|
||||
_lowbank2K = value & (Core.Rom.Length >> 11);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -129,5 +132,15 @@ namespace BizHawk.Emulation.Cores.Atari.Atari2600
|
|||
_ram[(_rambank1K << 10) + (addr & 0x3FF)] = value;
|
||||
}
|
||||
}
|
||||
|
||||
public override void WriteMemory(ushort addr, byte value)
|
||||
{
|
||||
WriteMem(addr, value, poke: false);
|
||||
}
|
||||
|
||||
public override void PokeMemory(ushort addr, byte value)
|
||||
{
|
||||
WriteMem(addr, value, poke: true);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -62,21 +62,34 @@ namespace BizHawk.Emulation.Cores.Atari.Atari2600
|
|||
return ReadMemory(addr);
|
||||
}
|
||||
|
||||
public override void WriteMemory(ushort addr, byte value)
|
||||
private void WriteMem(ushort addr, byte value, bool poke)
|
||||
{
|
||||
if (addr < 0x0040)
|
||||
if (!poke)
|
||||
{
|
||||
if ((value << 11) < Core.Rom.Length)
|
||||
if (addr < 0x0040)
|
||||
{
|
||||
_lowbank2K = value;
|
||||
}
|
||||
else
|
||||
{
|
||||
_lowbank2K = value & (Core.Rom.Length >> 11);
|
||||
if ((value << 11) < Core.Rom.Length)
|
||||
{
|
||||
_lowbank2K = value;
|
||||
}
|
||||
else
|
||||
{
|
||||
_lowbank2K = value & (Core.Rom.Length >> 11);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
base.WriteMemory(addr, value);
|
||||
}
|
||||
|
||||
public override void WriteMemory(ushort addr, byte value)
|
||||
{
|
||||
WriteMem(addr, value, poke: false);
|
||||
}
|
||||
|
||||
public override void PokeMemory(ushort addr, byte value)
|
||||
{
|
||||
WriteMem(addr, value, poke: true);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -192,12 +192,15 @@ namespace BizHawk.Emulation.Cores.Atari.Atari2600
|
|||
return ReadMem(addr, true);
|
||||
}
|
||||
|
||||
public override void WriteMemory(ushort addr, byte value)
|
||||
private void WriteMem(ushort addr, byte value, bool poke)
|
||||
{
|
||||
if (addr < 0x1000) // Hotspots below 0x1000
|
||||
{
|
||||
base.WriteMemory(addr, value);
|
||||
CheckBankSwitch(addr, value);
|
||||
if (!poke)
|
||||
{
|
||||
CheckBankSwitch(addr, value);
|
||||
}
|
||||
}
|
||||
else if (addr < 0x1800) // 2K region at 0x1000 - 0x17ff
|
||||
{
|
||||
|
@ -220,7 +223,7 @@ namespace BizHawk.Emulation.Cores.Atari.Atari2600
|
|||
_ram[(addr & 0xff) + _sliceHigh] = value;
|
||||
}
|
||||
}
|
||||
else if (addr < 0x2000) // 256B region at 0x1f00 - 0x1fff
|
||||
else if (addr < 0x2000 && !poke) // 256B region at 0x1f00 - 0x1fff
|
||||
{
|
||||
if (((_lastData & 0xe0) == 0x60) &&
|
||||
((_lastAddress >= 0x1000) || (_lastAddress < 0x200)))
|
||||
|
@ -230,8 +233,21 @@ namespace BizHawk.Emulation.Cores.Atari.Atari2600
|
|||
}
|
||||
}
|
||||
|
||||
_lastData = value;
|
||||
_lastAddress = (ushort)(addr & 0x1fff);
|
||||
if (!poke)
|
||||
{
|
||||
_lastData = value;
|
||||
_lastAddress = (ushort)(addr & 0x1fff);
|
||||
}
|
||||
}
|
||||
|
||||
public override void WriteMemory(ushort addr, byte value)
|
||||
{
|
||||
WriteMem(addr, value, poke: false);
|
||||
}
|
||||
|
||||
public override void PokeMemory(ushort addr, byte value)
|
||||
{
|
||||
WriteMem(addr, value, poke: true);
|
||||
}
|
||||
|
||||
private void CheckBankSwitch(ushort address, byte value)
|
||||
|
|
|
@ -38,6 +38,7 @@ namespace BizHawk.Emulation.Cores.Atari.Atari2600
|
|||
// TODO: can we set the defaults instead of do it in the constructor?
|
||||
// TODO: fastscbios setting
|
||||
// TODO: var names, savestates, hard reset, dispose, cart ram
|
||||
// TOOD: pokeMem
|
||||
public mAR(Atari2600 core)
|
||||
{
|
||||
// TODO: clean this stuff up
|
||||
|
|
|
@ -176,6 +176,7 @@ namespace BizHawk.Emulation.Cores.Atari.Atari2600
|
|||
*/
|
||||
internal class mCM : MapperBase
|
||||
{
|
||||
// TODO: PokeMem
|
||||
private ByteBuffer _ram = new ByteBuffer(2048);
|
||||
private int _bank4K = 3; // On Start up, controller port is all 1's, so start on the last bank, flags enabled
|
||||
private bool _disableRam = true;
|
||||
|
|
|
@ -73,7 +73,7 @@ namespace BizHawk.Emulation.Cores.Atari.Atari2600
|
|||
return ReadMemory(addr);
|
||||
}
|
||||
|
||||
public override void WriteMemory(ushort addr, byte value)
|
||||
private void WriteMem(ushort addr, byte value, bool poke)
|
||||
{
|
||||
if (addr < 0x1000)
|
||||
{
|
||||
|
@ -84,5 +84,15 @@ namespace BizHawk.Emulation.Cores.Atari.Atari2600
|
|||
_ram[(addr & 0x3FF)] = value;
|
||||
}
|
||||
}
|
||||
|
||||
public override void WriteMemory(ushort addr, byte value)
|
||||
{
|
||||
WriteMem(addr, value, poke: false);
|
||||
}
|
||||
|
||||
public override void PokeMemory(ushort addr, byte value)
|
||||
{
|
||||
WriteMem(addr, value, poke: true);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -406,7 +406,7 @@ namespace BizHawk.Emulation.Cores.Atari.Atari2600
|
|||
return ReadMem(addr, true);
|
||||
}
|
||||
|
||||
public override void WriteMemory(ushort addr, byte value)
|
||||
private void WriteMem(ushort addr, byte value, bool poke)
|
||||
{
|
||||
if (addr < 0x1000)
|
||||
{
|
||||
|
@ -414,8 +414,10 @@ namespace BizHawk.Emulation.Cores.Atari.Atari2600
|
|||
return;
|
||||
}
|
||||
|
||||
Address(addr);
|
||||
ClockRandomNumberGenerator();
|
||||
if (poke)
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
if (addr >= 0x1040 && addr < 0x1080)
|
||||
{
|
||||
|
@ -463,7 +465,7 @@ namespace BizHawk.Emulation.Cores.Atari.Atari2600
|
|||
if (index >= 5)
|
||||
{
|
||||
_musicModes[index - 5] = (value & 0x10) > 0;
|
||||
|
||||
|
||||
// NOTE: We are not handling the clock source input for
|
||||
// the music mode data fetchers. We're going to assume
|
||||
// they always use the OSC input.
|
||||
|
@ -479,6 +481,16 @@ namespace BizHawk.Emulation.Cores.Atari.Atari2600
|
|||
}
|
||||
}
|
||||
|
||||
public override void WriteMemory(ushort addr, byte value)
|
||||
{
|
||||
WriteMem(addr, value, poke: false);
|
||||
}
|
||||
|
||||
public override void PokeMemory(ushort addr, byte value)
|
||||
{
|
||||
WriteMem(addr, value, poke: true);
|
||||
}
|
||||
|
||||
private void Address(ushort addr)
|
||||
{
|
||||
if (addr == 0x1FF8)
|
||||
|
|
|
@ -11,6 +11,7 @@ namespace BizHawk.Emulation.Cores.Atari.Atari2600
|
|||
*/
|
||||
internal class mDPCPlus : MapperBase
|
||||
{
|
||||
// TODO: PokeMem, and everything else
|
||||
public mDPCPlus()
|
||||
{
|
||||
throw new NotImplementedException();
|
||||
|
|
|
@ -85,15 +85,29 @@ namespace BizHawk.Emulation.Cores.Atari.Atari2600
|
|||
return ReadMem(addr, true);
|
||||
}
|
||||
|
||||
public override void WriteMemory(ushort addr, byte value)
|
||||
private void WriteMem(ushort addr, byte value, bool poke)
|
||||
{
|
||||
Address(addr);
|
||||
if (!poke)
|
||||
{
|
||||
Address(addr);
|
||||
}
|
||||
|
||||
if (addr < 0x1000)
|
||||
{
|
||||
base.WriteMemory(addr, value);
|
||||
}
|
||||
}
|
||||
|
||||
public override void WriteMemory(ushort addr, byte value)
|
||||
{
|
||||
WriteMem(addr, value, poke: false);
|
||||
}
|
||||
|
||||
public override void PokeMemory(ushort addr, byte value)
|
||||
{
|
||||
WriteMem(addr, value, poke: true);
|
||||
}
|
||||
|
||||
private void Address(ushort addr)
|
||||
{
|
||||
switch (addr)
|
||||
|
|
|
@ -129,9 +129,13 @@ namespace BizHawk.Emulation.Cores.Atari.Atari2600
|
|||
return ReadMem(addr, true);
|
||||
}
|
||||
|
||||
public override void WriteMemory(ushort addr, byte value)
|
||||
private void WriteMem(ushort addr, byte value, bool poke)
|
||||
{
|
||||
Address(addr);
|
||||
if (!poke)
|
||||
{
|
||||
Address(addr);
|
||||
}
|
||||
|
||||
if (addr < 0x1000)
|
||||
{
|
||||
base.WriteMemory(addr, value);
|
||||
|
@ -146,6 +150,16 @@ namespace BizHawk.Emulation.Cores.Atari.Atari2600
|
|||
}
|
||||
}
|
||||
|
||||
public override void WriteMemory(ushort addr, byte value)
|
||||
{
|
||||
WriteMem(addr, value, poke: false);
|
||||
}
|
||||
|
||||
public override void PokeMemory(ushort addr, byte value)
|
||||
{
|
||||
WriteMem(addr, value, poke: true);
|
||||
}
|
||||
|
||||
private void Address(ushort addr)
|
||||
{
|
||||
_enableRam0 = false;
|
||||
|
|
|
@ -53,15 +53,29 @@ namespace BizHawk.Emulation.Cores.Atari.Atari2600
|
|||
return ReadMem(addr, true);
|
||||
}
|
||||
|
||||
public override void WriteMemory(ushort addr, byte value)
|
||||
private void WriteMem(ushort addr, byte value, bool poke)
|
||||
{
|
||||
Address(addr);
|
||||
if (!poke)
|
||||
{
|
||||
Address(addr);
|
||||
}
|
||||
|
||||
if (addr < 0x1000)
|
||||
{
|
||||
base.WriteMemory(addr, value);
|
||||
}
|
||||
}
|
||||
|
||||
public override void WriteMemory(ushort addr, byte value)
|
||||
{
|
||||
WriteMem(addr, value, poke: false);
|
||||
}
|
||||
|
||||
public override void PokeMemory(ushort addr, byte value)
|
||||
{
|
||||
WriteMem(addr, value, poke: true);
|
||||
}
|
||||
|
||||
private void Address(ushort addr)
|
||||
{
|
||||
if (addr == 0x1FE0) _toggle = 0;
|
||||
|
|
|
@ -77,9 +77,12 @@ namespace BizHawk.Emulation.Cores.Atari.Atari2600
|
|||
return ReadMem(addr, true);
|
||||
}
|
||||
|
||||
public override void WriteMemory(ushort addr, byte value)
|
||||
private void WriteMem(ushort addr, byte value, bool poke)
|
||||
{
|
||||
Address(addr);
|
||||
if (!poke)
|
||||
{
|
||||
Address(addr);
|
||||
}
|
||||
|
||||
if (addr < 0x1000)
|
||||
{
|
||||
|
@ -91,6 +94,16 @@ namespace BizHawk.Emulation.Cores.Atari.Atari2600
|
|||
}
|
||||
}
|
||||
|
||||
public override void WriteMemory(ushort addr, byte value)
|
||||
{
|
||||
WriteMem(addr, value, poke: false);
|
||||
}
|
||||
|
||||
public override void PokeMemory(ushort addr, byte value)
|
||||
{
|
||||
WriteMem(addr, value, poke: true);
|
||||
}
|
||||
|
||||
private void Address(ushort addr)
|
||||
{
|
||||
if (addr == 0x1FE0) _bank4k = 0;
|
||||
|
|
|
@ -61,19 +61,29 @@ namespace BizHawk.Emulation.Cores.Atari.Atari2600
|
|||
{
|
||||
return ReadMem(addr, true);
|
||||
}
|
||||
|
||||
public override void WriteMemory(ushort addr, byte value)
|
||||
|
||||
private void WriteMem(ushort addr, byte value, bool poke)
|
||||
{
|
||||
if (addr < 0x1000)
|
||||
{
|
||||
base.WriteMemory(addr, value);
|
||||
}
|
||||
else if (addr == 0x1ff0)
|
||||
else if (addr == 0x1ff0 && !poke)
|
||||
{
|
||||
Increment();
|
||||
}
|
||||
}
|
||||
|
||||
public override void WriteMemory(ushort addr, byte value)
|
||||
{
|
||||
WriteMem(addr, value, poke: false);
|
||||
}
|
||||
|
||||
public override void PokeMemory(ushort addr, byte value)
|
||||
{
|
||||
WriteMem(addr, value, poke: true);
|
||||
}
|
||||
|
||||
private void Increment()
|
||||
{
|
||||
_bank++;
|
||||
|
|
|
@ -51,15 +51,29 @@ namespace BizHawk.Emulation.Cores.Atari.Atari2600
|
|||
return ReadMem(addr, true);
|
||||
}
|
||||
|
||||
public override void WriteMemory(ushort addr, byte value)
|
||||
private void WriteMem(ushort addr, byte value, bool poke)
|
||||
{
|
||||
Address(addr);
|
||||
if (!poke)
|
||||
{
|
||||
Address(addr);
|
||||
}
|
||||
|
||||
if (addr < 0x1000)
|
||||
{
|
||||
base.WriteMemory(addr, value);
|
||||
}
|
||||
}
|
||||
|
||||
public override void WriteMemory(ushort addr, byte value)
|
||||
{
|
||||
WriteMem(addr, value, poke: false);
|
||||
}
|
||||
|
||||
public override void PokeMemory(ushort addr, byte value)
|
||||
{
|
||||
WriteMem(addr, value, poke: true);
|
||||
}
|
||||
|
||||
private void Address(ushort addr)
|
||||
{
|
||||
if (addr == 0x1FF4) _toggle = 0;
|
||||
|
|
|
@ -76,9 +76,13 @@ namespace BizHawk.Emulation.Cores.Atari.Atari2600
|
|||
return ReadMem(addr, true);
|
||||
}
|
||||
|
||||
public override void WriteMemory(ushort addr, byte value)
|
||||
private void WriteMem(ushort addr, byte value, bool poke)
|
||||
{
|
||||
Address(addr);
|
||||
if (!poke)
|
||||
{
|
||||
Address(addr);
|
||||
}
|
||||
|
||||
if (addr < 0x1000)
|
||||
{
|
||||
base.WriteMemory(addr, value);
|
||||
|
@ -89,6 +93,16 @@ namespace BizHawk.Emulation.Cores.Atari.Atari2600
|
|||
}
|
||||
}
|
||||
|
||||
public override void WriteMemory(ushort addr, byte value)
|
||||
{
|
||||
WriteMem(addr, value, poke: false);
|
||||
}
|
||||
|
||||
public override void PokeMemory(ushort addr, byte value)
|
||||
{
|
||||
WriteMem(addr, value, poke: true);
|
||||
}
|
||||
|
||||
private void Address(ushort addr)
|
||||
{
|
||||
if (addr == 0x1FF4) _bank4k = 0;
|
||||
|
|
|
@ -52,15 +52,29 @@ namespace BizHawk.Emulation.Cores.Atari.Atari2600
|
|||
return ReadMem(addr, true);
|
||||
}
|
||||
|
||||
public override void WriteMemory(ushort addr, byte value)
|
||||
private void WriteMem(ushort addr, byte value, bool poke)
|
||||
{
|
||||
Address(addr);
|
||||
if (!poke)
|
||||
{
|
||||
Address(addr);
|
||||
}
|
||||
|
||||
if (addr < 0x1000)
|
||||
{
|
||||
base.WriteMemory(addr, value);
|
||||
}
|
||||
}
|
||||
|
||||
public override void WriteMemory(ushort addr, byte value)
|
||||
{
|
||||
WriteMem(addr, value, poke: false);
|
||||
}
|
||||
|
||||
public override void PokeMemory(ushort addr, byte value)
|
||||
{
|
||||
WriteMem(addr, value, poke: true);
|
||||
}
|
||||
|
||||
private void Address(ushort addr)
|
||||
{
|
||||
if (addr == 0x1FF6) _toggle = 0;
|
||||
|
|
|
@ -76,9 +76,12 @@ namespace BizHawk.Emulation.Cores.Atari.Atari2600
|
|||
return ReadMem(addr, true);
|
||||
}
|
||||
|
||||
public override void WriteMemory(ushort addr, byte value)
|
||||
private void WriteMem(ushort addr, byte value, bool poke)
|
||||
{
|
||||
Address(addr);
|
||||
if (!poke)
|
||||
{
|
||||
Address(addr);
|
||||
}
|
||||
|
||||
if (addr < 0x1000)
|
||||
{
|
||||
|
@ -90,6 +93,16 @@ namespace BizHawk.Emulation.Cores.Atari.Atari2600
|
|||
}
|
||||
}
|
||||
|
||||
public override void WriteMemory(ushort addr, byte value)
|
||||
{
|
||||
WriteMem(addr, value, poke: false);
|
||||
}
|
||||
|
||||
public override void PokeMemory(ushort addr, byte value)
|
||||
{
|
||||
WriteMem(addr, value, poke: true);
|
||||
}
|
||||
|
||||
private void Address(ushort addr)
|
||||
{
|
||||
if (addr == 0x1FF6) _bank4k = 0;
|
||||
|
|
|
@ -60,15 +60,29 @@ namespace BizHawk.Emulation.Cores.Atari.Atari2600
|
|||
return ReadMem(addr, true);
|
||||
}
|
||||
|
||||
public override void WriteMemory(ushort addr, byte value)
|
||||
private void WriteMem(ushort addr, byte value, bool poke)
|
||||
{
|
||||
Address(addr);
|
||||
if (!poke)
|
||||
{
|
||||
Address(addr);
|
||||
}
|
||||
|
||||
if (addr < 0x1000)
|
||||
{
|
||||
base.WriteMemory(addr, value);
|
||||
}
|
||||
}
|
||||
|
||||
public override void WriteMemory(ushort addr, byte value)
|
||||
{
|
||||
WriteMem(addr, value, poke: false);
|
||||
}
|
||||
|
||||
public override void PokeMemory(ushort addr, byte value)
|
||||
{
|
||||
WriteMem(addr, value, poke: true);
|
||||
}
|
||||
|
||||
private void Address(ushort addr)
|
||||
{
|
||||
if (addr == 0x1FF8)
|
||||
|
|
|
@ -63,9 +63,12 @@ namespace BizHawk.Emulation.Cores.Atari.Atari2600
|
|||
return ReadMem(addr, true);
|
||||
}
|
||||
|
||||
public override void WriteMemory(ushort addr, byte value)
|
||||
private void WriteMem(ushort addr, byte value, bool poke)
|
||||
{
|
||||
Address(addr);
|
||||
if (!poke)
|
||||
{
|
||||
Address(addr);
|
||||
}
|
||||
|
||||
if (addr < 0x1000)
|
||||
{
|
||||
|
@ -77,6 +80,16 @@ namespace BizHawk.Emulation.Cores.Atari.Atari2600
|
|||
}
|
||||
}
|
||||
|
||||
public override void WriteMemory(ushort addr, byte value)
|
||||
{
|
||||
WriteMem(addr, value, poke: false);
|
||||
}
|
||||
|
||||
public override void PokeMemory(ushort addr, byte value)
|
||||
{
|
||||
WriteMem(addr, value, poke: true);
|
||||
}
|
||||
|
||||
public override void SyncState(Serializer ser)
|
||||
{
|
||||
base.SyncState(ser);
|
||||
|
|
|
@ -74,9 +74,13 @@ namespace BizHawk.Emulation.Cores.Atari.Atari2600
|
|||
return ReadMem(addr, true);
|
||||
}
|
||||
|
||||
public override void WriteMemory(ushort addr, byte value)
|
||||
private void WriteMem(ushort addr, byte value, bool poke)
|
||||
{
|
||||
Address(addr);
|
||||
if (!poke)
|
||||
{
|
||||
Address(addr);
|
||||
}
|
||||
|
||||
if (addr < 0x1000)
|
||||
{
|
||||
base.WriteMemory(addr, value);
|
||||
|
@ -87,6 +91,16 @@ namespace BizHawk.Emulation.Cores.Atari.Atari2600
|
|||
}
|
||||
}
|
||||
|
||||
public override void WriteMemory(ushort addr, byte value)
|
||||
{
|
||||
WriteMem(addr, value, poke: false);
|
||||
}
|
||||
|
||||
public override void PokeMemory(ushort addr, byte value)
|
||||
{
|
||||
WriteMem(addr, value, poke: true);
|
||||
}
|
||||
|
||||
private void Address(ushort addr)
|
||||
{
|
||||
if (addr == 0x1FF8) _toggle = 0;
|
||||
|
|
|
@ -78,9 +78,13 @@ namespace BizHawk.Emulation.Cores.Atari.Atari2600
|
|||
return ReadMem(addr, true);
|
||||
}
|
||||
|
||||
public override void WriteMemory(ushort addr, byte value)
|
||||
private void WriteMem(ushort addr, byte value, bool poke)
|
||||
{
|
||||
Address(addr);
|
||||
if (!poke)
|
||||
{
|
||||
Address(addr);
|
||||
}
|
||||
|
||||
if (addr < 0x1000)
|
||||
{
|
||||
base.WriteMemory(addr, value);
|
||||
|
@ -91,6 +95,16 @@ namespace BizHawk.Emulation.Cores.Atari.Atari2600
|
|||
}
|
||||
}
|
||||
|
||||
public override void WriteMemory(ushort addr, byte value)
|
||||
{
|
||||
WriteMem(addr, value, poke: false);
|
||||
}
|
||||
|
||||
public override void PokeMemory(ushort addr, byte value)
|
||||
{
|
||||
WriteMem(addr, value, poke: true);
|
||||
}
|
||||
|
||||
private void Address(ushort addr)
|
||||
{
|
||||
if (addr == 0x1FF5) _bank4k = 0;
|
||||
|
|
|
@ -50,15 +50,29 @@ namespace BizHawk.Emulation.Cores.Atari.Atari2600
|
|||
return ReadMem(addr, true);
|
||||
}
|
||||
|
||||
public override void WriteMemory(ushort addr, byte value)
|
||||
private void WriteMem(ushort addr, byte value, bool poke)
|
||||
{
|
||||
Address(addr);
|
||||
if (!poke)
|
||||
{
|
||||
Address(addr);
|
||||
}
|
||||
|
||||
if (addr < 0x1000)
|
||||
{
|
||||
base.WriteMemory(addr, value);
|
||||
}
|
||||
}
|
||||
|
||||
public override void WriteMemory(ushort addr, byte value)
|
||||
{
|
||||
WriteMem(addr, value, poke: false);
|
||||
}
|
||||
|
||||
public override void PokeMemory(ushort addr, byte value)
|
||||
{
|
||||
WriteMem(addr, value, poke: true);
|
||||
}
|
||||
|
||||
private void Address(ushort addr)
|
||||
{
|
||||
var temp = addr & (0x17FF + (Core.Rom.Length >> 12));
|
||||
|
|
|
@ -53,15 +53,29 @@ namespace BizHawk.Emulation.Cores.Atari.Atari2600
|
|||
return ReadMem(addr, true);
|
||||
}
|
||||
|
||||
public override void WriteMemory(ushort addr, byte value)
|
||||
private void WriteMem(ushort addr, byte value, bool poke)
|
||||
{
|
||||
Address(addr);
|
||||
if (!poke)
|
||||
{
|
||||
Address(addr);
|
||||
}
|
||||
|
||||
if (addr < 0x1000)
|
||||
{
|
||||
base.WriteMemory(addr, value);
|
||||
}
|
||||
}
|
||||
|
||||
public override void WriteMemory(ushort addr, byte value)
|
||||
{
|
||||
WriteMem(addr, value, poke: false);
|
||||
}
|
||||
|
||||
public override void PokeMemory(ushort addr, byte value)
|
||||
{
|
||||
WriteMem(addr, value, poke: true);
|
||||
}
|
||||
|
||||
private void Address(ushort addr)
|
||||
{
|
||||
if (addr == 0x0220)
|
||||
|
|
|
@ -74,15 +74,29 @@ namespace BizHawk.Emulation.Cores.Atari.Atari2600
|
|||
return ReadMem(addr, true);
|
||||
}
|
||||
|
||||
public override void WriteMemory(ushort addr, byte value)
|
||||
private void WriteMem(ushort addr, byte value, bool poke)
|
||||
{
|
||||
Address(addr);
|
||||
if (!poke)
|
||||
{
|
||||
Address(addr);
|
||||
}
|
||||
|
||||
if (addr < 0x1000)
|
||||
{
|
||||
base.WriteMemory(addr, value);
|
||||
}
|
||||
}
|
||||
|
||||
public override void WriteMemory(ushort addr, byte value)
|
||||
{
|
||||
WriteMem(addr, value, poke: false);
|
||||
}
|
||||
|
||||
public override void PokeMemory(ushort addr, byte value)
|
||||
{
|
||||
WriteMem(addr, value, poke: true);
|
||||
}
|
||||
|
||||
private void Address(ushort addr)
|
||||
{
|
||||
if ((addr & 0x180F) == 0x080D)
|
||||
|
|
Loading…
Reference in New Issue