diff --git a/BizHawk.Emulation/BizHawk.Emulation.csproj b/BizHawk.Emulation/BizHawk.Emulation.csproj
index b82a14a5ea..aa88aed485 100644
--- a/BizHawk.Emulation/BizHawk.Emulation.csproj
+++ b/BizHawk.Emulation/BizHawk.Emulation.csproj
@@ -100,8 +100,8 @@
-
-
+
+
@@ -111,10 +111,12 @@
+
+
diff --git a/BizHawk.Emulation/Computers/Commodore64/Experimental/C64.Glue.cs b/BizHawk.Emulation/Computers/Commodore64/Experimental/C64.Glue.cs
index a1440806c3..84cb6681af 100644
--- a/BizHawk.Emulation/Computers/Commodore64/Experimental/C64.Glue.cs
+++ b/BizHawk.Emulation/Computers/Commodore64/Experimental/C64.Glue.cs
@@ -5,7 +5,7 @@ using System.Text;
namespace BizHawk.Emulation.Computers.Commodore64.Experimental
{
- public abstract partial class C64
+ public sealed partial class C64
{
public void InitializeConnections()
{
diff --git a/BizHawk.Emulation/Computers/Commodore64/Experimental/C64.cs b/BizHawk.Emulation/Computers/Commodore64/Experimental/C64.cs
index 43e56d840f..cd297cd942 100644
--- a/BizHawk.Emulation/Computers/Commodore64/Experimental/C64.cs
+++ b/BizHawk.Emulation/Computers/Commodore64/Experimental/C64.cs
@@ -6,26 +6,26 @@ using System.Text;
namespace BizHawk.Emulation.Computers.Commodore64.Experimental
{
- public abstract partial class C64 : IMotherboard
+ public sealed partial class C64 : IMotherboard
{
- protected Rom basicRom;
- protected Cassette cassette;
- protected Rom characterRom;
- protected Cia cia1;
- protected Cia cia2;
- protected Ram colorRam;
- protected Cpu cpu;
- protected Expansion expansion;
- protected Joystick joystickA;
- protected Joystick joystickB;
- protected Rom kernalRom;
- protected Keyboard keyboard;
- protected Ram memory;
- protected Pla pla;
- protected Serial serial;
- protected Sid sid;
- protected Userport user;
- protected Vic vic;
+ public Rom basicRom;
+ public Cassette cassette;
+ public Rom characterRom;
+ public Cia cia1;
+ public Cia cia2;
+ public Ram colorRam;
+ public Cpu cpu;
+ public Expansion expansion;
+ public Joystick joystickA;
+ public Joystick joystickB;
+ public Rom kernalRom;
+ public Keyboard keyboard;
+ public Ram memory;
+ public Pla pla;
+ public Serial serial;
+ public Sid sid;
+ public Userport user;
+ public Vic vic;
public C64(C64Timing timing)
{
diff --git a/BizHawk.Emulation/Computers/Commodore64/Experimental/C64NTSC.cs b/BizHawk.Emulation/Computers/Commodore64/Experimental/C64NTSC.cs
deleted file mode 100644
index a158322a6f..0000000000
--- a/BizHawk.Emulation/Computers/Commodore64/Experimental/C64NTSC.cs
+++ /dev/null
@@ -1,18 +0,0 @@
-using BizHawk.Emulation.Computers.Commodore64.Experimental.Chips;
-using BizHawk.Emulation.Computers.Commodore64.Experimental.Chips.Internals;
-using System;
-using System.Collections.Generic;
-using System.Linq;
-using System.Text;
-
-namespace BizHawk.Emulation.Computers.Commodore64.Experimental
-{
- public partial class C64NTSC : C64
- {
- static private C64Timing timing = null;
-
- public C64NTSC(byte[] basicRom, byte[] charRom, byte[] kernalRom) : base(timing)
- {
- }
- }
-}
diff --git a/BizHawk.Emulation/Computers/Commodore64/Experimental/C64PAL.cs b/BizHawk.Emulation/Computers/Commodore64/Experimental/C64PAL.cs
deleted file mode 100644
index 5394636364..0000000000
--- a/BizHawk.Emulation/Computers/Commodore64/Experimental/C64PAL.cs
+++ /dev/null
@@ -1,37 +0,0 @@
-using BizHawk.Emulation.Computers.Commodore64.Experimental.Chips;
-using BizHawk.Emulation.Computers.Commodore64.Experimental.Chips.Internals;
-using System;
-using System.Collections.Generic;
-using System.Linq;
-using System.Text;
-
-namespace BizHawk.Emulation.Computers.Commodore64.Experimental
-{
- public partial class C64PAL : C64
- {
- static private C64Timing timing = null;
-
- public C64PAL(byte[] basic, byte[] kernal, byte[] character) : base(timing)
- {
- this.basicRom = Presets.Rom2364(basic);
- this.cassette = new Cassette();
- this.characterRom = Presets.Rom2332(character);
- this.cia1 = Presets.Cia6526(true);
- this.cia2 = Presets.Cia6526(true);
- this.colorRam = Presets.Ram2114();
- this.cpu = new Cpu();
- this.expansion = new Expansion();
- this.joystickA = new Joystick();
- this.joystickB = new Joystick();
- this.kernalRom = Presets.Rom2364(kernal);
- this.keyboard = new Keyboard();
- this.memory = Presets.Ram4864();
- this.pla = new Pla();
- this.serial = new Serial();
- this.sid = Presets.Sid6581();
- this.user = new Userport();
- this.vic = Presets.Vic6569();
- InitializeConnections();
- }
- }
-}
diff --git a/BizHawk.Emulation/Computers/Commodore64/Experimental/C64Presets.NTSC.cs b/BizHawk.Emulation/Computers/Commodore64/Experimental/C64Presets.NTSC.cs
new file mode 100644
index 0000000000..f5562b7fac
--- /dev/null
+++ b/BizHawk.Emulation/Computers/Commodore64/Experimental/C64Presets.NTSC.cs
@@ -0,0 +1,42 @@
+using BizHawk.Emulation.Computers.Commodore64.Experimental.Chips;
+using BizHawk.Emulation.Computers.Commodore64.Experimental.Chips.Internals;
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+
+namespace BizHawk.Emulation.Computers.Commodore64.Experimental
+{
+ static public partial class C64ChipPresets
+ {
+ static public C64 NTSC(byte[] basic, byte[] kernal, byte[] character)
+ {
+ C64 result = new C64(NTSCTiming());
+ result.basicRom = ChipPresets.Rom2364(basic);
+ result.cassette = new Cassette();
+ result.characterRom = ChipPresets.Rom2332(character);
+ result.cia1 = ChipPresets.Cia6526(true);
+ result.cia2 = ChipPresets.Cia6526(true);
+ result.colorRam = ChipPresets.Ram2114();
+ result.cpu = new Cpu();
+ result.expansion = new Expansion();
+ result.joystickA = new Joystick();
+ result.joystickB = new Joystick();
+ result.kernalRom = ChipPresets.Rom2364(kernal);
+ result.keyboard = new Keyboard();
+ result.memory = ChipPresets.Ram4864();
+ result.pla = new Pla();
+ result.serial = new Serial();
+ result.sid = ChipPresets.Sid6581();
+ result.user = new Userport();
+ result.vic = ChipPresets.Vic6567();
+ result.InitializeConnections();
+ return result;
+ }
+
+ static public C64Timing NTSCTiming()
+ {
+ return new C64Timing();
+ }
+ }
+}
diff --git a/BizHawk.Emulation/Computers/Commodore64/Experimental/C64Presets.PAL.cs b/BizHawk.Emulation/Computers/Commodore64/Experimental/C64Presets.PAL.cs
new file mode 100644
index 0000000000..a033e1d7d0
--- /dev/null
+++ b/BizHawk.Emulation/Computers/Commodore64/Experimental/C64Presets.PAL.cs
@@ -0,0 +1,42 @@
+using BizHawk.Emulation.Computers.Commodore64.Experimental.Chips;
+using BizHawk.Emulation.Computers.Commodore64.Experimental.Chips.Internals;
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+
+namespace BizHawk.Emulation.Computers.Commodore64.Experimental
+{
+ static public partial class C64ChipPresets
+ {
+ static public C64 PAL(byte[] basic, byte[] kernal, byte[] character)
+ {
+ C64 result = new C64(PALTiming());
+ result.basicRom = ChipPresets.Rom2364(basic);
+ result.cassette = new Cassette();
+ result.characterRom = ChipPresets.Rom2332(character);
+ result.cia1 = ChipPresets.Cia6526(true);
+ result.cia2 = ChipPresets.Cia6526(true);
+ result.colorRam = ChipPresets.Ram2114();
+ result.cpu = new Cpu();
+ result.expansion = new Expansion();
+ result.joystickA = new Joystick();
+ result.joystickB = new Joystick();
+ result.kernalRom = ChipPresets.Rom2364(kernal);
+ result.keyboard = new Keyboard();
+ result.memory = ChipPresets.Ram4864();
+ result.pla = new Pla();
+ result.serial = new Serial();
+ result.sid = ChipPresets.Sid6581();
+ result.user = new Userport();
+ result.vic = ChipPresets.Vic6569();
+ result.InitializeConnections();
+ return result;
+ }
+
+ static public C64Timing PALTiming()
+ {
+ return new C64Timing();
+ }
+ }
+}
diff --git a/BizHawk.Emulation/Computers/Commodore64/Experimental/Chips/Internals/Vic.Graphics.cs b/BizHawk.Emulation/Computers/Commodore64/Experimental/Chips/Internals/Vic.Graphics.cs
new file mode 100644
index 0000000000..84a69cca05
--- /dev/null
+++ b/BizHawk.Emulation/Computers/Commodore64/Experimental/Chips/Internals/Vic.Graphics.cs
@@ -0,0 +1,112 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+
+namespace BizHawk.Emulation.Computers.Commodore64.Experimental.Chips.Internals
+{
+ sealed public partial class Vic
+ {
+ const int GRAPHICS_DATA_OUTPUT_MASK = 0xC000;
+ const int GRAPHICS_DATA_INPUT_SHIFT = 16;
+
+ enum GraphicsMode
+ {
+ Mode000,
+ Mode001,
+ Mode010,
+ Mode011,
+ Mode100,
+ Mode101,
+ Mode110,
+ Mode111
+ }
+
+ int g_BufferC;
+ int g_BufferG;
+ int g_DataC;
+ int g_DataG;
+ int g_FillRasterX;
+ GraphicsMode g_Mode;
+ int g_OutData;
+ int g_OutPixel;
+ int g_ShiftRegister;
+
+ void RenderG()
+ {
+ if ((rasterX & 0x7) == g_FillRasterX)
+ {
+ g_DataC = g_BufferC;
+
+ if (multiColorMode && (bitmapMode || (g_DataC & 0x8) != 0))
+ {
+ // load multicolor bits
+ g_ShiftRegister =
+ ((g_DataG & 0x03) << 0) |
+ ((g_DataG & 0x0C) << 2) |
+ ((g_DataG & 0x30) << 4) |
+ ((g_DataG & 0xC0) << 6)
+ ;
+
+ // duplicate bits
+ g_ShiftRegister |= g_ShiftRegister << 2;
+ }
+ else
+ {
+ // load single color bits
+ g_ShiftRegister =
+ ((g_DataG & 0x01) << 1) |
+ ((g_DataG & 0x02) << 2) |
+ ((g_DataG & 0x04) << 3) |
+ ((g_DataG & 0x08) << 4) |
+ ((g_DataG & 0x10) << 5) |
+ ((g_DataG & 0x20) << 6) |
+ ((g_DataG & 0x40) << 7) |
+ ((g_DataG & 0x80) << 8)
+ ;
+ }
+ }
+
+ switch (g_Mode)
+ {
+ default:
+
+ break;
+ case GraphicsMode.Mode001:
+ break;
+ case GraphicsMode.Mode010:
+ break;
+ case GraphicsMode.Mode011:
+ break;
+ case GraphicsMode.Mode100:
+ break;
+ case GraphicsMode.Mode101:
+ break;
+ case GraphicsMode.Mode110:
+ break;
+ case GraphicsMode.Mode111:
+ break;
+ }
+ }
+
+ void UpdateGraphicsMode()
+ {
+ if (!extraColorMode && !bitmapMode && !multiColorMode)
+ g_Mode = GraphicsMode.Mode000;
+ else if (!extraColorMode && !bitmapMode && multiColorMode)
+ g_Mode = GraphicsMode.Mode001;
+ else if (!extraColorMode && bitmapMode && !multiColorMode)
+ g_Mode = GraphicsMode.Mode010;
+ else if (!extraColorMode && bitmapMode && multiColorMode)
+ g_Mode = GraphicsMode.Mode011;
+ else if (extraColorMode && !bitmapMode && !multiColorMode)
+ g_Mode = GraphicsMode.Mode100;
+ else if (extraColorMode && !bitmapMode && multiColorMode)
+ g_Mode = GraphicsMode.Mode101;
+ else if (extraColorMode && bitmapMode && !multiColorMode)
+ g_Mode = GraphicsMode.Mode110;
+ else if (extraColorMode && bitmapMode && multiColorMode)
+ g_Mode = GraphicsMode.Mode111;
+ }
+ }
+}
diff --git a/BizHawk.Emulation/Computers/Commodore64/Experimental/Chips/Internals/Vic.Interface.cs b/BizHawk.Emulation/Computers/Commodore64/Experimental/Chips/Internals/Vic.Interface.cs
index 0ec208232c..1be2fbbf1b 100644
--- a/BizHawk.Emulation/Computers/Commodore64/Experimental/Chips/Internals/Vic.Interface.cs
+++ b/BizHawk.Emulation/Computers/Commodore64/Experimental/Chips/Internals/Vic.Interface.cs
@@ -21,13 +21,10 @@ namespace BizHawk.Emulation.Computers.Commodore64.Experimental.Chips.Internals
public bool OutputIRQ() { return true; }
// exposed internal data
- public int Address { get { return 0x3FFF; } }
- public int CharacterData { get { return 0xFF; } }
- public int ColorData { get { return 0xFFF; } }
+ public int Address { get { return address; } }
public int CyclesPerFrame { get { return rasterCount * rasterWidth / 8; } }
public int CyclesPerSecond { get { return frequency; } }
- public int Data { get { return 0xFF; } }
- public int DataPhi1 { get { return 0xFF; } }
- public int GraphicsData { get { return 0xFF; } }
+ public int Data { get { return data; } }
+ public int DataPhi1 { get { return phi1Data; } }
}
}
diff --git a/BizHawk.Emulation/Computers/Commodore64/Experimental/Chips/Internals/Vic.Internal.cs b/BizHawk.Emulation/Computers/Commodore64/Experimental/Chips/Internals/Vic.Internal.cs
index bd09f910e3..407c26eb95 100644
--- a/BizHawk.Emulation/Computers/Commodore64/Experimental/Chips/Internals/Vic.Internal.cs
+++ b/BizHawk.Emulation/Computers/Commodore64/Experimental/Chips/Internals/Vic.Internal.cs
@@ -7,18 +7,23 @@ namespace BizHawk.Emulation.Computers.Commodore64.Experimental.Chips.Internals
{
sealed public partial class Vic
{
+ int address;
+ bool aec;
+ bool ba;
+ int data;
+ int phi1Data;
+ int rasterX;
+
public Vic(VicSettings settings)
{
- backgroundColor = new int[4];
- sprites = new Sprite[8];
- frequency = 0;
- rasterCount = 0;
- rasterWidth = 0;
- rasterY = 0;
- screenHeight = 0;
- screenWidth = 0;
- spriteMultiColor = new int[2];
- videoBuffer = new int[screenHeight * screenWidth];
+ }
+
+ public void Clock()
+ {
+ }
+
+ public void Reset()
+ {
}
}
}
diff --git a/BizHawk.Emulation/Computers/Commodore64/Experimental/Chips/Internals/Vic.Settings.cs b/BizHawk.Emulation/Computers/Commodore64/Experimental/Chips/Internals/Vic.Settings.cs
index 58b8e5d909..e222828152 100644
--- a/BizHawk.Emulation/Computers/Commodore64/Experimental/Chips/Internals/Vic.Settings.cs
+++ b/BizHawk.Emulation/Computers/Commodore64/Experimental/Chips/Internals/Vic.Settings.cs
@@ -5,7 +5,7 @@ using System.Text;
namespace BizHawk.Emulation.Computers.Commodore64.Experimental.Chips.Internals
{
- public class VicSettings
+ sealed public class VicSettings
{
}
}
diff --git a/BizHawk.Emulation/Computers/Commodore64/Experimental/Chips/Internals/Vic.Sprite.cs b/BizHawk.Emulation/Computers/Commodore64/Experimental/Chips/Internals/Vic.Sprite.cs
index c70bf5151d..f7933425f7 100644
--- a/BizHawk.Emulation/Computers/Commodore64/Experimental/Chips/Internals/Vic.Sprite.cs
+++ b/BizHawk.Emulation/Computers/Commodore64/Experimental/Chips/Internals/Vic.Sprite.cs
@@ -23,6 +23,18 @@ namespace BizHawk.Emulation.Computers.Commodore64.Experimental.Chips.Internals
public Sprite()
{
}
+
+ public void Clock()
+ {
+ }
+
+ public void LoadP(int value)
+ {
+ }
+
+ public void LoadS(int value)
+ {
+ }
}
}
diff --git a/BizHawk.Emulation/Computers/Commodore64/Experimental/Chips/Internals/Vic.Synth.cs b/BizHawk.Emulation/Computers/Commodore64/Experimental/Chips/Internals/Vic.Synth.cs
new file mode 100644
index 0000000000..221917fa96
--- /dev/null
+++ b/BizHawk.Emulation/Computers/Commodore64/Experimental/Chips/Internals/Vic.Synth.cs
@@ -0,0 +1,11 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+
+namespace BizHawk.Emulation.Computers.Commodore64.Experimental.Chips.Internals
+{
+ sealed public partial class Vic
+ {
+ }
+}
diff --git a/BizHawk.Emulation/Computers/Commodore64/Experimental/Chips/Internals/Vic.Timing.cs b/BizHawk.Emulation/Computers/Commodore64/Experimental/Chips/Internals/Vic.Timing.cs
index b10538847f..cac3182bbc 100644
--- a/BizHawk.Emulation/Computers/Commodore64/Experimental/Chips/Internals/Vic.Timing.cs
+++ b/BizHawk.Emulation/Computers/Commodore64/Experimental/Chips/Internals/Vic.Timing.cs
@@ -5,9 +5,78 @@ using System.Text;
namespace BizHawk.Emulation.Computers.Commodore64.Experimental.Chips.Internals
{
+ sealed public class VicColumnState
+ {
+ public VicBAType BA;
+ public VicFetchType Fetch;
+ public bool HBlank;
+ public int RasterX;
+ }
+
+ public enum VicActType
+ {
+ None,
+ SpriteDMA,
+ SpriteExpandY,
+ RCAdvance,
+ RasterAdvance,
+ RasterAdvanceBottom,
+ VCReset,
+ }
+
+ public enum VicBAType
+ {
+ None,
+ Badline,
+ Sprite0,
+ Sprite01,
+ Sprite012,
+ Sprite12,
+ Sprite123,
+ Sprite23,
+ Sprite234,
+ Sprite34,
+ Sprite345,
+ Sprite45,
+ Sprite456,
+ Sprite56,
+ Sprite567,
+ Sprite67,
+ Sprite7
+ }
+
+ public enum VicFetchType
+ {
+ None,
+ Graphics,
+ Color,
+ Idle,
+ Refresh,
+ Sprite,
+ Pointer
+ }
+
+ public enum VicRowType
+ {
+ None,
+ ScreenVisible,
+ ScreenBlank,
+ ResetVCBase
+ }
+
+ sealed public class VicTiming
+ {
+ public int ColumnCount;
+ public int DelayColumn;
+ public int RasterAdvanceColumn;
+ public int RasterCount;
+ public int RasterWidth;
+ }
sealed public partial class Vic
{
int frequency;
+ VicColumnState[] pipelineColumns;
+ VicRowType[] pipelineRows;
int rasterCount;
int rasterWidth;
}
diff --git a/BizHawk.Emulation/Computers/Commodore64/Experimental/Chips/Presets.cs b/BizHawk.Emulation/Computers/Commodore64/Experimental/Chips/Presets.cs
index 9052308c07..26534f2b1a 100644
--- a/BizHawk.Emulation/Computers/Commodore64/Experimental/Chips/Presets.cs
+++ b/BizHawk.Emulation/Computers/Commodore64/Experimental/Chips/Presets.cs
@@ -6,7 +6,7 @@ using System.Text;
namespace BizHawk.Emulation.Computers.Commodore64.Experimental.Chips
{
- static public class Presets
+ static public class ChipPresets
{
static public Cia Cia6526(bool todJumper) { return new Cia(Settings6526(todJumper)); }
static public Cia Cia6526A(bool todJumper) { return new Cia(Settings6526A(todJumper)); }