From 1dc8a00771bfb98957bbfd0fcce92da63ce66668 Mon Sep 17 00:00:00 2001 From: zeromus Date: Wed, 10 Dec 2014 23:43:11 +0000 Subject: [PATCH] psx - hook up a hardcoded dualshock input.. maybe some things are mismapped, dont know yet --- .../Consoles/Sony/PSX/Octoshock.cs | 68 ++++++++++- .../Consoles/Sony/PSX/OctoshockDll.cs | 26 ++++- output/defctrl.json | 43 ++++++- output/dll/octoshock.dll | Bin 961024 -> 963072 bytes psx/octoshock/psx/input/dualshock.cpp | 27 +++-- psx/octoshock/psx/psx.cpp | 106 ++++++++++++++++-- psx/octoshock/psx/psx.h | 26 ++++- 7 files changed, 265 insertions(+), 31 deletions(-) diff --git a/BizHawk.Emulation.Cores/Consoles/Sony/PSX/Octoshock.cs b/BizHawk.Emulation.Cores/Consoles/Sony/PSX/Octoshock.cs index fa4743348c..6eeb983f3a 100644 --- a/BizHawk.Emulation.Cores/Consoles/Sony/PSX/Octoshock.cs +++ b/BizHawk.Emulation.Cores/Consoles/Sony/PSX/Octoshock.cs @@ -1,6 +1,7 @@ //TODO hook up newer file ID stuff, think about how to combine it with the disc ID //TODO change display manager to not require 0xFF alpha channel set on videoproviders. check gdi+ and opengl! this will get us a speedup in some places //TODO Disc.Structure.Sessions[0].length_aba was 0 +//TODO disc lights using System; using System.Runtime.InteropServices; @@ -22,7 +23,31 @@ namespace BizHawk.Emulation.Cores.Sony.PSX public unsafe class Octoshock : IEmulator, IVideoProvider, ISoundProvider { public string SystemId { get { return "NULL"; } } - public static readonly ControllerDefinition NullController = new ControllerDefinition { Name = "Null Controller" }; + + public static readonly ControllerDefinition DualShockController = new ControllerDefinition + { + Name = "DualShock Controller", + BoolButtons = + { + "Up", "Down", "Left", "Right", + "Select", "Start", + "Square", "Triangle", "Circle", "Cross", + "L1", "R1", "L2", "R2", "L3", "R3", + "MODE", + }, + FloatControls = + { + "LStick X", "LStick Y", + "RStick X", "RStick Y", + }, + FloatRanges = + { + new[] {0.0f, 128.0f, 255.0f}, + new[] {255.0f, 128.0f, 0.0f}, + new[] {0.0f, 128.0f, 255.0f}, + new[] {255.0f, 128.0f, 0.0f}, + } + }; public string BoardName { get { return null; } } @@ -185,6 +210,7 @@ namespace BizHawk.Emulation.Cores.Sony.PSX OctoshockDll.shock_OpenTray(psx); OctoshockDll.shock_SetDisc(psx, discInterface.OctoshockHandle); OctoshockDll.shock_CloseTray(psx); + OctoshockDll.shock_Peripheral_Connect(psx, 0x01, OctoshockDll.ePeripheralType.DualShock); OctoshockDll.shock_PowerOn(psx); } @@ -219,8 +245,43 @@ namespace BizHawk.Emulation.Cores.Sony.PSX Frame = 0; } + void SetInput() + { + uint buttons = 0; + + //dualshock style + if(Controller["Select"]) buttons |= 1; + if (Controller["L3"]) buttons |= 2; + if (Controller["R3"]) buttons |= 4; + if (Controller["Start"]) buttons |= 8; + if (Controller["Up"]) buttons |= 16; + if (Controller["Right"]) buttons |= 32; + if (Controller["Down"]) buttons |= 64; + if (Controller["Left"]) buttons |= 128; + if (Controller["L2"]) buttons |= 256; + if (Controller["R2"]) buttons |= 512; + if (Controller["L1"]) buttons |= 1024; + if (Controller["R1"]) buttons |= 2048; + if (Controller["Triangle"]) buttons |= 4096; + if (Controller["Circle"]) buttons |= 8192; + if (Controller["Cross"]) buttons |= 16384; + if (Controller["Square"]) buttons |= 32768; + if (Controller["MODE"]) buttons |= 65536; + + byte left_x = (byte)Controller.GetFloat("LStick X"); + byte left_y = (byte)Controller.GetFloat("LStick Y"); + byte right_x = (byte)Controller.GetFloat("RStick X"); + byte right_y = (byte)Controller.GetFloat("RStick Y"); + + OctoshockDll.shock_Peripheral_SetPadInput(psx, 0x01, buttons, left_x, left_y, right_x, right_y); + } + public void FrameAdvance(bool render, bool rendersound) { + Frame++; + + SetInput(); + OctoshockDll.shock_Step(psx, OctoshockDll.eShockStep.Frame); OctoshockDll.ShockFramebufferInfo fb = new OctoshockDll.ShockFramebufferInfo(); @@ -251,10 +312,7 @@ namespace BizHawk.Emulation.Cores.Sony.PSX } } - [FeatureNotImplemented] - public ControllerDefinition ControllerDefinition { get { return NullController; } } - - [FeatureNotImplemented] + public ControllerDefinition ControllerDefinition { get { return DualShockController; } } public IController Controller { get; set; } public int Frame diff --git a/BizHawk.Emulation.Cores/Consoles/Sony/PSX/OctoshockDll.cs b/BizHawk.Emulation.Cores/Consoles/Sony/PSX/OctoshockDll.cs index f8f7fa7358..f31b9935db 100644 --- a/BizHawk.Emulation.Cores/Consoles/Sony/PSX/OctoshockDll.cs +++ b/BizHawk.Emulation.Cores/Consoles/Sony/PSX/OctoshockDll.cs @@ -1,5 +1,4 @@ -//API TODO -//get rid of the 2048 byte reader +//TODO - make sure msvc builds with 32bit enums and get rid of the extra marshalling fluff here using System; using System.Runtime.InteropServices; @@ -25,9 +24,21 @@ public unsafe static class OctoshockDll Normalize = 1 } + public enum ePeripheralType + { + None = 0, //can be used to signify disconnection + + Pad = 1, //SCPH-1080 + DualShock = 2, //SCPH-1200 + DualAnalog = 3, //SCPH-1180 + + Multitap = 10, + }; + public const int SHOCK_OK = 0; public const int SHOCK_ERROR = -1; public const int SHOCK_NOCANDO = -2; + public const int SHOCK_INVALID_ADDRESS = -3; [StructLayout(LayoutKind.Sequential)] public struct ShockDiscInfo @@ -82,6 +93,17 @@ public unsafe static class OctoshockDll [DllImport("octoshock.dll")] public static extern int shock_Destroy(IntPtr psx); + [DllImport("octoshock.dll")] + + public static extern int shock_Peripheral_Connect( + IntPtr psx, + int address, + [MarshalAs(UnmanagedType.I4)] ePeripheralType type + ); + + [DllImport("octoshock.dll")] + public static extern int shock_Peripheral_SetPadInput(IntPtr psx, int address, uint buttons, byte left_x, byte left_y, byte right_x, byte right_y); + [DllImport("octoshock.dll")] public static extern int shock_PowerOn(IntPtr psx); diff --git a/output/defctrl.json b/output/defctrl.json index c5806beb5a..8233f41aaf 100644 --- a/output/defctrl.json +++ b/output/defctrl.json @@ -629,6 +629,25 @@ "P2 A": "", "Power": "" }, + "DualShock Controller": { + "Up": "X1 DpadUp,UpArrow", + "Down": "X1 DpadDown,DownArrow", + "Left": "X1 DpadLeft,LeftArrow", + "Right": "X1 DpadRight,RightArrow", + "Select": "X1 Back,Space", + "Start": "X1 Start,Return", + "Square": "X1 X,A", + "Triangle": "X1 Y,S", + "Circle": "X1 B,X", + "Cross": "X1 A,Z", + "L1": "X1 LeftShoulder,Q", + "R1": "X1 RightShoulder,W", + "L2": "X1 LeftTrigger,E", + "R2": "X1 RightTrigger,R", + "L3": "X1 LeftThumb,T", + "R3": "X1 RightThumb,Y", + "MODE": "A" + }, "Lynx Controller": { "Up": "UpArrow", "Down": "DownArrow", @@ -942,6 +961,28 @@ } }, "WonderSwan Controller": {}, - "Lynx Controller": {} + "Lynx Controller": {}, + "DualShock Controller": { + "LStick X": { + "Value": "X1 LeftThumbX", + "Mult": 1.0, + "Deadzone": 0.1 + }, + "LStick Y": { + "Value": "X1 LeftThumbY", + "Mult": 1.0, + "Deadzone": 0.1 + }, + "RStick X": { + "Value": "X1 RightThumbX", + "Mult": 1.0, + "Deadzone": 0.1 + }, + "RStick Y": { + "Value": "X1 RightThumbY", + "Mult": 1.0, + "Deadzone": 0.1 + } + } } } \ No newline at end of file diff --git a/output/dll/octoshock.dll b/output/dll/octoshock.dll index 82e973c11151a1c7a2a7ef9863ffd40d2bd6cae9..a18d029c1b82e07f04f14c61ea00ae4eb069c7bc 100644 GIT binary patch delta 69000 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 z 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⪫sl!acfTpv8PMxF3 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 diff --git a/psx/octoshock/psx/input/dualshock.cpp b/psx/octoshock/psx/input/dualshock.cpp index 994227533e..f1847e9587 100644 --- a/psx/octoshock/psx/input/dualshock.cpp +++ b/psx/octoshock/psx/input/dualshock.cpp @@ -291,19 +291,24 @@ void InputDevice_DualShock::UpdateInput(const void *data) buttons[1] = d8[1]; cur_ana_button_state = d8[2] & 0x01; - for(int stick = 0; stick < 2; stick++) - { - for(int axis = 0; axis < 2; axis++) - { - const uint8* aba = &d8[3] + stick * 8 + axis * 4; - int32 tmp; + //OCTOSHOCK EDIT - so we can set values directly + //for(int stick = 0; stick < 2; stick++) + //{ + // for(int axis = 0; axis < 2; axis++) + // { + // //const uint8* aba = &d8[3] + stick * 8 + axis * 4; + // //int32 tmp; - tmp = 32767 + MDFN_de16lsb(&aba[0]) - MDFN_de16lsb(&aba[2]); - tmp = (tmp * 0x100) / 0xFFFF; + // //tmp = 32767 + MDFN_de16lsb(&aba[0]) - MDFN_de16lsb(&aba[2]); + // //tmp = (tmp * 0x100) / 0xFFFF; + // + // } + //} + axes[0][0] = d8[3]; + axes[0][1] = d8[4]; + axes[1][0] = d8[5]; + axes[1][1] = d8[6]; - axes[stick][axis] = tmp; - } - } //printf("%3d:%3d, %3d:%3d\n", axes[0][0], axes[0][1], axes[1][0], axes[1][1]); diff --git a/psx/octoshock/psx/psx.cpp b/psx/octoshock/psx/psx.cpp index 5e82bbc6d7..3b53173714 100644 --- a/psx/octoshock/psx/psx.cpp +++ b/psx/octoshock/psx/psx.cpp @@ -1323,6 +1323,98 @@ struct ShockState bool power; } s_ShockState; + +struct ShockPeripheral +{ + ePeripheralType type; + u8 buffer[16]; +}; + +struct { + + ShockPeripheral ports[2]; + + void Initialize() + { + for(int i=0;i<2;i++) + { + ports[i].type = ePeripheralType_None; + memset(ports[i].buffer,0,sizeof(ports[i].buffer)); + } + } + + s32 Connect(s32 address, s32 type) + { + //check the port address + int portnum = address&1; + if(portnum != 1 && portnum != 2) + return SHOCK_INVALID_ADDRESS; + portnum--; + + //check whats already there + if(ports[portnum].type == ePeripheralType_None && type == ePeripheralType_None) return SHOCK_OK; //NOP + if(ports[portnum].type != ePeripheralType_None && type != ePeripheralType_None) return SHOCK_NOCANDO; //cant re-connect something without disconnecting first + + //disconnecting: + if(type == ePeripheralType_None) { + ports[portnum].type = ePeripheralType_None; + memset(ports[portnum].buffer,0,sizeof(ports[portnum].buffer)); + FIO->SetInput(portnum, "none", ports[portnum].buffer); + return SHOCK_OK; + } + + //connecting: + const char* name = NULL; + switch(type) + { + case ePeripheralType_Pad: name = "gamepad"; break; + case ePeripheralType_DualShock: name = "dualshock"; break; + case ePeripheralType_DualAnalog: name = "dualanalog"; break; + default: + return SHOCK_ERROR; + } + ports[portnum].type = (ePeripheralType)type; + memset(ports[portnum].buffer,0,sizeof(ports[portnum].buffer)); + FIO->SetInput(portnum, name, ports[portnum].buffer); + + return SHOCK_OK; + } + + s32 SetPadInput(s32 address, u32 buttons, u8 left_x, u8 left_y, u8 right_x, u8 right_y) + { + //check the port address + int portnum = address&1; + if(portnum != 1 && portnum != 2) + return SHOCK_INVALID_ADDRESS; + portnum--; + + u8* buf = ports[portnum].buffer; + switch(ports[portnum].type) + { + case ePeripheralType_DualShock: + buf[0] = (buttons>>0)&0xFF; + buf[1] = (buttons>>8)&0xFF; + buf[2] = (buttons>>16)&0xFF; //this is only the analog mode button + buf[3] = left_x; + buf[4] = left_y; + buf[3] = right_x; + buf[4] = right_y; + break; + } + } + +} s_ShockPeripheralState; + +EW_EXPORT s32 shock_Peripheral_Connect(void* psx, s32 address, s32 type) +{ + return s_ShockPeripheralState.Connect(address,type); +} + +EW_EXPORT s32 shock_Peripheral_SetPadInput(void* psx, s32 address, u32 buttons, u8 left_x, u8 left_y, u8 right_x, u8 right_y) +{ + return s_ShockPeripheralState.SetPadInput(address, buttons, left_x, left_y, right_x, right_y); +} + static void MountCPUAddressSpace() { for(uint32 ma = 0x00000000; ma < 0x00800000; ma += 2048 * 1024) @@ -1350,7 +1442,7 @@ static bool s_FramebufferNormalized; static int s_FramebufferCurrent; static int s_FramebufferCurrentWidth; -EW_EXPORT s32 shock_Create(void** psx, eRegion region, void* firmware512k) +EW_EXPORT s32 shock_Create(void** psx, s32 region, void* firmware512k) { //NEW *psx = NULL; @@ -1413,6 +1505,7 @@ EW_EXPORT s32 shock_Create(void** psx, eRegion region, void* firmware512k) static bool emulate_memcard[8] = {0}; static bool emulate_multitap[2] = {0}; FIO = new FrontIO(emulate_memcard, emulate_multitap); + s_ShockPeripheralState.Initialize(); MountCPUAddressSpace(); @@ -2188,15 +2281,6 @@ static void CloseGame(void) Cleanup(); } - -static void SetInput(int port, const char *type, void *ptr) -{ - if(psf_loader) - FIO->SetInput(port, "none", NULL); - else - FIO->SetInput(port, type, ptr); -} - static int StateAction(StateMem *sm, int load, int data_only) { @@ -3080,4 +3164,4 @@ s32 ShockDiscRef::ReadLBA2048(s32 lba, void* dst2048) memcpy(dst2048,xasector.form1.data2048,2048); return sector.mode; -} \ No newline at end of file +} diff --git a/psx/octoshock/psx/psx.h b/psx/octoshock/psx/psx.h index 1a08371e51..8f1a9de946 100644 --- a/psx/octoshock/psx/psx.h +++ b/psx/octoshock/psx/psx.h @@ -131,6 +131,17 @@ enum eShockFramebufferFlags eShockFramebufferFlags_Normalize = 1 }; +enum ePeripheralType +{ + ePeripheralType_None = 0, //can be used to signify disconnection + + ePeripheralType_Pad = 1, //SCPH-1080 + ePeripheralType_DualShock = 2, //SCPH-1200 + ePeripheralType_DualAnalog = 3, //SCPH-1180 + + ePeripheralType_Multitap = 10, +}; + enum eShockSetting { REGION_AUTODETECT = 0, @@ -152,6 +163,7 @@ int shock_GetSetting(eShockSetting setting); #define SHOCK_OK 0 #define SHOCK_ERROR -1 #define SHOCK_NOCANDO -2 +#define SHOCK_INVALID_ADDRESS -3 struct ShockTOCTrack { @@ -230,11 +242,23 @@ EW_EXPORT s32 shock_AnalyzeDisc(ShockDiscRef* disc, ShockDiscInfo* info); //Creates the psx instance as a console of the specified region. //Additionally mounts the firmware from the provided buffer (the contents are copied) //TODO - receive a model number parameter instead -EW_EXPORT s32 shock_Create(void** psx, eRegion region, void* firmware512k); +EW_EXPORT s32 shock_Create(void** psx, s32 region, void* firmware512k); //Frees the psx instance created with shock_Create EW_EXPORT s32 shock_Destroy(void* psx); +//Attaches (or detaches) a peripheral at the given address. +//Send ePeripheralType_None to detach. +//Do not attach when something is already attached. +//You can detach when nothing is attached. +//Returns SHOCK_NOCANDO if something inappropriate is done. +//Presently this has only been validated as functioning correctly before the initial PowerOn, but we would like to use it other times. +EW_EXPORT s32 shock_Peripheral_Connect(void* psx, s32 address, s32 type); + +//Sets pad-type input (pad,dualshock,dualanalog) on the specified address; +//Read more about the input format (buttons, analog range) here: TBD +EW_EXPORT s32 shock_Peripheral_SetPadInput(void* psx, s32 address, u32 buttons, u8 left_x, u8 left_y, u8 right_x, u8 right_y); + //Sets the power to ON. Returns SHOCK_NOCANDO if already on. EW_EXPORT s32 shock_PowerOn(void* psx);