commodore64: add support for joystick ports 1 and 2
This commit is contained in:
parent
6097111bad
commit
f3e27b7677
|
@ -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);
|
||||
|
|
|
@ -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)
|
||||
|
|
|
@ -28,5 +28,10 @@ namespace BizHawk.Emulation.Computers.Commodore64
|
|||
_data |= (value & Direction);
|
||||
}
|
||||
}
|
||||
|
||||
public void ForceSetData(byte newData)
|
||||
{
|
||||
_data = newData;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue