PlayStation (Beetle PSX HW)

Last Updated: March 21, 2020

Background

Beetle PSX HW is a port/fork of Mednafen's PSX module to the libretro API. It can be compiled in C++98 mode, excluding the Vulkan renderer, which is written in C++11 for the time being. Beetle PSX HW currently runs on Linux, OSX and Windows.

Notable additions in this fork are:

The Beetle PSX HW core has been authored by

The Beetle PSX HW core is licensed under

A summary of the licenses behind RetroArch and its cores have found here.

Requirements

BIOS

Required or optional firmware files go in the frontend's system directory.

Filename Description md5sum
scph5500.bin PS1 JP BIOS - Required for JP games 8dd7d5296a650fac7319bce665a6a53c
scph5501.bin PS1 US BIOS - Required for US games 490f666e1afb15b7362b406ed1cea246
scph5502.bin PS1 EU BIOS - Required for EU games 32736f17079d0b2b7024407c39bd3050

Extensions

Content that can be loaded by the Beetle PSX HW core have the following file extensions:

RetroArch database(s) that are associated with the Beetle PSX HW core:

Features

Frontend-level settings or features that the Beetle PSX HW core respects.

Feature Supported
Restart
Screenshots
Saves
States
Rewind
Netplay
Core Options
RetroAchievements
RetroArch Cheats
Native Cheats
Controls
Remapping
Multi-Mouse
Rumble
Sensors
Camera
Location
Subsystem
Softpatching
Disk Control
Username
Language
Crop Overscan *
LEDs

* Overscan cropping available via Core Options instead of frontend settings

Directories

The Beetle PSX HW core's library name is 'Beetle PSX HW'

The Beetle PSX HW core saves/loads to/from these directories.

Frontend's Save directory

Frontend's State directory

File Description
*.state# State

Geometry and timing

Loading content

Beetle PSX HW needs a cue-sheet that points to an image file. A cue sheet, or cue file, is a metadata file which describes how the tracks of a CD or DVD are laid out.

If you have e.g. foo.bin, you should create a text file and save it as foo.cue. Most PS1 games are single-track, so the cue file contents should look like this:

foobin.cue

1
2
3
 FILE "foo.bin" BINARY
  TRACK 01 MODE1/2352
   INDEX 01 00:00:00

After that, you can load the foo.cue file in RetroArch with the Beetle PSX HW core.

Attention

Certain PS1 games are multi-track, so their .cue files might be more complicated.

Playing PAL copy protected games

PAL copy protected games need a SBI Subchannel file next to the bin/cue files in order to get past the copy protection.

Warning

For proper PAL game compatibility, the 'Skip BIOS' core option needs to be set to off.

Multiple-disk games

If foo is a multiple-disk game, you should have .cue files for each one, e.g. foo (Disc 1).cue, foo (Disc 2).cue, foo (Disc 3).cue.

To take advantage of Beetle PSW HW's Disk Control feature for disk swapping, an index file (a m3u file) should be made.

Create a text file and save it as foo.m3u. Then enter your game's .cue files on it. The m3u file contents should look something like this:

foo.m3u

1
2
3
foo (Disc 1).cue
foo (Disc 2).cue
foo (Disc 3).cue

After that, you can load the foo.m3u file in RetroArch with the Beetle PSX HW core.

Here's a m3u example done with Valkryie Profile

Attention

Adding multi-track games to a RetroArch playlist is recommended. (Manually add an entry a playlist that points to foo.m3u)

Swapping disks

Disks can be swapped through Quick Menu -> Disk Control in RetroArch.

If not using .m3u files, .cue files must be manually selected via the Load New Disk legacy feature.

If using .m3u files, disks can be swapped by selecting Eject Disk, changing the Current Disk Index to your desired disk, and finally selecting Insert Disk.

Compressed content

Alternatively to using cue sheets with .bin/.iso files, you can convert your games to .pbp (Playstation Portable update file) or .chd (MAME Compressed Hunks of Data) to reduce file sizes and neaten up your game folder.

PBP

A recommended .pbp convert tool is PSX2PSP.

If converting a multiple-disk game, all disks should be added to the same .pbp file, rather than making a .m3u file for them.

Most conversion tools will want a single .bin file for each disk. If your game uses multiple .bin files (tracks) per disk, you will have to mount the cue sheet to a virtual drive and re-burn the images onto a single track before conversion.

For multi-disk PAL copy-protected games, change the sbi file syntax from [filename].sbi to [filename]_[disc_number].sbi

Attention

RetroArch does not currently have .pbp database due to variability in users' conversion methods. All .pbp games will have to be added to playlists manually.

CHD

To convert content to CHD format, use the chdman tool found inside the latest MAME distribution and point it to a .cue file, like so:

1
chdman createcd --input foo.cue --output foo.chd

Note that the tool currrently does not integrate .sbi files into the .chd, so these must be placed alongside the resulting .chd file in order to properly play games with LibCrypt protection.

Attention

For multi-disc content, make an .m3u file that lists all the .chd files instead of .cue files. Like the PBP files, content must be added to playlists manually.

Saves

For game savedata storage, the PSX console used memory cards. The PSX console had two slots for memory cards.

In this doc, the first memory card slot will be referred to as 'Memcard slot 0' and the second slot will be referred to as 'Memcard slot 1'.

For memory card functionality and usage, the Beetle PSX HW core will either use the Libretro savedata format or the Mednafen savedata format.

Libretro savedata format Mednafen savedata format
gamename.srm gamename.slot#.mcr

By default, the Beetle PSX HW core will use Libretro's savedata format for Memcard slot 0 and Mednafen's savedata format for Memcard slot 1.

Memcard slot 0 Memcard slot 1
gamename.srm gamename.1.mcr

Attention

Memory card behavior can be controlled with the following core options (Memcard 0 method, Enable memory card 1, Shared memcards).

By default, the filenames of the Memcard savedata will match the loaded cue or m3u or pbp filename, like this:

or

or

Attention

To import your old memory cards from other emulators, you need to rename them to either the Libretro (.srm) savedata format or the Mednafen (.mcr) savedata format. The Libretro (.srm) savedata format, when used with Beetle PSX, is internally identical to the Mednafen PSX (.mcr) savedata format, and can be converted between one another via renaming.

Warning

Keep in mind that save states also include the state of the memory card; carelessly loading an old save state will OVEWRITE the memory card, potentially resulting in lost saved games. You can set the 'Don't overwrite SaveRAM on loading savestate' option in RetroArch's Saving settings to On to prevent this.

Core options

The Beetle PSX HW core has the following options that can be tweaked from your frontend's core options menu or manually changed via core configuration files. Options are listed below in the following format:

Option Name [option_key] (setting1/setting2/...)

To manually change an option, search for that option's key in the core configuration file you want to edit and set it to your desired setting value, enclosed in quotations. For example, if you had set the Internal Color Depth to 32bpp and wanted to revert it to 16bpp, you would change beetle_psx_hw_depth = "32bpp" to beetle_psx_hw_depth = "16bpp(native)". Manually editing core configuration files is typically unnecessary unless your frontend does not have a method for toggling options.

The default setting for each option will be highlighted in bold. Settings with (Restart) means that core has to be shut down for the new setting to be applied on next launch.

Memcard slot 0 Memcard slot 1
mednafen_psx_libretro_shared.0.mcr mednafen_psx_libretro_shared.1.mcr

User 1 - 8 device types

The Beetle PSX HW core supports the following device type(s) in the controls menu, bolded device types are the default for the specified user(s):

Rumble support

Rumble only works in the Beetle PSX HW core when

Multitap support

'Port 1: Multitap enable' and 'Port 2: Multitap enable' core options.

Joypad

User 1 - 8 input descriptors RetroPad Inputs PlayStation Controller Inputs DualShock Inputs Analog Controller Inputs Analog Joystick Inputs neGcon Inputs
Cross Analog button I
Square Analog button II
Select
Start Start
D-Pad Up D-Pad Up
D-Pad Down D-Pad Down
D-Pad Left D-Pad Left
D-Pad Right D-Pad Right
Circle A
Triangle B
L1 Left shoulder button (analog)
R1 Right shoulder button (digital)
L2 Analog button II
R2 Analog button I
L3
R3
Left Analog X X Left Joystick X Twist
Left Analog Y Y Left Joystick Y
Right Analog X X Right Joystick X
Right Analog Y Y Right Joystick Y

Mouse

RetroMouse Inputs Mouse Inputs
Mouse Cursor Mouse Cursor
Mouse 1 Mouse Left Button
Mouse 2 Mouse Right Button

Lightgun

RetroLightgun Inputs Guncon / G-Con 45 Inputs Justifier Inputs
Gun Crosshair Guncon / G-Con 45 Crosshair Justifier Crosshair
Gun Trigger Guncon / G-Con 45 Trigger Justifier Trigger
Gun Reload Guncon / G-Con 45 Reload Justifier Reload
Gun Aux A Guncon / G-Con 45 A Justifier Aux
Gun Aux B Guncon / G-Con 45 B
Gun Start Justifier Start

Compatibility

Expect bugs with hardware renderer enhancements.

When using the run-ahead latency reduction feature, the "second instance" setting will break the hardware renderer.

Hardware renderer currently has a number of issues with interlacing shaders and outputting on CRTs. Use the software renderer for the time being.

A list of known emulation bugs when using the software renderer can be found here https://forum.fobby.net/index.php?t=msg&th=1114&start=0&

Issue tracker for the hardware renderer can be found here https://github.com/libretro/beetle-psx-libretro/issues

Libretro PSX cores