SwanStation is a totally new PlayStation 1 (aka PSX) emulator focusing on playability, speed, and long-term maintainability. Accuracy is not the main focus of the emulator, but the goal is to be as accurate as possible while maintaining performance suitable for low-end devices. “Hack” options are discouraged, the default configuration should support all playable games with only some of the enhancements having compatibility issues. A “BIOS” ROM image is required to start the emulator and to play games. You can use an image from any hardware version or region, although mismatching game regions and BIOS regions may have compatibility issues. A ROM image is not provided with the emulator for legal reasons, you should dump this from your own console using Caetla or other means. SwanStation includes hardware rendering (OpenGL, Vulkan and D3D11), upscaling and 24-bit color and a 64-bit dynarec.
It is currently available on the Libretro buildbot for the following platforms:
Windows
Linux
Android (AArch64-only)
Features
Relatively high degree of compatibility
Has three hardware renderers: OpenGL, Vulkan, and Direct3D11
Allows you to internally upscale the resolution
Has a dynamic recompiler and cached interpreter CPU core
Ability to run PSX CDROM emulation on a separate thread, reducing frame time spikes
How to get it
There are two ways to install and/or update the SwanStation core:
a – If you have already installed the core before, you can go to Online Updater and select ‘Update Installed Cores’.
b – If you haven’t installed the core yet, go to Online Updater, ‘Core Updater’, and select ‘Sony – PlayStation (SwanStation)’ from the list. It will then download and install this core.
BIOS required
SwanStation, like Beetle PSX, requires a real BIOS in order to work. There is no HLE BIOS like PCSX ReARMed.
A “BIOS” ROM image is required to start the emulator and to play games. You can use an image from any hardware version or region, although mismatching game regions and BIOS regions may have compatibility issues. A ROM image is not provided with the emulator for legal reasons, you should dump this from your own console using Caetla or other means.
Recognized BIOS images:
scph5500.bin
scph5501.bin
scph5502.bin
Benchmarks
System specs: CPU – Intel Core i7 7700k | GPU – Geforce RTX 2080 Ti (11GB VRAM, 2018) | 16GB RAM
We’ve performed some basic performance tests between SwanStation and Beetle PSX HW. We are using the same baseline resolution (1x) for both cores, and we try to make the test as fair as possible by disabling features such as PGXP and texture filtering for Beetle PSX HW (both features which SwanStation lacks).
SwanStation
Title
Direct3D11
Vulkan
OpenGL
Tekken 3
396fps
414fps
335fps
Alien Trilogy
538fps
552fps
499fps
Beetle PSX HW
NOTE: Beetle PSX HW does not have a Direct3D 11 renderer
Title
Vulkan
OpenGL
Tekken 3
326fps
229fps
Alien Trilogy
480fps
473fps
As you can see, on average performance is overwhelmingly in SwanStation’s favor. It does have to be said that Beetle PSX HW right now has some unique features that SwanStation lacks, such as PGXP and texture replacement.
Conclusion
You should definitely give SwanStation a go if you want a high performance PlayStation1 emulator. If you find Beetle PSX HW to be running too slowly for you on your system, you should check if SwanStation is faster instead.
A new “Load Content” Startup Notification option has been added under Settings > On-Screen Display > On-Screen Notifications. When enabled, a brief animation is shown whenever content is launched – it looks something like this –
Notes:
The animation is disabled when running a core without content (there are some underlying technical issues that prevent this)
The animation is disabled when running content with ‘in-built’ cores (imageviewer, music/video player).
The animation works both for content launched via the menu and via the command line
Here is a sneak peek of LyonHrt’s upcoming texture pack replacement for Wipeout 2097/XL! You will be able to use this with the Beetle PSX HW core on RetroArch! Experience Wipeout XL/2097 with never-before-seen fidelity!
NOTE: To use this texture replacement pack, you will need to use Beetle PSX HW and in specific the Vulkan renderer.
A Libretro Cores Progress Report will follow later.
Remember that this project exists for the benefit of our users, and that we wouldn’t keep doing this were it not for spreading the love with our users. This project exists because of your support and belief in us to keep going doing great things. If you’d like to show your support, consider donating to us. Check here in order to learn more. In addition to being able to support us on Patreon, there is now also the option to sponsor us on Github Sponsors! You can also help us out by buying some of our merch on our Teespring store!
Highlights
AI Service – Custom accessibility service support
The AI service feature has included new changes to allow closer integration between the service selected and the game being played, allowing the service to read and press gamepad buttons along with the current screen image. The example video above shows a custom service (still in development) designed to make Final Fantasy 1 accessible and playable by blind users.
When started, the AI service will continually parse the screen and describe what’s being shown. When in a town or overworld view, it will describe what’s around the player to the west, north, east, and south, as well as any new things of interest that have appeared on screen (eg: a townsperson, a weapon shop, treasure chest, etc.). When the emulator is paused, it will give a more detailed description of what’s on the screen, including how far the player can walk in all directions and all things of interest along with their coordinates relative to the player. If the player holds the select button at this time, then the AI service will read out the list of things of interest on the screen and allow the player to scroll through them and select one. When selected, the AI service will unpause the game and move the player to that thing and interact with it.
When on a menu or battle screen, the service will read out the text on the screen and the currently selected menu option.
We will have more information on this for you soon after the initial testing and feedback is over.
Core Management Options
The software license of each core is now shown in the ‘Core Downloader’ and ‘Load Core’ screen.
Pressing RetroPad Select on a Core Updater entry will now display any text in the description field of its info file
Installed cores are now highlighted via a [#] symbol
Pressing RetroPad Start on a selected, installed entry opens the Core Information menu (when using Material UI, swiping left or right triggers the same action). This means we can now view bios info etc. – and more importantly delete cores – without jumping through all the hoops of loading a core first and navigating all over the place
It’s now possible to hide ‘Experimental Cores’ from being shown in the ‘Core Downloader’ menu screen.
Backup cores when updating
By default now, a backup of the current Libretro core will be made when you upgrade a core from RetroArch’s builtin Updater service. In addition, you can also ‘freeze’ a core. ‘Freeze’ in this context means that the Updater service will not be able to overwrite your current core with the latest version from the Updater service.
Vulkan WSI improvements
There were some problem platforms with WSI (Window System Interface) currently, which version 1.8.9 partly addresses. This should theoretically reduce stalls on integrated GPUs.
Intel Mesa was broken when using Fences, we have to use Semaphores to acquire the swapchain or the entire GPU stalls.
Add support for either using fences or semaphores when syncing.
Prefer using semaphores for integrated GPUs (such as Intel HD) as it promotes better throughput over fences.
Do not use mailbox emulation on Android.
Also, to make this work, decouple frame index from swapchain index with regards to CPU-side synchronization. Before, swapchain index would be coupled with frame context, which is somewhat naive.
Changelog
What you’ve read above is just a small sampling of what 1.8.8 has to offer. There might be things that we forgot to list in the changelog listed below, but here it is for your perusal regardless.
1.8.9
AUTO SAVESTATES: Ensure save states are correctly flushed to disk when quitting RetroArch (fixes broken save states when exiting RetroArch – without first closing content – with ‘Auto Save State’ enabled)
BUILTIN CORES: Builtin cores like ffmpeg and imageviewer would previously try to erroneously load a dynamic core named ‘builtin’ – this would fail and would just be a wasteful operation – this now skips dylib loading in libretro_get_system_info for builtin cores
CHEEVOS: Report API errors when unlocking achievements or submitting leaderboards
CHEEVOS: Support less common file extensions
CHEEVOS: Disable hardcore mode when playing BSV file
CHEEVOS: Correctly report unlocked non-hardcore achievements when hardcore is paused
CHEEVOS/M3U: Bugfix – did not handle absolute/relative paths in M3U files correctly before
CHEEVOS/M3U: Bugfix – it didn’t handle comments/directives
CHEEVOS/M3U: Bugfix – it doesn’t handle trailing whitespace
CHEEVOS/M3U: Bugfix – failed when loading M3U files with certain line endings
CORE MANAGEMENT: Add ‘core management’ menu (Settings -> Core)
CORE MANAGEMENT: Add option to backup/restore installed cores
CORE MANAGEMENT: Improved core selection logic
CORE INFO: Search search optimisations
CORE DOWNLOADER: Rename ‘Core Updater’ to ‘Core Downloader’
CORE DOWNLOADER: Core licenses are now shown for all entries in the Core Updater menu
CORE DOWNLOADER: Pressing RetroPad select on a Core Updater entry will now display any text in the description field of its info file
CORE DOWNLOADER: Installed cores are now highlighted via a [#] symbol
CORE DOWNLOADER: Pressing RetroPad start on a selected, installed entry opens the Core Information menu (when using Material UI, swiping left or right triggers the same action). This means we can now view bios info etc. – and more importantly delete cores – without jumping through all the hoops of loading a core first and navigating all over the place
CORE DOWNLOADER/UPDATER: Add option to automatically backup cores when updating
DISK CONTROL: Enable ‘Load New Disc’ while disk tray is open
INPUT: Added a hotkey delay option to allow hotkey input to work properly when it is assigned to another action
INPUT: Remove ‘All Users Control Menu’ setting, was buggy and will be properly reintroduced after input overhaul
LINUX: Set default saves/save states/system paths
LOCALIZATION: Add Persian language
LOCALIZATION: Add Hebrew language
LOCALIZATION: Add Asturian language
MENU: Proper line wrapping for message dialog boxes
MENU/HOTKEYS: Add sublabels to all hotkey bind entries
MENU/QUICK MENU: Suppress the display of ’empty’ quick menu listings when closing content
MENU/OZONE: Performance improvements
MENU/SDL: Add mouse controls
OPENGL1/VITA: Initial changes for HW context without FBO
OVERLAYS: Add options for moving the on-screen overlay
PLAYLISTS/WINDOWS: Fix core path entries in image/video/music history playlists
PS2: Add back CDFS support
SDL/GL: Advertise GLSL support
VIDEO/WIDGETS: Fix heap-use-after-free errors, leading to memory corruption
VITA: Added custom bubbles support
VITA: VitaGL update
VULKAN/WSI: Better frame pacing
VULKAN/WSI: Fix Intel Mesa being broken when using Fences, we have to use Semaphores to acquire the swapchain or the entire GPU stalls
VULKAN/WSI: Add support for either using fences or semaphores when syncing
VULKAN/WSI: Prefer using semaphores for integrated GPUs as it promotes better throughput over fences
VULKAN/WSI/ANDROID: Do not use mailbox emulation on Android
UWP/XBOX: Potentially improve performance by enabling ‘Game Mode’
Several important things got fixed in the latest core updates for ParaLLEl N64.
Changes
– A new deinterlacing system has been implemented that should be significantly better than the old one. Especially noticeable in games like Resident Evil 2, Turok 2’s high-res mode, Daikatana’s high-res mode, Star Wars Episode 1 Racer’s high-res mode, and tons of other games.
It just blits with a linear filter with an Y offset based on field state. Very basic, but seems good enough. Avoids the worst aspects of bob and weave
Crop overscan added
A game rendered with Angrylion and/or ParaLLEl RDP usually retains the black borders of the screen that went unused. With the ‘Crop Overscan’ option, you can strip these away from the final output image.
See here a good example – Daikatana in high-res mode. By default, it has big borders.
Cookie Consent
We use cookies to improve your experience on our site. By using our site, you consent to cookies.
Websites store cookies to enhance functionality and personalise your experience. You can manage your preferences, but blocking some cookies may impact site performance and services.
Essential cookies enable basic functions and are necessary for the proper function of the website.
Name
Description
Duration
Cookie Preferences
This cookie is used to store the user's cookie consent preferences.
30 days
Statistics cookies collect information anonymously. This information helps us understand how visitors use our website.
Google Analytics is a powerful tool that tracks and analyzes website traffic for informed marketing decisions.
Contains information related to marketing campaigns of the user. These are shared with Google AdWords / Google Ads when the Google Ads and Google Analytics accounts are linked together.
90 days
__utma
ID used to identify users and sessions
2 years after last activity
__utmt
Used to monitor number of Google Analytics server requests
10 minutes
__utmb
Used to distinguish new sessions and visits. This cookie is set when the GA.js javascript library is loaded and there is no existing __utmb cookie. The cookie is updated every time data is sent to the Google Analytics server.
30 minutes after last activity
__utmc
Used only with old Urchin versions of Google Analytics and not with GA.js. Was used to distinguish between new sessions and visits at the end of a session.
End of session (browser)
__utmz
Contains information about the traffic source or campaign that directed user to the website. The cookie is set when the GA.js javascript is loaded and updated when data is sent to the Google Anaytics server
6 months after last activity
__utmv
Contains custom information set by the web developer via the _setCustomVar method in Google Analytics. This cookie is updated every time new data is sent to the Google Analytics server.
2 years after last activity
__utmx
Used to determine whether a user is included in an A / B or Multivariate test.
18 months
_ga
ID used to identify users
2 years
_gali
Used by Google Analytics to determine which links on a page are being clicked
30 seconds
_ga_
ID used to identify users
2 years
_gid
ID used to identify users for 24 hours after last activity
24 hours
_gat
Used to monitor number of Google Analytics server requests when using Google Tag Manager
1 minute
Marketing cookies are used to follow visitors to websites. The intention is to show ads that are relevant and engaging to the individual user.
A video-sharing platform for users to upload, view, and share videos across various genres and topics.
Registers a unique ID on mobile devices to enable tracking based on geographical GPS location.
1 day
VISITOR_INFO1_LIVE
Tries to estimate the users' bandwidth on pages with integrated YouTube videos. Also used for marketing
179 days
PREF
This cookie stores your preferences and other information, in particular preferred language, how many search results you wish to be shown on your page, and whether or not you wish to have Google’s SafeSearch filter turned on.
10 years from set/ update
YSC
Registers a unique ID to keep statistics of what videos from YouTube the user has seen.
Session
DEVICE_INFO
Used to detect if the visitor has accepted the marketing category in the cookie banner. This cookie is necessary for GDPR-compliance of the website.
179 days
LOGIN_INFO
This cookie is used to play YouTube videos embedded on the website.
2 years
VISITOR_PRIVACY_METADATA
Youtube visitor privacy metadata cookie
180 days
You can find more information in our Cookie Policy and .