From f3e27b7677c33f52eabcea4d649c79598cebaff6 Mon Sep 17 00:00:00 2001 From: saxxonpike Date: Thu, 8 Nov 2012 21:12:33 +0000 Subject: [PATCH] commodore64: add support for joystick ports 1 and 2 --- .../Computers/Commodore64/C64.core.cs | 22 +++++++++++++++++++ .../Computers/Commodore64/C64.cs | 10 ++++++--- .../Computers/Commodore64/DataPort.cs | 5 +++++ 3 files changed, 34 insertions(+), 3 deletions(-) diff --git a/BizHawk.Emulation/Computers/Commodore64/C64.core.cs b/BizHawk.Emulation/Computers/Commodore64/C64.core.cs index 24d8423fb9..88de3372f4 100644 --- a/BizHawk.Emulation/Computers/Commodore64/C64.core.cs +++ b/BizHawk.Emulation/Computers/Commodore64/C64.core.cs @@ -9,6 +9,9 @@ namespace BizHawk.Emulation.Computers.Commodore64 { public partial class C64 : IEmulator { + // input + private IController controller; + // source public Cartridge cart; public string extension; @@ -18,6 +21,8 @@ namespace BizHawk.Emulation.Computers.Commodore64 // chipset public Cia cia0; public Cia cia1; + public byte cia0portAData; + public byte cia0portBData; public MOS6502X cpu; public Memory mem; public Sid sid; @@ -93,6 +98,23 @@ namespace BizHawk.Emulation.Computers.Commodore64 // todo } + public void PollInput() + { + cia0portAData = 0xFF; + cia0portBData = 0xFF; + + if (Controller["P1 Up"]) cia0portBData &= 0xFE; + if (Controller["P1 Down"]) cia0portBData &= 0xFD; + if (Controller["P1 Left"]) cia0portBData &= 0xFB; + if (Controller["P1 Right"]) cia0portBData &= 0xF7; + if (Controller["P1 Button"]) cia0portBData &= 0xEF; + if (Controller["P2 Up"]) cia0portAData &= 0xFE; + if (Controller["P2 Down"]) cia0portAData &= 0xFD; + if (Controller["P2 Left"]) cia0portAData &= 0xFB; + if (Controller["P2 Right"]) cia0portAData &= 0xF7; + if (Controller["P2 Button"]) cia0portAData &= 0xEF; + } + public byte ReadMemory(ushort addr) { return mem.Read(addr); diff --git a/BizHawk.Emulation/Computers/Commodore64/C64.cs b/BizHawk.Emulation/Computers/Commodore64/C64.cs index 85182764a7..96e828dc85 100644 --- a/BizHawk.Emulation/Computers/Commodore64/C64.cs +++ b/BizHawk.Emulation/Computers/Commodore64/C64.cs @@ -54,7 +54,7 @@ namespace BizHawk.Emulation.Computers.Commodore64 public void SaveStateBinary(BinaryWriter bw) { } //TODO public void LoadStateBinary(BinaryReader br) { } //TODO public ControllerDefinition ControllerDefinition { get { return C64ControllerDefinition; } } - public IController Controller { get; set; } + public IController Controller { get { return controller; } set { controller = value; } } public static readonly ControllerDefinition C64ControllerDefinition = new ControllerDefinition { Name = "Commodore 64 Controller", //TODO @@ -87,7 +87,7 @@ namespace BizHawk.Emulation.Computers.Commodore64 _frame++; _islag = true; - int cyclesPerSecond = (14318181 / 14 / 60); + const int cyclesPerFrame = (14318181 / 14 / 60); foreach (IMedia media in mediaAttached) { @@ -97,8 +97,12 @@ namespace BizHawk.Emulation.Computers.Commodore64 } } - for (int i = 0; i < cyclesPerSecond; i++) + PollInput(); + + for (int i = 0; i < cyclesPerFrame; i++) { + mem.cia0PortA.Data = cia0portAData; + mem.cia0PortB.Data = cia0portBData; cpu.IRQ = signal.CpuIRQ; cpu.NMI = signal.CpuNMI; if (signal.CpuAEC) diff --git a/BizHawk.Emulation/Computers/Commodore64/DataPort.cs b/BizHawk.Emulation/Computers/Commodore64/DataPort.cs index f9c0cbbcbc..55bc750e19 100644 --- a/BizHawk.Emulation/Computers/Commodore64/DataPort.cs +++ b/BizHawk.Emulation/Computers/Commodore64/DataPort.cs @@ -28,5 +28,10 @@ namespace BizHawk.Emulation.Computers.Commodore64 _data |= (value & Direction); } } + + public void ForceSetData(byte newData) + { + _data = newData; + } } }