Google Play: We recommend installing the app from Google Play. This ensures we receive any crash reports, and you are automatically updated to the latest version.
APK Download: Since December 28, 2021 you can download an APK version of AetherSX2 if your device does not support Google Play.
We do not recommend the APK installation. You should use the Play Store link to ensure you have the latest version.
Additionally, no community support will be provided for users who install from APK. If your device is not supported in the Play Store version, it is likely too slow to run AetherSX2.
The console is an extremely complex piece of hardware, with many very powerful components, even for today.
Due to differences between the console hardware and your phone's hardware, they are computationally expensive to simulate.
You need a high end device to achieve good performance.
We recommend at least a Snapdragon 845-equivalent device. This means 4 large cores (Cortex-A75 level). If you only have two big cores (e.g. Snapdragon 700 series SoCs), you should not enable multi-threaded VU, and performance will suffer as a result.
Devices with Mali or PowerVR GPUs will run the app, but performance will be lower than Adreno GPUs. If you want to use the app on a slower device, you can try it, but games will run slow, especially heavier titles.
This is a free app, worked on as a hobby in the developers' free time. It is not going to be perfect, far from it.
We will continue to improve it when we have time, but please remember this is not our jobs, and to have realistic expectations, especially if you do not have a high end device.
AetherSX2 will always be free, and will never contain ads. If you have been forced to pay or watch ads to play games, you should get your money back.
Yes, it is. A BIOS image is required to play games and it's not optional. This image should be dumped from your own console, using a homebrew application. There are plenty of guides available online on how to dump your console's BIOS.
AetherSX2 should only be used to play games you own and have dumped from disc yourself.
To dump your games, you can use a tool such as ImgBurn to create a .iso for the disc, and then copy across it to your device over USB.
Optionally, you can use compression tools such as gzip or chdman to further reduce the size.
Different games have very different hardware requirements, due to how much they utilized the various components of the console. See the next section.
• Use the Vulkan renderer, especically if you have a Mali GPU. Note that some games may perform better with OpenGL.
• Underclock the emulated CPU by setting the cycle rate to a negative number, and cycle skip to a positive number in System settings.
• If the game slows down depending on the camera angle, this may be due to GS downloads, which are very slow on mobile GPUs.
You can try setting the hardware download mode to Unsynchronized or Disabled, but this may create some glitches in effects.
• You can try switching the SPU2 mixing mode to Async Mix instead of Timestretch. But this is not compatible with all games.
• For some devices (e.g. Samsung and Pixel), using affinity control can improve performance consistency. See the affinity control section below.
• Reducing blending accuracy can improve performance in some games, at the cost of broken visuals.
• If you have bad performance after an update, reset settings. Sometimes we change settings to more performant defaults.
Open Controller Settings while ingame, by pausing and tapping the controller icon in the top-right corner. Select the Touchscreen tab, and "Add/Remove Buttons" for L3/R3, and/or change the control layout to dual sticks.
Press the pause or back button while ingame, tap the controls tab in the top-right corner, and select the Touchscreen tab. You can also add additional buttons for hotkeys here, e.g. fast forward, quick load/save, etc.
Turn your device around if you have auto rotation enabled. You can also force it to always use landscape in the first page of App Settings.
Map the controller in "Controller Settings". You can start with the automatic mapping, but sometimes triggers or sticks still need to be mapped manually.
Long press the game in the game list/grid, tap Game Properties, and tap the Game Settings tab. If you want to change these settings while in-game, open the pause menu, and tap the info button in the top-right corner to access Game Properties.
AetherSX2 now has "input profiles", which are a grouping of the touchscreen button layout, as well as Bluetooth controller bindings. To create an input profile:
1. Configure the touchscreen buttons in the layout you desire (optional).
2. Bind the bluetooth controller with the configuration you desire, and set up any macro buttons (optional).
3. Save this as an input profile. In Controller Settings, there is a "Save Profile" option in the first tab.
4. Optionally, reset the touchscreen layout back to default (also in the same menu).
You can load this profile manually when you want to use it, but you can also automatically load the profile for specific games. To do so:
1. Open Game Properties for the game you want to use the profile for (either ingame or from the game list).
2. Swipe across to the General tab.
3. Tap "Input Profile", and select the profile you wish to use.
4. The profile will be automatically loaded when the game starts. When switching to another game, the layout will revert to the global setting.
You get 4 macro buttons per virtual controller:
1. Open Controller Settings
2. Swipe to the controller port you wish to create the macro for (usually Port 1).
3. Scroll down to the Macro category, and tap the one-of-four button you wish to customize.
4. Optionally, set a trigger for the macro button. This can be a button on your phone (e.g. volume), a controller button, a combination of controller buttons, etc. Or, leave it empty if you want to activate it with the touchscreen.
5. Choose a combination of buttons that you wish the macro to activate. You can select any combination of face buttons, stick directions, etc. For example, Cross + Right Stick Up (RUp).
6. The frequency setting determines how often the macro will toggle in frames. If you just want a combo button, leave the frequency at zero/default. Otherwise, it will simulate repeatedly releasing/pressing the button at the frequency you choose. In other words, it automates button mashing!
7. Tap out of the popup, or press the back button to leave the macro setup.
8. Optionally, enable the touchscreen button for the macro. They are hidden by default. This is in Controller Settings -> Add/Remove Buttons, and pick Macro 1 through 4. You must be ingame to add the button. The buttons will appear as M1 through M4.
Due to the complexity of the console's hardware, there are still plenty of issues which arise when using the hardware renderer. You can try using the software renderer for these games.
Open the pause menu and tap Load/Save state, there are 10 slots + a quick save (for onscreen buttons).
Currently you can only import an entire memory card at once; it is not possible to import individual saves.
Swiping from the left in the game list will show an “Import Memory Card” option which you can use to import a *.ps2 image of a memory card.
Due to scoped storage on Android 11+, we cannot place your saves in a normal directory on external storage.
However, with a file explorer app, you should be able to access the
Note that accessing this directory requires granting additional permissions to your file manager on Android 11+.
Place cover images in the covers directory, located in the data directory mentioned above, with the file name as the game title or serial in jpg/png format.
Alternatively, you can long press in the game list and select “Choose Cover Image” to import an image.
Long press the game in the game list, and select “Create Launcher Shortcut”.
The software renderer draws everything onscreen using the CPU instead of the GPU, which is very slow in comparison.
However, the software renderer's performance has now been improved to the point where it's usable for many games.
Assuming you have a device with 4 big cores, you'll want to disable multi-threaded VU to free up one of your big cores, and the software rendering threads to 2. You can then enable affinity control (to any mode), which will also pin the software threads to the big cores.
If you have a device with only 2 big cores, the software renderer will never perform well; the small cores are much too slow for rasterization.
For some devices (e.g. Samsung and Pixel), using affinity control can improve performance consistency.
By enabling this option, the CPU cores in your device are sorted from most powerful to least powerful, and the threads pinned to these cores in the order you select, to avoid the scheduler constantly moving them around.
1. EE Thread (Emotion Engine) - This thread is responsible for most of the game logic, as well as VU0, DMA, etc. In most games, it is the most heavy thread.
2. GS Thread (Graphics Synthesizer) - This thread is responsible for receiving packets from the EE and VU1, analyses them, and generates draw commands for the host GPU for rendering. In some games, particularly those which are draw call heavy, it can be the most heavy.
3. VU Thread (Vector Unit 1) - This thread handles execution of VU1 microprograms, which provide similar functionality to modern GPU's vertex shaders. It is usually the lightest thread, but in some games (e.g. God of War), it can actually be the heaviest, due to complex microprograms and/or synchronization. This thread is only active when MTVU is enabled.
The best setting will depend on your device and the game, hence why it is settable per-game. If you're experiencing massive frame rate variance, where it bounces around with a range of more than 20fps, experimenting with this option may help.
Use the "Show CPU Usage" option in graphics to work out which thread is the heaviest/second heaviest, and then choose the corresponding affinity control mode. Devices with equal big/little core distribution likely won't need to use this option.