RPCS3
The Sony PlayStation 3 is PowerPC based and known to be a difficult machine to emulate.
RPCS3 does an awesome job at emulating most PS3 games.
It was initially written with x86 architecture in mind and now has native arm64 architecture support.
This means we can enjoy PS3 games on Apple's M-series computers natively.
Street Fighter III: 3rd Strike Online Edition
Street Fighter III: 3rd Strike Online Edition was released in 2011 on PlayStation Network and Xbox Live Arcade.
Sadly it's never had a physical release and hasn't been ported to any other platform.
I bought it on the PSN for €14.99 (transaction ID 2532199730) and kind of lost it when I sold my PS3.
This version of the game is my favorite because:
- it has a fantastic training mode that teaches you how to parry
- you can even train yourself to reproduce Evo Moment #37
TBH I've never succeeded… yet :)Done!
So I really missed it until I managed to get it running on my Mac via RPCS3 \o/
The next thing on my list was to plug a fight stick into my Mac.
Simple DirectMedia Layer (SDL)
Input devices supported by RPCS3 include SDL (Simple DirectMedia Layer).
SDL is a cross-platform development library designed to provide low level access to audio, keyboard, mouse, joystick, and graphics hardware.
It has an SDL_GameController API:
- which allows to determine that e.g. the left trigger on a controller is held down, no matter what controller/OS/driver is used
- basically, you have to map your controller's input to an Xbox-like controller layout using this API
A number of mappings are already gathered in a community sourced database:
- if no mapping for your controller is available, you'll have to do it yourself
- some GUI tools (like SDL2 Gamepad Tool) make this task easy
Hori Fighting Edge 4
My fight stick of choice is the Hori Fighting Edge 4.
Before being able to create a mapping for a controller, you have to check if it's compatible with your Mac.
When plugged to the Mac, you can check if you see your controller in the list of USB devices:
- via the GUI
/System/Applications/Utilities/System Information.app
or via the CLI
system_profiler SPUSBDataTypeFightingEdge4: Product ID: 0x00be Vendor ID: 0x0f0d (HORI CO., LTD.) Version: 1.00 Speed: Up to 12 Mb/s Manufacturer: HORI CO.,LTD. Location ID: 0x02100000 / 1 Current Available (mA): 500 Current Required (mA): 500 Extra Operating Current (mA): 0
There is an easier way with the Controllers Lite app:
- if your controller shows up within it, this means you can use it without drivers
- unfortunately, it was seeing the Fighting Edge 4 intermittently every 2 seconds
I re-checked the specifications only to find out that it was only PlayStation and PC compatible.
So I can't blame Hori on doing non-macOS shenanigans in the firmware.
SNK NEOGEO Arcade Stick Pro
My second favorite fight stick is the SNK NEOGEO Arcade Stick Pro.
I tuned mine with a Sanwa white ball top and white buttons.
It includes some open-source code together with SDL.
Funny enough, it's named JJ in the list of USB devices:
JJ:
Product ID: 0x5501
Vendor ID: 0x20bc
Version: 1.00
Speed: Up to 12 Mb/s
Location ID: 0x00111000 / 9
Current Available (mA): 500
Current Required (mA): 100
Extra Operating Current (mA): 0
Anyway, I was happy to see it showing up in the Controllers Lite app.
Since it wasn't part of the SDL_GameControllerDB, I had to create a new mapping:
- every controller device has a platform specific GUID
- SDL2 Gamepad Tool:
- finds this GUID for you
- and returns it as part of the new mapping
I submitted this mapping to the SDL_GameControllerDB:
03000000bc2000000155000000010000,
SNK NEOGEO Arcade Stick Pro
a:b1
b:b4
back:b10
dpdown:h0.4
dpleft:h0.8
dpright:h0.2
dpup:h0.1
guide:b9
leftshoulder:b2
lefttrigger:b6
rightshoulder:b5
righttrigger:b7
start:b11
x:b0
y:b3
platform:Mac OS X,
Enjoy your fight stick with RPCS3
Now you need to feed RPCS3 with the gamecontrollerdb.txt database:
cp gamecontrollerdb.txt ~/Library/Application\ Support/rpcs3/input_configs/
We're almost good now, except for what I think is a little bug in RPCS3 version 0.0.34-17265 (2024-12-28 22:09:51).
When selecting Configuration > Pads > Handlers > SDL:
- the stick is successfully recognized
- but RPCS3 crashes when starting a game
And after a relaunch, it crashes just by selecting Configuration > Pads.
You need to manually rm ~/Library/Application\ Support/rpcs3/input_configs/global/Default.yml to successfully access Configuration > Pads again.
All is not lost because there is a way to make the SDL stick work with RPCS3:
- select the keyboard as the default input config
- launch the game
- change the
Padsconfig to use the SDL stick while the game is running
Now you can enjoy your fight stick with RPCS3.
The downside is that, each time, you'll have to re-select the keyboard as the default input config while the game is running before stopping it.
Otherwise, you'll be good to rm again!
Edit 01/01/2025: well, things move fast around here, version v0.0.34-17289-1c22cc2f Alpha crashes when you change the input config while the game is running, but you can select the SDL stick before starting the game… I guess it's a matter of time before this is fixed.
Edit 04/03/2025: version v0.0.35-17555-cb659474 Alpha fixes my issues and doesn't crash anymore \o/