Atari 2600 - implement TIA, PIA, and System Bus domains (note that there is no poke ability on the system bus domain at this time)
This commit is contained in:
parent
47149d8f4e
commit
3e639d65ab
|
@ -21,6 +21,9 @@ namespace BizHawk
|
|||
CoreComm = comm;
|
||||
var domains = new List<MemoryDomain>(1);
|
||||
domains.Add(new MemoryDomain("Main RAM", 128, Endian.Little, addr => ram[addr & 127], (addr, value) => ram[addr & 127] = value));
|
||||
domains.Add(new MemoryDomain("TIA", 16, Endian.Little, addr => tia.ReadMemory((ushort)addr, true), (addr, value) => tia.WriteMemory((ushort)addr, value)));
|
||||
domains.Add(new MemoryDomain("PIA", 1024, Endian.Little, addr => m6532.ReadMemory((ushort)addr, true), (addr, value) => m6532.WriteMemory((ushort)addr, value)));
|
||||
domains.Add(new MemoryDomain("System Bus", 8192, Endian.Little, addr => mapper.PeekMemory((ushort)addr), (addr, value) => {}));
|
||||
memoryDomains = domains.AsReadOnly();
|
||||
CoreComm.CpuTraceAvailable = true;
|
||||
this.rom = rom;
|
||||
|
|
|
@ -15,6 +15,11 @@ namespace BizHawk
|
|||
if (addr < 0x1000) return base.ReadMemory(addr);
|
||||
return core.rom[addr & 0x7FF];
|
||||
}
|
||||
|
||||
public override byte PeekMemory(ushort addr)
|
||||
{
|
||||
return ReadMemory(addr);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
|
@ -78,6 +78,39 @@ namespace BizHawk.Emulation.Consoles.Atari._2600
|
|||
return base.ReadMemory(addr);
|
||||
}
|
||||
|
||||
public override byte PeekMemory(ushort addr)
|
||||
{
|
||||
if (addr < 0x1000)
|
||||
{
|
||||
return base.ReadMemory(addr);
|
||||
}
|
||||
else if (addr < 0x17FF) //Low 2k Bank
|
||||
{
|
||||
if (hasRam)
|
||||
{
|
||||
if (addr < 0x13FF)
|
||||
{
|
||||
return ram[(addr & 0x03FF) + (rambank_1k << 10)];
|
||||
}
|
||||
else
|
||||
{
|
||||
return ram[(addr & 0x03FF) + (rambank_1k << 10)]; //Reading from the write port triggers an unwanted write
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
int a = addr & 0x07FF; //2K
|
||||
int bank = lowbank_2k << 11;
|
||||
return core.rom[bank + a];
|
||||
}
|
||||
}
|
||||
else if (addr < 0x2000) //High bank fixed to last 2k of ROM
|
||||
{
|
||||
return core.rom[(core.rom.Length - 2048) + (addr & 0x07FF)];
|
||||
}
|
||||
return base.ReadMemory(addr);
|
||||
}
|
||||
|
||||
public override void WriteMemory(ushort addr, byte value)
|
||||
{
|
||||
if (addr < 0x1000)
|
||||
|
|
|
@ -53,6 +53,11 @@ namespace BizHawk.Emulation.Consoles.Atari._2600
|
|||
return base.ReadMemory(addr);
|
||||
}
|
||||
|
||||
public override byte PeekMemory(ushort addr)
|
||||
{
|
||||
return ReadMemory(addr);
|
||||
}
|
||||
|
||||
public override void WriteMemory(ushort addr, byte value)
|
||||
{
|
||||
if (addr < 0x0040)
|
||||
|
|
|
@ -45,6 +45,11 @@ namespace BizHawk.Emulation.Consoles.Atari._2600
|
|||
|
||||
private ByteBuffer myRAM = new ByteBuffer(32768);
|
||||
|
||||
public override byte PeekMemory(ushort addr)
|
||||
{
|
||||
return base.PeekMemory(addr); //TODO
|
||||
}
|
||||
|
||||
public override byte ReadMemory(ushort addr)
|
||||
{
|
||||
byte val = 0;
|
||||
|
|
|
@ -15,6 +15,11 @@ namespace BizHawk
|
|||
if (addr < 0x1000) return base.ReadMemory(addr);
|
||||
return core.rom[addr & 0xFFF];
|
||||
}
|
||||
|
||||
public override byte PeekMemory(ushort addr)
|
||||
{
|
||||
return ReadMemory(addr);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
|
@ -33,6 +33,12 @@ namespace BizHawk.Emulation.Consoles.Atari._2600
|
|||
return core.rom[(addr & 0x7FF)];
|
||||
else return base.ReadMemory(addr);
|
||||
}
|
||||
|
||||
public override byte PeekMemory(ushort addr)
|
||||
{
|
||||
return ReadMemory(addr);
|
||||
}
|
||||
|
||||
public override void WriteMemory(ushort addr, byte value)
|
||||
{
|
||||
if (addr < 0x1000)
|
||||
|
|
|
@ -20,6 +20,11 @@ namespace BizHawk
|
|||
|
||||
bool[] MusicMode = new bool[3]; //TOOD: savestates
|
||||
|
||||
public override byte PeekMemory(ushort addr)
|
||||
{
|
||||
return base.PeekMemory(addr); //TODO
|
||||
}
|
||||
|
||||
public override byte ReadMemory(ushort addr)
|
||||
{
|
||||
if (addr < 0x1000)
|
||||
|
|
|
@ -31,17 +31,32 @@ namespace BizHawk.Emulation.Consoles.Atari._2600
|
|||
int toggle1 = 0;
|
||||
int toggle2 = 0;
|
||||
int toggle3 = 0;
|
||||
|
||||
public override byte ReadMemory(ushort addr)
|
||||
|
||||
private byte ReadMem(ushort addr, bool peek)
|
||||
{
|
||||
Address(addr);
|
||||
if (!peek)
|
||||
{
|
||||
Address(addr);
|
||||
}
|
||||
|
||||
if (addr < 0x1000) return base.ReadMemory(addr);
|
||||
else if (addr < 0x1400) return core.rom[toggle1 * 1024 + (addr & 0x3FF)];
|
||||
else if (addr < 0x1800) return core.rom[toggle2 * 1024 + (addr & 0x3FF)];
|
||||
else if (addr < 0x1C00) return core.rom[toggle3 * 1024 + (addr & 0x3FF)];
|
||||
else
|
||||
else
|
||||
return core.rom[7 * 1024 + (addr & 0x3FF)]; //7 because final bank is always set to last
|
||||
}
|
||||
|
||||
public override byte ReadMemory(ushort addr)
|
||||
{
|
||||
return ReadMem(addr, false);
|
||||
}
|
||||
|
||||
public override byte PeekMemory(ushort addr)
|
||||
{
|
||||
return ReadMem(addr, true);
|
||||
}
|
||||
|
||||
public override void WriteMemory(ushort addr, byte value)
|
||||
{
|
||||
Address(addr);
|
||||
|
|
|
@ -38,14 +38,18 @@ namespace BizHawk.Emulation.Consoles.Atari._2600
|
|||
ByteBuffer rambank1 = new ByteBuffer(1024);
|
||||
bool EnableRam0 = false;
|
||||
|
||||
public override byte ReadMemory(ushort addr)
|
||||
private byte ReadMem(ushort addr, bool peek)
|
||||
{
|
||||
if (addr < 0x1000)
|
||||
{
|
||||
return base.ReadMemory(addr);
|
||||
}
|
||||
|
||||
Address(addr);
|
||||
if (!peek)
|
||||
{
|
||||
Address(addr);
|
||||
}
|
||||
|
||||
if (addr < 0x1800)
|
||||
{
|
||||
if (EnableRam0)
|
||||
|
@ -84,6 +88,17 @@ namespace BizHawk.Emulation.Consoles.Atari._2600
|
|||
return base.ReadMemory(addr);
|
||||
}
|
||||
}
|
||||
|
||||
public override byte ReadMemory(ushort addr)
|
||||
{
|
||||
return ReadMem(addr, false);
|
||||
}
|
||||
|
||||
public override byte PeekMemory(ushort addr)
|
||||
{
|
||||
return ReadMem(addr, true);
|
||||
}
|
||||
|
||||
public override void WriteMemory(ushort addr, byte value)
|
||||
{
|
||||
Address(addr);
|
||||
|
|
|
@ -19,12 +19,27 @@ namespace BizHawk.Emulation.Consoles.Atari._2600
|
|||
{
|
||||
int toggle = 0;
|
||||
|
||||
public override byte ReadMemory(ushort addr)
|
||||
private byte ReadMem(ushort addr, bool peek)
|
||||
{
|
||||
Address(addr);
|
||||
if (!peek)
|
||||
{
|
||||
Address(addr);
|
||||
}
|
||||
|
||||
if (addr < 0x1000) return base.ReadMemory(addr);
|
||||
return core.rom[toggle * 4 * 1024 + (addr & 0xFFF)];
|
||||
}
|
||||
|
||||
public override byte ReadMemory(ushort addr)
|
||||
{
|
||||
return ReadMem(addr, false);
|
||||
}
|
||||
|
||||
public override byte PeekMemory(ushort addr)
|
||||
{
|
||||
return ReadMem(addr, true);
|
||||
}
|
||||
|
||||
public override void WriteMemory(ushort addr, byte value)
|
||||
{
|
||||
Address(addr);
|
||||
|
|
|
@ -25,14 +25,28 @@ namespace BizHawk.Emulation.Consoles.Atari._2600
|
|||
{
|
||||
int bank = 0;
|
||||
|
||||
private byte ReadMem(ushort addr, bool peek)
|
||||
{
|
||||
if (!peek)
|
||||
{
|
||||
if (addr == 0x1FF0)
|
||||
Increment();
|
||||
}
|
||||
|
||||
if (addr < 0x1000) return base.ReadMemory(addr);
|
||||
else return core.rom[bank * 4096 + (addr & 0xFFF)];
|
||||
}
|
||||
|
||||
public override byte ReadMemory(ushort addr)
|
||||
{
|
||||
if (addr == 0x1FF0)
|
||||
Increment();
|
||||
|
||||
if (addr < 0x1000) return base.ReadMemory(addr);
|
||||
else return core.rom[bank * 4 * 1024 + (addr & 0xFFF)];
|
||||
return ReadMem(addr, false);
|
||||
}
|
||||
|
||||
public override byte PeekMemory(ushort addr)
|
||||
{
|
||||
return ReadMem(addr, true);
|
||||
}
|
||||
|
||||
public override void WriteMemory(ushort addr, byte value)
|
||||
{
|
||||
if (addr < 0x1000) base.WriteMemory(addr, value);
|
||||
|
|
|
@ -17,12 +17,27 @@ namespace BizHawk.Emulation.Consoles.Atari._2600
|
|||
{
|
||||
int toggle = 0;
|
||||
|
||||
private byte ReadMem(ushort addr, bool peek)
|
||||
{
|
||||
if (!peek)
|
||||
{
|
||||
Address(addr);
|
||||
}
|
||||
|
||||
if (addr < 0x1000) return base.ReadMemory(addr);
|
||||
return core.rom[toggle * 4096 + (addr & 0xFFF)];
|
||||
}
|
||||
|
||||
public override byte ReadMemory(ushort addr)
|
||||
{
|
||||
Address(addr);
|
||||
if (addr < 0x1000) return base.ReadMemory(addr);
|
||||
return core.rom[toggle * 4 * 1024 + (addr & 0xFFF)];
|
||||
return ReadMem(addr, false);
|
||||
}
|
||||
|
||||
public override byte PeekMemory(ushort addr)
|
||||
{
|
||||
return ReadMem(addr, true);
|
||||
}
|
||||
|
||||
public override void WriteMemory(ushort addr, byte value)
|
||||
{
|
||||
Address(addr);
|
||||
|
|
|
@ -18,12 +18,27 @@ namespace BizHawk.Emulation.Consoles.Atari._2600
|
|||
{
|
||||
int toggle = 0;
|
||||
|
||||
private byte ReadMem(ushort addr, bool peek)
|
||||
{
|
||||
if (!peek)
|
||||
{
|
||||
Address(addr);
|
||||
}
|
||||
|
||||
if (addr < 0x1000) return base.ReadMemory(addr);
|
||||
return core.rom[(toggle << 12) + (addr & 0xFFF)];
|
||||
}
|
||||
|
||||
public override byte ReadMemory(ushort addr)
|
||||
{
|
||||
Address(addr);
|
||||
if (addr < 0x1000) return base.ReadMemory(addr);
|
||||
return core.rom[toggle * 4 * 1024 + (addr & 0xFFF)];
|
||||
return ReadMem(addr, false);
|
||||
}
|
||||
|
||||
public override byte PeekMemory(ushort addr)
|
||||
{
|
||||
return ReadMem(addr, true);
|
||||
}
|
||||
|
||||
public override void WriteMemory(ushort addr, byte value)
|
||||
{
|
||||
Address(addr);
|
||||
|
|
|
@ -28,14 +28,28 @@ namespace BizHawk
|
|||
class mF8 : MapperBase
|
||||
{
|
||||
int bank_4k = 0;
|
||||
|
||||
|
||||
private byte ReadMem(ushort addr, bool peek)
|
||||
{
|
||||
if (!peek)
|
||||
{
|
||||
Address(addr);
|
||||
}
|
||||
|
||||
if (addr < 0x1000) return base.ReadMemory(addr);
|
||||
return core.rom[(bank_4k << 12) + (addr & 0xFFF)];
|
||||
}
|
||||
|
||||
public override byte ReadMemory(ushort addr)
|
||||
{
|
||||
Address(addr);
|
||||
if (addr < 0x1000) return base.ReadMemory(addr);
|
||||
return core.rom[(bank_4k << 12) + (addr&0xFFF)];
|
||||
return ReadMem(addr, false);
|
||||
}
|
||||
|
||||
public override byte PeekMemory(ushort addr)
|
||||
{
|
||||
return ReadMem(addr, true);
|
||||
}
|
||||
|
||||
public override void WriteMemory(ushort addr, byte value)
|
||||
{
|
||||
Address(addr);
|
||||
|
|
|
@ -22,19 +22,41 @@ namespace BizHawk.Emulation.Consoles.Atari._2600
|
|||
int toggle = 0;
|
||||
ByteBuffer aux_ram = new ByteBuffer(256);
|
||||
|
||||
private byte ReadMem(ushort addr, bool peek)
|
||||
{
|
||||
if (!peek)
|
||||
{
|
||||
Address(addr);
|
||||
}
|
||||
|
||||
if (addr < 0x1000)
|
||||
{
|
||||
return base.ReadMemory(addr);
|
||||
}
|
||||
else if (addr < 0x1100)
|
||||
{
|
||||
return 0xFF;
|
||||
}
|
||||
else if (addr < 0x1200)
|
||||
{
|
||||
return aux_ram[addr & 0xFF];
|
||||
}
|
||||
else
|
||||
{
|
||||
return core.rom[(toggle * 4096) + (addr & 0xFFF)];
|
||||
}
|
||||
}
|
||||
|
||||
public override byte ReadMemory(ushort addr)
|
||||
{
|
||||
Address(addr);
|
||||
|
||||
if (addr < 0x1000)
|
||||
return base.ReadMemory(addr);
|
||||
else if (addr < 0x1100)
|
||||
return 0xFF;
|
||||
else if (addr < 0x1200)
|
||||
return aux_ram[addr & 0xFF];
|
||||
else
|
||||
return core.rom[(toggle * 4 * 1024) + (addr & 0xFFF)];
|
||||
return ReadMem(addr, false);
|
||||
}
|
||||
|
||||
public override byte PeekMemory(ushort addr)
|
||||
{
|
||||
return ReadMem(addr, true);
|
||||
}
|
||||
|
||||
public override void WriteMemory(ushort addr, byte value)
|
||||
{
|
||||
Address(addr);
|
||||
|
|
|
@ -19,12 +19,27 @@ namespace BizHawk.Emulation.Consoles.Atari._2600
|
|||
{
|
||||
int toggle = 0;
|
||||
|
||||
private byte ReadMem(ushort addr, bool peek)
|
||||
{
|
||||
if (!peek)
|
||||
{
|
||||
Address(addr);
|
||||
}
|
||||
|
||||
if (addr < 0x1000) return base.ReadMemory(addr);
|
||||
return core.rom[toggle * 4096 + (addr & 0xFFF)];
|
||||
}
|
||||
|
||||
public override byte ReadMemory(ushort addr)
|
||||
{
|
||||
Address(addr);
|
||||
if (addr < 0x1000) return base.ReadMemory(addr);
|
||||
return core.rom[toggle * 4 * 1024 + (addr & 0xFFF)];
|
||||
return ReadMem(addr, false);
|
||||
}
|
||||
|
||||
public override byte PeekMemory(ushort addr)
|
||||
{
|
||||
return ReadMem(addr, true);
|
||||
}
|
||||
|
||||
public override void WriteMemory(ushort addr, byte value)
|
||||
{
|
||||
Address(addr);
|
||||
|
|
|
@ -40,9 +40,13 @@ namespace BizHawk.Emulation.Consoles.Atari._2600
|
|||
{
|
||||
int rombank_2k = 0;
|
||||
|
||||
public override byte ReadMemory(ushort addr)
|
||||
private byte ReadMem(ushort addr, bool peek)
|
||||
{
|
||||
Address(addr);
|
||||
if (!peek)
|
||||
{
|
||||
Address(addr);
|
||||
}
|
||||
|
||||
if (addr < 0x1000)
|
||||
{
|
||||
return base.ReadMemory(addr);
|
||||
|
@ -52,6 +56,17 @@ namespace BizHawk.Emulation.Consoles.Atari._2600
|
|||
return core.rom[(rombank_2k << 12) + (addr & 0xFFF)];
|
||||
}
|
||||
}
|
||||
|
||||
public override byte ReadMemory(ushort addr)
|
||||
{
|
||||
return ReadMem(addr, false);
|
||||
}
|
||||
|
||||
public override byte PeekMemory(ushort addr)
|
||||
{
|
||||
return ReadMem(addr, true);
|
||||
}
|
||||
|
||||
public override void WriteMemory(ushort addr, byte value)
|
||||
{
|
||||
Address(addr);
|
||||
|
|
|
@ -3030,8 +3030,6 @@ namespace BizHawk.MultiClient
|
|||
Global.Sound.UpdateSilence();
|
||||
}
|
||||
|
||||
|
||||
|
||||
/// <summary>
|
||||
/// Update all tools that are frame dependent like Ram Search before processing
|
||||
/// </summary>
|
||||
|
|
Loading…
Reference in New Issue