commodore64: add support for joystick ports 1 and 2

This commit is contained in:
saxxonpike 2012-11-08 21:12:33 +00:00
parent 6097111bad
commit f3e27b7677
3 changed files with 34 additions and 3 deletions

View File

@ -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);

View File

@ -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)

View File

@ -28,5 +28,10 @@ namespace BizHawk.Emulation.Computers.Commodore64
_data |= (value & Direction);
}
}
public void ForceSetData(byte newData)
{
_data = newData;
}
}
}