113 lines
3.0 KiB
C#
113 lines
3.0 KiB
C#
/*
|
|
* Machine2600.cs
|
|
*
|
|
* The realization of a 2600 machine.
|
|
*
|
|
* Copyright © 2003, 2004 Mike Murphy
|
|
*
|
|
*/
|
|
namespace EMU7800.Core
|
|
{
|
|
public class Machine2600 : MachineBase
|
|
{
|
|
#region Fields
|
|
|
|
protected TIA TIA { get; set; }
|
|
|
|
#endregion
|
|
|
|
public override void Reset()
|
|
{
|
|
base.Reset();
|
|
TIA.Reset();
|
|
PIA.Reset();
|
|
CPU.Reset();
|
|
}
|
|
|
|
public override void ComputeNextFrame(FrameBuffer frameBuffer)
|
|
{
|
|
base.ComputeNextFrame(frameBuffer);
|
|
TIA.StartFrame();
|
|
CPU.RunClocks = (FrameBuffer.Scanlines + 3) * 76;
|
|
while (CPU.RunClocks > 0 && !CPU.Jammed)
|
|
{
|
|
if (TIA.WSYNCDelayClocks > 0)
|
|
{
|
|
CPU.Clock += (ulong)TIA.WSYNCDelayClocks / 3;
|
|
CPU.RunClocks -= TIA.WSYNCDelayClocks / 3;
|
|
TIA.WSYNCDelayClocks = 0;
|
|
}
|
|
if (TIA.EndOfFrame)
|
|
{
|
|
break;
|
|
}
|
|
CPU.Execute();
|
|
}
|
|
TIA.EndFrame();
|
|
}
|
|
|
|
public Machine2600(Cart cart, ILogger logger, int slines, int startl, int fHZ, int sRate, int[] p)
|
|
: base(logger, slines, startl, fHZ, sRate, p, 160)
|
|
{
|
|
Mem = new AddressSpace(this, 13, 6); // 2600: 13bit, 64byte pages
|
|
|
|
CPU = new M6502(this, 1);
|
|
|
|
TIA = new TIA(this);
|
|
for (ushort i = 0; i < 0x1000; i += 0x100)
|
|
{
|
|
Mem.Map(i, 0x0080, TIA);
|
|
}
|
|
|
|
PIA = new PIA(this);
|
|
for (ushort i = 0x0080; i < 0x1000; i += 0x100)
|
|
{
|
|
Mem.Map(i, 0x0080, PIA);
|
|
}
|
|
|
|
Cart = cart;
|
|
Mem.Map(0x1000, 0x1000, Cart);
|
|
}
|
|
|
|
#region Serialization Members
|
|
|
|
public Machine2600(DeserializationContext input, int[] palette) : base(input, palette)
|
|
{
|
|
input.CheckVersion(1);
|
|
|
|
Mem = input.ReadAddressSpace(this, 13, 6); // 2600: 13bit, 64byte pages
|
|
|
|
CPU = input.ReadM6502(this, 1);
|
|
|
|
TIA = input.ReadTIA(this);
|
|
for (ushort i = 0; i < 0x1000; i += 0x100)
|
|
{
|
|
Mem.Map(i, 0x0080, TIA);
|
|
}
|
|
|
|
PIA = input.ReadPIA(this);
|
|
for (ushort i = 0x0080; i < 0x1000; i += 0x100)
|
|
{
|
|
Mem.Map(i, 0x0080, PIA);
|
|
}
|
|
|
|
Cart = input.ReadCart(this);
|
|
Mem.Map(0x1000, 0x1000, Cart);
|
|
}
|
|
|
|
public override void GetObjectData(SerializationContext output)
|
|
{
|
|
base.GetObjectData(output);
|
|
|
|
output.WriteVersion(1);
|
|
output.Write(Mem);
|
|
output.Write(CPU);
|
|
output.Write(TIA);
|
|
output.Write(PIA);
|
|
output.Write(Cart);
|
|
}
|
|
|
|
#endregion
|
|
}
|
|
}
|