diff --git a/BizHawk.Emulation/Consoles/PC Engine/Input.cs b/BizHawk.Emulation/Consoles/PC Engine/Input.cs index 820bfb7794..3832094d78 100644 --- a/BizHawk.Emulation/Consoles/PC Engine/Input.cs +++ b/BizHawk.Emulation/Consoles/PC Engine/Input.cs @@ -6,7 +6,14 @@ new ControllerDefinition { Name = "PC Engine Controller", - BoolButtons = { "Up", "Down", "Left", "Right", "II", "I", "Select", "Run" } + BoolButtons = + { + "P1 Up", "P1 Down", "P1 Left", "P1 Right", "P1 B2", "P1 B1", "P1 Select", "P1 Run", + "P2 Up", "P2 Down", "P2 Left", "P2 Right", "P2 B2", "P2 B1", "P2 Select", "P2 Run", + "P3 Up", "P3 Down", "P3 Left", "P3 Right", "P3 B2", "P3 B1", "P3 Select", "P3 Run", + "P4 Up", "P4 Down", "P4 Left", "P4 Right", "P4 B2", "P4 B1", "P4 Select", "P4 Run", + "P5 Up", "P5 Down", "P5 Left", "P5 Right", "P5 B2", "P5 B1", "P5 Select", "P5 Run" + } }; public ControllerDefinition ControllerDefinition { get { return PCEngineController; } } @@ -40,21 +47,21 @@ string input = "|"; - if (Controller.IsPressed("Up")) input += "U"; + if (Controller.IsPressed("P1 Up")) input += "U"; else input += "."; - if (Controller.IsPressed("Down")) input += "D"; + if (Controller.IsPressed("P1 Down")) input += "D"; else input += "."; - if (Controller.IsPressed("Left")) input += "L"; + if (Controller.IsPressed("P1 Left")) input += "L"; else input += "."; - if (Controller.IsPressed("Right")) input += "R"; + if (Controller.IsPressed("P1 Right")) input += "R"; else input += "."; - if (Controller.IsPressed("I")) input += "1"; + if (Controller.IsPressed("P1 B1")) input += "1"; else input += "."; - if (Controller.IsPressed("II")) input += "2"; + if (Controller.IsPressed("P1 B2")) input += "2"; else input += "."; - if (Controller.IsPressed("Select")) input += "S"; + if (Controller.IsPressed("P1 Select")) input += "S"; else input += "."; - if (Controller.IsPressed("Run")) input += "R"; + if (Controller.IsPressed("P1 Run")) input += "R"; else input += "."; input += "|.|"; //TODO: Add commands like reset here @@ -62,32 +69,46 @@ return input; } - private byte inputSelector; - public bool SEL { get { return ((inputSelector & 1) != 0) ;} } - + private int SelectedController; + private byte InputByte; + public bool SEL { get { return ((InputByte & 1) != 0) ;} } + public bool CLR { get { return ((InputByte & 2) != 0); } } + private void WriteInput(byte value) { - inputSelector = value; + bool prevSEL = SEL; + InputByte = value; + if (CLR == false && prevSEL == false && SEL == true) + SelectedController = (SelectedController + 1) % 6; } private byte ReadInput() { - byte value = 0xBF; - if (SEL == false) // return buttons + byte value = 0x3F; + if (CLR == false && SelectedController != 0) { - if (Controller["I"]) value &= 0xFE; - if (Controller["II"]) value &= 0xFD; - if (Controller["Select"]) value &= 0xFB; - if (Controller["Run"]) value &= 0xF7; - } else { //return directions - if (Controller["Up"]) value &= 0xFE; - if (Controller["Right"]) value &= 0xFD; - if (Controller["Down"]) value &= 0xFB; - if (Controller["Left"]) value &= 0xF7; + if (SEL == false) // return buttons + { + if (Controller["P" + SelectedController + " B1"]) value &= 0xFE; + if (Controller["P" + SelectedController + " B2"]) value &= 0xFD; + if (Controller["P" + SelectedController + " Select"]) value &= 0xFB; + if (Controller["P" + SelectedController + " Run"]) value &= 0xF7; + } + else + { + //return directions + if (Controller["P" + SelectedController + " Up"]) value &= 0xFE; + if (Controller["P" + SelectedController + " Right"]) value &= 0xFD; + if (Controller["P" + SelectedController + " Down"]) value &= 0xFB; + if (Controller["P" + SelectedController + " Left"]) value &= 0xF7; + } } if (Region == "Japan") value |= 0x40; + if (Type != NecSystemType.TurboCD) + value |= 0x80; + return value; } } diff --git a/BizHawk.Emulation/Consoles/PC Engine/PCEngine.cs b/BizHawk.Emulation/Consoles/PC Engine/PCEngine.cs index b1185ee3c1..1aa0c933d2 100644 --- a/BizHawk.Emulation/Consoles/PC Engine/PCEngine.cs +++ b/BizHawk.Emulation/Consoles/PC Engine/PCEngine.cs @@ -100,6 +100,7 @@ namespace BizHawk.Emulation.Consoles.TurboGrafx public void FrameAdvance(bool render) { Controller.UpdateControls(Frame++); + SelectedController = 0; PSG.BeginFrame(Cpu.TotalExecutedCycles); if (SuperGrafx) diff --git a/BizHawk.MultiClient/MainForm.cs b/BizHawk.MultiClient/MainForm.cs index 843c99b2aa..a1f900b17e 100644 --- a/BizHawk.MultiClient/MainForm.cs +++ b/BizHawk.MultiClient/MainForm.cs @@ -278,17 +278,17 @@ namespace BizHawk.MultiClient Global.SMSControls = smsControls; var pceControls = new Controller(PCEngine.PCEngineController); - for (int i = 0; i < 1 /*TODO*/; i++) + for (int i = 0; i < 5; i++) { - pceControls.BindMulti("Up", Global.Config.PCEController[i].Up); - pceControls.BindMulti("Down", Global.Config.PCEController[i].Down); - pceControls.BindMulti("Left", Global.Config.PCEController[i].Left); - pceControls.BindMulti("Right", Global.Config.PCEController[i].Right); + pceControls.BindMulti("P"+(i+1)+" Up", Global.Config.PCEController[i].Up); + pceControls.BindMulti("P"+(i+1)+" Down", Global.Config.PCEController[i].Down); + pceControls.BindMulti("P"+(i+1)+" Left", Global.Config.PCEController[i].Left); + pceControls.BindMulti("P"+(i+1)+" Right", Global.Config.PCEController[i].Right); - pceControls.BindMulti("II", Global.Config.PCEController[i].II); - pceControls.BindMulti("I", Global.Config.PCEController[i].I); - pceControls.BindMulti("Select", Global.Config.PCEController[i].Select); - pceControls.BindMulti("Run", Global.Config.PCEController[i].Run); + pceControls.BindMulti("P"+(i+1)+" B2", Global.Config.PCEController[i].II); + pceControls.BindMulti("P"+(i+1)+" B1", Global.Config.PCEController[i].I); + pceControls.BindMulti("P"+(i+1)+" Select", Global.Config.PCEController[i].Select); + pceControls.BindMulti("P"+(i+1)+" Run", Global.Config.PCEController[i].Run); } Global.PCEControls = pceControls;