126 lines
3.9 KiB
C#
126 lines
3.9 KiB
C#
using BizHawk.Emulation.Common;
|
|
|
|
namespace BizHawk.Emulation.Cores.ColecoVision
|
|
{
|
|
public partial class ColecoVision
|
|
{
|
|
public static readonly ControllerDefinition ColecoVisionControllerDefinition = new ControllerDefinition
|
|
{
|
|
Name = "ColecoVision Basic Controller",
|
|
BoolButtons =
|
|
{
|
|
"P1 Up", "P1 Down", "P1 Left", "P1 Right",
|
|
"P1 L", "P1 R",
|
|
"P1 Key 0", "P1 Key 1", "P1 Key 2", "P1 Key 3", "P1 Key 4", "P1 Key 5",
|
|
"P1 Key 6", "P1 Key 7", "P1 Key 8", "P1 Key 9", "P1 Star", "P1 Pound",
|
|
|
|
"P2 Up", "P2 Down", "P2 Left", "P2 Right",
|
|
"P2 L", "P2 R",
|
|
"P2 Key 0", "P2 Key 1", "P2 Key 2", "P2 Key 3", "P2 Key 4", "P2 Key 5",
|
|
"P2 Key 6", "P2 Key 7", "P2 Key 8", "P2 Key 9", "P2 Star", "P2 Pound"
|
|
}
|
|
};
|
|
|
|
public ControllerDefinition ControllerDefinition { get { return ColecoVisionControllerDefinition; } }
|
|
public IController Controller { get; set; }
|
|
|
|
enum InputPortMode { Left, Right }
|
|
InputPortMode InputPortSelection;
|
|
|
|
byte ReadController1()
|
|
{
|
|
isLag = false;
|
|
|
|
if (InputPortSelection == InputPortMode.Left)
|
|
{
|
|
byte retval = 0x7F;
|
|
if (Controller["P1 Up"]) retval &= 0xFE;
|
|
if (Controller["P1 Right"]) retval &= 0xFD;
|
|
if (Controller["P1 Down"]) retval &= 0xFB;
|
|
if (Controller["P1 Left"]) retval &= 0xF7;
|
|
if (Controller["P1 L"]) retval &= 0x3F;
|
|
return retval;
|
|
}
|
|
|
|
if (InputPortSelection == InputPortMode.Right)
|
|
{
|
|
byte retval = 0;
|
|
|
|
// 0x00;
|
|
if (Controller["P1 Key 8"]) retval = 0x01;
|
|
if (Controller["P1 Key 4"]) retval = 0x02;
|
|
if (Controller["P1 Key 5"]) retval = 0x03;
|
|
// 0x04;
|
|
if (Controller["P1 Key 7"]) retval = 0x05;
|
|
if (Controller["P1 Pound"]) retval = 0x06;
|
|
if (Controller["P1 Key 2"]) retval = 0x07;
|
|
// 0x08;
|
|
if (Controller["P1 Star"]) retval = 0x09;
|
|
if (Controller["P1 Key 0"]) retval = 0x0A;
|
|
if (Controller["P1 Key 9"]) retval = 0x0B;
|
|
if (Controller["P1 Key 3"]) retval = 0x0C;
|
|
if (Controller["P1 Key 1"]) retval = 0x0D;
|
|
if (Controller["P1 Key 6"]) retval = 0x0E;
|
|
|
|
if (Controller["P1 R"] == false) retval |= 0x40;
|
|
retval |= 0x30; // always set these bits
|
|
return retval;
|
|
}
|
|
|
|
return 0x7F;
|
|
}
|
|
|
|
|
|
byte ReadController2()
|
|
{
|
|
isLag = false;
|
|
|
|
if (InputPortSelection == InputPortMode.Left)
|
|
{
|
|
byte retval = 0x7F;
|
|
if (Controller["P2 Up"]) retval &= 0xFE;
|
|
if (Controller["P2 Right"]) retval &= 0xFD;
|
|
if (Controller["P2 Down"]) retval &= 0xFB;
|
|
if (Controller["P2 Left"]) retval &= 0xF7;
|
|
if (Controller["P2 L"]) retval &= 0x3F;
|
|
return retval;
|
|
}
|
|
|
|
if (InputPortSelection == InputPortMode.Right)
|
|
{
|
|
byte retval = 0;
|
|
|
|
// 0x00;
|
|
if (Controller["P2 Key8"]) retval = 0x01;
|
|
if (Controller["P2 Key4"]) retval = 0x02;
|
|
if (Controller["P2 Key5"]) retval = 0x03;
|
|
// 0x04;
|
|
if (Controller["P2 Key7"]) retval = 0x05;
|
|
if (Controller["P2 Pound"]) retval = 0x06;
|
|
if (Controller["P2 Key2"]) retval = 0x07;
|
|
// 0x08;
|
|
if (Controller["P2 Star"]) retval = 0x09;
|
|
if (Controller["P2 Key0"]) retval = 0x0A;
|
|
if (Controller["P2 Key9"]) retval = 0x0B;
|
|
if (Controller["P2 Key3"]) retval = 0x0C;
|
|
if (Controller["P2 Key1"]) retval = 0x0D;
|
|
if (Controller["P2 Key6"]) retval = 0x0E;
|
|
|
|
if (Controller["P2 R"] == false) retval |= 0x40;
|
|
retval |= 0x30; // always set these bits
|
|
return retval;
|
|
}
|
|
|
|
return 0x7F;
|
|
}
|
|
|
|
public int Frame { get { return frame; } set { frame = value; } }
|
|
public int LagCount { get { return lagCount; } set { lagCount = value; } }
|
|
public bool IsLagFrame { get { return isLag; } }
|
|
|
|
int frame;
|
|
int lagCount = 0;
|
|
bool isLag = true;
|
|
}
|
|
}
|