Overview
This project is an iPhone app that emulates retro game controllers and a device driver. The project isn’t a proper game, but the driver host app will include mini-games that provide immediate feedback when virtual controllers connect to the driver.
Rationale
I want to use an iPhone to emulate retro game controllers that can be used with any game or app that supports USB HID game controllers on a Mac. I started this open source project because nothing available comes remotely close to meeting my requirements.
My requirements for the project are as follows:
- The project is open source
- The app emulates real-world retro devices without setup or configuration.
- The driver makes the emulated device indistinguishable from a physical device without setup or configuration
- The iPhone app can be distributed on the iOS App Store
- The Mac app and driver can be distributed on the Mac App Store
- The iPhone app and driver can communicate without setup or configuration
The project currently meets all my requirements!
It should also be possible for the driver to work on an iPad with an M-series chip. Unfortunately, this will require applying for the DriverKit entitlement from Apple, and Apple won't even let you apply unless you're enrolled in the Apple Developer Program as an organization.
Progress
- A working driver that can be installed, recognized by macOS, and loaded by the operating system
- A driver host app that installs the driver, connects to the driver's user service, and displays a virtual controller
- An emulated NES controller that is usable from the host app
- Apps such as OpenEmu recognize the emulated device as a working HID game controller
- An iPhone app that displays the emulated NES controller and connects to the driver
Screenshots
Driver's Mac Host App
The venerable OpenEmu project's Settings window showing that it recognized the virtual device. "9ES" is the name I use for the emulated NES controller.
Next steps
Make the iPhone app talk to the driver and transmit its button state changes.