October 11, 2011 // 3:38 pm
- Today Hazer
has updated his ongoing PS3 SixAxis controller mod project and shared both a video below and schematics on making the PlayStation 3 controller fully remappable!
Download: PS3 Remap Controller User Guide
(PDF) / PS3 Remap v1.0
To quote: Hello everyone, I am glad to introduce the long awaited PS3 Remappable controller. This project started with the express intention of granting Chuck Bittner
his desire to remap the buttons on a standard controller.
With this controller, Chuck will be able to remap the buttons on any current and past game that he normally would have to pass on due to the ergonomics of the default button layout. But his petition is much more important than that, as it will allow stock controllers the same ability for all games in the future. So please visit his petition (petitiononline.com/cu5t0m/petition.html) and support the cause.
OK. Now onto the main event! I have spent better than 6 months of late nights (I dont have free time before 10PM) getting this modification to work just right. I have made the decision not only to make the first controller for Chuck, but I am also releasing the files neded for other modders to make thier own, or use it for other abled gamers.
In the past, my work has been raped/bunked/stolen as others work and this made me ponder if I should make this mod public or not. My compromise is this: I will release the hex files and the utility and the schematics, but the source code will remain my own. The mod will function as intended without giving anyone the hard work I put in to make a rapidfire and profit from me again.
If they want to market the remap as is, thats fine by me. This modification is difficult enough, it probably should be left in the hands of professional modders to perform. Which brings up the next point:
THE DIFFICULTY OF THIS MOD IS HIGHER THAN NORMAL. IT REQUIRES CUTTING TRACES AND SOLDERING TO VIAS. AS SUCH, PERFORMING THIS MOD IS AT YOUR OWN RISK AND ACIDMODS AND I TAKE NO RESPONSIBILITY FOR ANY DAMAGE THAT MAY OCCUR.
So, the reverse engineering of monitoring the button signals and then having the PIC replicate the signals correctly was a good adventure. First up (for the technically inclined) is that this mod uses the PIC18F14K50 and a modified bootloader to hold the firmware.
The bootlaoder was modified to use only one LED and keep the outputs in a safe condition for the PS3 controller during firmware updates. Then came the modding: The LED was installed into the PS3 button using a dual red/green SMD.
The tact button for enabling the bootloader and getting the controller into USB mode was installed on the top of the controller:
The USB port was fashioned from a 2.5mm plug and jack. The finished product was very sleek looking (too bad the tact looks ugly).
I know what your thinking: Why not use the USB port on the controller? I did not fully test the possibility, but there is a chance that wiring both USB ports together could result in either the PIC getting reallt messed up while your chargin the PS3, or you could lose the ability to charge your PS3 from now on. The PS3 requires a USB pre-amble to charge from the USB port.
You cannot simply use a 5V source with a USB cable end. The PS3 will shut itself off if it does not get the proper communication protocol when it needs to charge. So on to the wire tidying:
I really should have just etched a SMD PCB to get this all in, but I thought I was saving time by free-handing the entire circuit (I was wrong):
In the end, we now have the final mod for Chuck Bittner. A quick demo (video below).
Here is the main schematic. It shows the components leading to the points on the PS3 PCB:
Here are the PCB points on the V35X board: (pictures credit to RDC (really, who else?))
and the VX3.0
Once installed, the buttons are disconnected from the PS3 main inputs and the PIC then deciphers the remapping stored in EEPROM and sends out the new signals. This means you can map any button to any other button. You can make all the buttons be DPAD up if you want (but you never should). Another feature is the Toggle/Hold function. You can set the button to toggle its new mapping instead of direct remap.
By this I mean you tap the button to make the function turn on and stay on as if you were holding the button down indefinately, and another quick tap would turn the function off. This should help greatly with sight-aiming. One downfall of this mod is that the buttons are originally analog/pressure sensitive.
The PIC is programmed to create digital signals, so there is no intermediate values. Remember this for driving games. Another feature is that you can adjust the pressure needed for the PIC to see a button press. You can make the controller very sensitive, or require a good tap to register presses, its your choice.
The following buttons are the ones that can be remapped to each other: X, Circle, Trianlge, Square, R1, R2, L1, L2, DPAD up, DPAD down, DPAD right, DPAD left, right stick click (R3), and left stick click (L3). The analog sticks were left alone (sorry, no southpaw).
The user guide and zip file with all schematics and the PC utility can be downloaded (above).
This has been installed on my own V3.5X Dualshock that I am donating to Chuck. Modded Matt is in the process of testing one of the other versions.
In final mentioning, the bootloader has made it possible to fix any bugs that may be found in the future. It also means that if a remapping feature can be improved, I can create the firmware and it can be added without opening the controller. I will not be adding macros or rapidfire though. If I did that, this would simply not be public in any form or manner. Sorry, I have fed the Ebayers enough already.
And Chuck, I hope this controller helps in some small way, and is a good crutch until they finally make it so that the controller is remappable through the PS3 dashboard.
In related news, below is an XBox 360 Controller on PS3 with CFW by rz2p
, as follows:
Hi, I've searched around on the topic but haven't found anything recent.
Is there any interest in making some kind of Xbox 360 (wired) controller driver for the PS3?
There seems to be a few working ones for different platforms already:
Xpad - Native Linux driver(which I think would be the easiest way to go): github.com/torvalds/linux/blob/master/drivers/input/joystick/xpad.c
OSX Driver: github.com/d235j/360Controller
There's also this here: pingus.seul.org/~grumbel/xboxdrv/
It wouldn't even matter to me if I had to run an app everytime my ps3 starts to activate the driver. Maybe even have the 360 controller in slot 2 and program that slot with the driver.. whatever.
If you search on the internet you will find lots of people who don't like the feel of the PS3 remote and are looking for a way to do this (and likewise of course, people trying to use ps3 on the xbox). But to some people, if they can't get comfortable, then they can't enjoy it.
I'm not trying to bash the PS3 controller, to each their own, but I think there are a lot of people that would really love to see something like this, you would be a boss.
I can't really help as far as building the driver, but I can help with anything else if needed, I am on 4.66 habib.. lol.
Also, I don't want to get into an argument over this and I already have a CronusMAX but it's totally wack and t-o-t-a-l-l-y has lag. Not very much, but playing racing games makes it noticeable when timing is everything.
This needs more testing but I made a sprx xpad driver for ps3. Not all games will work with it but most should. Currently it only supports wired Xbox 360 controllers. I may include wireless Xbox 360 & Xbox One controllers later if people are interested.
Also there is no rumble for now. (Need to find a way to grab actuator params from games). The Xbox button maps to the PS button and LEDs correspond to the port number it's connected to.
Note: PlayStation DS2 and DS3 controllers have pressure sensitive buttons while Xbox 360 controllers do not. This may make some games like Metal Gear Solid unplayable. Sixaxis is obviously unsupported too.
Thanks for reading.
: PS3XPAD Plugin v0.2 is now available from OsirisX
followed by v0.3 with details below.
(Mirror) / ps3xpad_0.2.zip
(Mirror #2) / ps3xpad_0.3.zip
Here is a new release which includes some third party controllers like the Razer Onza. Also as verified by malckdaddy the plugin seems to load better with prxloader rather than boot_plugins.txt method.
According to OsirisX, this currently works with Official 360 controllers and some third party controllers such as the Razer Onza. The Xbox button is mapped to the PS Button and it’s LEDs equate to the port the controller is connected to.
Along with not having wireless support at the moment, there is no rumble support yet either. It is important to also remember that Dualshock controllers have pressure sensitive buttons and Xbox360/One controllers don’t or they have a limited number of them, which can effect game play and support.
For one reason or another this may not work with every game, but it’s a good start.
Sorry for the wait guys. My receiver finally came in yesterday and took me about a day to make the changes. You can connect a maximum of 4 wireless controllers with one receiver.
The release includes both wired (xpad.sprx) and wireless (xpadw.sprx) plugins. Use each one accordingly. Please update if you were using an older version of xpad since this release includes some minor bug fixes.
There was an error setting some controller parameters such as data length. Some games didn't like it and wouldn't respond to controller input. There were also some other memory optimizations.
I still need to tidy up the source code before I release it. I'll probably post it on github once I get the chance.
Yes you can but both the wired controller and receiver must be physically connected before the plugins are loaded. And there is no rumble support in this release.
I've added all controller receivers that the original linux xpad driver accepts (there were only 2).
The problem is games like Guitar Hero and Rock Band look for a particular pid/vid of a PS3 compatible guitar. That's how it detects if other peripherals are connected such as drums.
Correct me if I'm wrong but those games don't allow you to play in guitar mode unless a valid guitar controller is connected. Emulating a peripheral other than a standard PS3 controller is not possible at the moment because of this vid/pid validation.
Pressure sensitivity can be emulated. I'll have a new release soon which will simply map each button press to there max sensitivity value (except for L2 and R2). That should make games that require pressure sensitivity more stable.
I realize a lot of you are having trouble getting the plugin to work. Usually if you're getting the "unknown usb" error, that means the plugin has not loaded properly. You should be getting a "XPAD Loaded!" message if everything was setup correctly. Third party receivers should be working too.
This release combines both wired and wireless controllers into one plugin. This makes things easier for those who want to use both types of controllers. It's also easier to maintain code when everything is in one place.
Pressure sensitivity is now emulated where each button press (except for L2 and R2) maps to their max sensitivity value. This should make games that require pressure sensitivity more stable. Source code is also included in the package.
Spoofing a DS3 controller is sort of working already. The standard API call cellPadLddRegisterController allows a logical controller to be registered but with limited capability. That is the PS3 sees the logical controller as one with no six axis, no vibration, and no pressure sensitivity much like a generic gamepad.
Some games will simply disregard controllers that don't support all the necessary capabilities that it needs in the game. This is the reason why some games that require pressure sensitivity don't even accept input from generic gamepads.
Syscall 574 allows one to register a logical controller with custom capability. That is how I'm able to give an Xbox 360 controller emulated pressure sensitivity. Pressure sensitive games will see this logical controller as pressure sensitive capable and will accept input from the controller.
The same thing can be said for vibration. Some games though take it one step further in checking the gamepad and will not accept logical controllers. It checks to see if it is a standard controller. Is it possible to spoof a logical controller into a standard controller? Possibly through modifying lv2 memory and hooking a call where it registers a lld controller.
Also capturing and wrapping the vibration feed from games is what I meant by hooking the call in my previous post. The guide by therifboy shows a possible implementation of this but he intercepts calls from a VSH process (vsh.self). We will need to intercept vibration send calls (cellPadSetActDirect) from a game process where offsets are definitely different from game to game.
Another way is to see the stack trace after cellPadSetActDirect is called. Is it passed to some pad manager or does it go straight to the controller through some usb/bluetooth interface.
This release includes rumble support for games. It will require a little more setting up so I will explain in detail on how to install and run xpad with rumble.
Also included in this release is the option to add custom xpad device PID/VIDs. Only the official Xbox controller and receiver PID/VIDs are hardcoded. You will need to edit xpad_devices.txt for other devices.
Note: Not all third party controllers may work with this plugin.
Rumble support requires the xpad plugin to attach to the game's process so it can install hooks to receive rumble data. I will show two methods on how to do this.
1. You will need custom firmware with Cobra enabled. (Most newer CFWs have this)
2. Convert your game's EBOOT.BIN to debug EBOOT.BIN. There are multiple ways of doing this such as using TrueAncestor SELF Resigner
Note: Some games such as GTAIV will have more than one .BIN file. You will need to convert all .BIN files to debug
Method 1: Running XPAD with PRX Loader or Cobra boot_plugins + Button Combo. This method will run xpad first in VSH and then switch to a game after it has booted.
1. Copy the plugins folder to /dev_hdd0/. You should have the directory /dev_hdd0/plugins/ps3xpad/ with xpad_vsh.sprx, xpad_game.sprx and xpad_devices.txt in it.
Note: If you use gameDATA utility, you will need to transfer the folder after you enable gameDATA.
2. Add this line to plugins.txt if you're using PRX Loader or to boot_plugins.txt if you're using Cobra: /dev_hdd0/plugins/ps3xpad/xpad_vsh.sprx
3. Either reboot your PS3 or run PRX Loader to run the xpad plugin under VSH. You should be able to see the "XPAD Loaded (VSH)" message and your Xbox controller connected. You may need to sync your controller to the receiver if you're using a wireless controller.
4. Start your game and wait until it has fully booted.
5. Press (START+BACKBTN+R3). You should see a message displaying "XPAD Loaded (GAME)".
6. Wait a few seconds and your Xbox controller should be reconnected. If you're using a wireless controller, read the notes below on how to properly resync the controller using a button combo.
7. You should now be able to play your game with rumble enabled.
Method 2: Using Modified webMAN-MOD Plugin
1. Follow steps 1 and 2 of method 1.
2. Download my modified webMAN-MOD plugin. Be sure to select webman_server_rebug_cobra_ps3mapi.sprx if you're using Rebug CFW or webman_server_ps3mapi.sprx if you're using another CFW. I will use webman_server_rebug_cobra_ps3mapi.sprx as an example.
3. Copy webman_server_rebug_cobra_ps3mapi.sprx to /dev_hdd0/plugins/
4. Add this line to plugins.txt if you're using PRX Loader or to boot_plugins.txt if you're using Cobra: /dev_hdd0/plugins/webman_server_rebug_cobra_ps3mapi.sprx
5. Either reboot your PS3 or run PRX Loader to run webMAN.
6. Start your game and wait until it has fully booted.
7. Log on to webMAN with your browser using your PS3's IP address as the URL and click on the PS3MAPI tab.
8. Scroll down to the Game Plugins section and select your game's process. Usually it will have the name EBOOT in it. Click set.
9. You will get a page with all your game's plugins loaded. Go to the last free slot and enter /dev_hdd0/plugins/ps3xpad/xpad_game.sprx. Click on load.
10. Wait a few seconds and your Xbox controller should be connected.
Note: If you're using a wireless controller, you will need to re-sync using a button combo. Do this by pressing (START+BACKBTN+DPAD DOWN) and then holding the XBOX button for a couple seconds. Your wireless controller should then reconnect.
11. You should now be able to play your game with rumble enabled.
Note: If you have trouble getting your controller recognized in game, try reassigning your controller to different slots. You can do this by holding down the XBOX button and going to Controller Settings. Remember to use the button combo to load back the xpad plugin into VSH after quitting a game or you will have to reload the plugin manually.
Wireless Controller Notes: You may connect up to 4 wireless controllers with a single receiver.
If you're using a wireless controller, you will need to re-sync using a button combo each time you swith from VSH to GAME or from GAME to VSH. Do this by pressing (START+BACKBTN+DPAD_DOWN) and then holding the XBOX button for a couple seconds. Your wireless controller should then reconnect.
Controller button combo summary:
- (START+BACKBTN+R3) Switches xpad plugin between VSH proc and GAME proc.
- (START+BACKBTN+DPAD_DOWN) Disconnects wireless controller from receiver. Allows wireless controllers to be resynced.
- (START+BACKBTN+L3) Unloads xpad plugin.
Xbox One controllers will be integrated in the next release.
: Add into xpad_devices.txt
for supporting this device (Cyborg RumblePad):
[Register or Login to view code]
Works fine in Habib 4.75 v0.4 after 'step5' of 'method 2' in games too. Another steps not needed.
It is possible to remap six axis motion to different keys. I may make a release with this functionality at a later time.
Added Xbox One (wired) controller and PlayStation DualShock 4 (wired) controller support. Only wired connection for now, might add wireless support later on. The DualShock 4 controller driver enables rumble and six axis support.
It also increases compatibility of some games over the official driver. There is no trackpad support in this release but may possibly be added later.
: DS4 Six Axis sensors were about 4 times more sensitive than DS3s. I had to reduce it's sensitivity to make PS3 games compatible with the six axis. Also DS4 controller PID/VIDs are not hardcoded. You will need to have them in xpad_devices.txt. This gives the option to switch between official and unofficial driver when using the xpad plugin.
The install procedure is the same as my previous release.
: Maybe someone could be interested in continue this experiment: aldostools.org/temp/test/wmpad/main.c
I tried to integrate part of the code of ps3xpad into webMAN MOD to make it accept button commands (/pad.ps3?CROSS) via http server (like Movian does)...
Unfortunately I couldn't get it to work properly and I don't know what I'm doing wrong...
The related code is tagged as "VIRTUAL_PAD". Credits to OsirisX for the source code of ps3xpad.
: This will probably be my second approach if I cannot get the internal bluetooth to work. Unfortunately there's not much documentation for it and seems $ony keeps its bluetooth stack locked down. Only HID compliant devices such as mouse and keyboards are allowed to connect through.
It looks like syscalls 578 through 599 have to do with the bluetooth module but there's not much description for them according to ps3devwiki. I will have to reverse them myself to get other devices to connect. Most likely one of the syscalls is to register a device by PID/VID and another to register it's callback routines.
You're close. Right now you have it sending analog values for each button (0xFF or 0x00). I think most PS3 application respond only to digital values.
data.button[CELL_PAD_BTN_OFFSET_DIGITAL2] |= CELL_PAD_CTRL_CROSS; // cross button pressed
data.button[CELL_PAD_BTN_OFFSET_DIGITAL2] &= ~CELL_PAD_CTRL_CROSS; // cross button released
Button presses are mapped to DIGITAL2 offset while dpad presses map to DIGITAL1.
: Thank you for your tips... I've added the flags to DIGITAL1 and DIGITAL2, but it still didn't work
Here is the updated src: aldostools.org/temp/test/wmpad/main.c
I tested it sending only digital values, digital+analog and with various delays between press/release (50ms, 250ms, 0.5s, 1s)
I have noticed that if xy values for analog sticks are initialized with 0, the XMB scrolls up.