PlayStation (Beetle PSX)Link


Beetle PSX 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 currently runs on Linux, OSX and Windows.

Notable additions in this fork are:

  • PBP and CHD file format support, developed by Zapeth;
  • Software renderer internal resolution upscaling, implemented by simias;
  • An OpenGL 3.2 renderer, developed by simias;
  • A Vulkan renderer, developed by TinyTiger;
  • PGXP perspectve correct texturing and subpixel precision, developed by iCatButler;


The Beetle PSX core has been authored by

The Beetle PSX core is licensed under

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


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

  • .cue
  • .toc
  • .m3u
  • .ccd
  • .exe
  • .pbp
  • .chd


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


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


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

Feature Supported
Netplay (State based)
Core Options
Cheats (Cheats menu)
Native Cheats
Multi-Mouse -
Disk Control
Crop Overscan


The Beetle PSX core's directory name is 'Beetle PSX'

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

Frontend's Save directory

  • Memory cards

Frontend's State directory

  • 'content-name'.state# (State)

Geometry and timingLink

  • The Beetle PSX core's core provided FPS is (FPS)
  • The Beetle PSX core's core provided sample rate is (Rate)
  • The Beetle PSX core's core provided aspect ratio is (Ratio)

Loading contentLink

Beetle PSX 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:


 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 core.


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

Playing PAL copy protected gamesLink

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

  • Ape Escape (Europe).bin
  • Ape Escape (Europe).cue
  • Ape Escape (Europe).sbi


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

Multiple-disk gamesLink

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'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 (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 core.

Here's a m3u example done with Valkryie Profile


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

Game compressionLink

Alternatively to using cue sheets with .bin files, you can convert your games to .pbp (Playstation Portable update file) to reduce file sizes and neaten up your game folder. 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.


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.


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 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 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


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:

  • Loaded content: Breath of Fire III (USA).cue

  • Memcard slot 0: Breath of Fire III (USA).srm

  • Memcard slot 1: Breath of Fire III (USA).1.mcr


  • Loaded content: Final Fantasy VII (USA).m3u

  • Memcard slot 0: Final Fantasy VII (USA).srm

  • Memcard slot 1: Final Fantasy VII (USA).1.mcr


  • Loaded content: Wild Arms 2 (USA).pbp

  • Memcard slot 0: `Wild Arms 2 (USA).srm

  • Memcard slot 1: `Wild Arms 2 (USA).1.mcr


To import your old memory cards from other emulators, you need to rename them to either the Libretro savedata format or the Mednafen savedata format.


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 optionsLink

The Beetle PSX core has the following option(s) that can be tweaked from the core options menu. The default setting is bolded.

Settings with (Restart) means that core has to be closed for the new setting to be applied on next launch.

  • Internal GPU resolution [beetle_psx_internal_resolution] (1x(native)/2x/4x/8x/16x/32x)

    Modify the resolution.

Internal GPU Resolution - 1x

Internal GPU Resolution - 2x

  • Widescreen mode hack [beetle_psx_widescreen_hack] (Off/On)

    If on, renders in 16:9. Works best on 3D games.

Widescreen mode hack - Off

Widescreen mode hack - On

  • Frame duping (speedup) [beetle_psx_frame_duping_enable] (Off/On)

    Redraws/reuses the last frame if there was no new data.

  • CPU Overclock [beetle_psx_cpu_overclock] (Off/On)

    Gets rid of memory access latency and makes all GTE instructions have 1 cycle latency.

  • Skip BIOS [beetle_psx_skipbios] (Off/On)

    Self-explanatory. Some games have issues when this core option is enabled (Saga Frontier, PAL copy protected games, etc).

Skip BIOS - Off

  • Dithering pattern [beetle_psx_dither_mode] (1x(native)/internal resolution/Off)

    If off, disables the dithering pattern the PSX applies to combat color banding. Only for the OpenGL and Vulkan renderers. Vulkan always disables the pattern.

  • Display internal FPS [beetle_psx_display_internal_framerate] (Off/On)

    Shows the frame rate at which the emulated PSX is drawing at. Onscreen Notifications must be enabled in the RetroArch Onscreen Display Settings.

Display internal FPS - On

  • Initial scanline [beetle_psx_initial_scanline] (0 to 40 in increments of 1. 0 is default)

    Sets the first scanline to be drawn on screen.

  • Last scanline [beetle_psx_last_scanline] (210 to 239 in increments of 1. 239 is default)

    Sets the last scanline to be drawn on screen.

  • Initial scanline PAL [beetle_psx_initial_scanline_pal] (0 to 40 in increments of 1. 0 is default)

    Sets the first scanline to be drawn on screen for PAL systems.

  • Last scanline PAL [beetle_psx_last_scanline_pal] (260 to 287 in increments of 1. 287 is default)

    Sets the last scanline to be drawn on screen for PAL systems.

  • Crop Overscan [beetle_psx_crop_overscan] (Off/On)

    Crop out the potentially random glitchy video output that would have been hidden by the bezel around the edge of a standard-definition television screen.

Crop Overscan - On

Crop Overscan - Off

  • Additional Cropping [beetle_psx_image_crop] (Off/1 px/2 px/3 px/4 px/5 px/6 px/7 px/8 px)


  • Offset Cropped Image [beetle_psx_image_offset] (Off/1 px/2 px/3 px/4 px/-4 px/-3 px/-2 px/-1 px)


  • Analog self-calibration [beetle_psx_analog_calibration] (Off/On)

    When enabled, monitors the max values reached by the input, using it as a calibration heuristic which then scales the analog coordinates sent to the emulator accordingly. For best results, rotate the sticks at max amplitude for the algorithm to get a good estimate of the scaling factor, otherwise it will adjust while playing.

  • DualShock Analog button toggle [beetle_psx_analog_toggle] (Off/On)

    Toggles the Analog button from DualShock controllers, if disabled analogs are always on, if enabled you can toggle their state by pressing and holding START+SELECT+L1+L2+R1+R2.

  • Port 1: Multitap enable [beetle_psx_enable_multitap_port1] (Off/On)

    Enables/Disables multitap functionality on port 1.

  • Port 2: Multitap enable [beetle_psx_enable_multitap_port2] (Off/On)

    Enables/Disables multitap functionality on port 2.

  • Gun Cursor [beetle_psx_gun_cursor] (Cross/Dot/Off)

    Choose the cursor for the 'Guncon / G-Con 45' and 'Justifier' Device Types. Setting it to off disables the crosshair.

Gun Cursor - Cross

Gun Cursor - Dot

Gun Cursor - Off

  • Mouse Sensitivity [beetle_psx_mouse_sensitivity] (5% to 200% in increments of 5%. 100% is default)

    Configure the 'Mouse' Device Type's sensitivity.

  • CD Access Method (restart) [beetle_psx_cd_access_method] (sync/async/precache)

    The precache setting loads the complete image in memory at startup. Can potentially decrease loading times at the cost of increased startup time.

  • Memcard 0 method [beetle_psx_use_mednafen_memcard0_method] (libretro/mednafen)

    Choose the savedata format used for Memcard slot 0 (libretro or mednafen) . Look above at the Saves section for an explanation regarding the libretro and mednafen formats.

  • Enable memory card 1 [beetle_psx_enable_memcard1] (Off/On)

    Enable or disables Memcard slot 1. When disabled, games cannot save/load to Memcard slot 1. Memcard 1 must be enabled for game 'Codename Tenka'.

  • Shared memcards (restart) [beetle_psx_shared_memory_cards] (Setting1/Setting2)

    Games will share and save/load to the same memory cards.

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


The 'Memcard 0 method' core option needs to be set to 'mednafen' for the 'Shared memcards' core option to function properly.

  • Increase CD loading speed [beetle_psx_cd_fastload] (2x (native)/4x/6x/8x/10x/12x/14x)

    An experimental feature, may not work correctly in all games. Some games may break if you set them past a certain speed. Can greatly reduce the loading times on games.


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

User 1 - 8 device typesLink

  • None - Input disabled.
  • PlayStation Controller - Joypad - PlayStation Controller (SCPH-1080)
  • DualShock - Joypad - DualShock (SCPH-1200)
  • Analog Controller - Joypad - PlayStation Dual Analog Controller(SCPH-1180)
  • Analog Joystick - Joypad - PlayStation Analog Joystick (SCPH-1110)
  • Guncon / G-Con 45 - Lightgun - Namco Gun Controller (SLEH-00007)
  • Justifier - Lightgun - Konami Justifier lightgun peripheral (SLEH-00005, SLUH-00017)
  • Mouse - Mouse - PlayStation Mouse (SCPH-1090, SCPH-1030)
  • neGcon - Joypad - Namco third party controller

Rumble supportLink

Rumble only works in the Beetle PSX core when

  • The content being ran has rumble support.
  • The frontend being used has rumble support.
  • The joypad device being used has rumble support.
  • The corresponding user's device type is set to DualShock

Multitap supportLink

Activating multitap support in compatible games can be configured by the 'Port 1: Multitap enable' and 'Port 2: Multitap enable' core options.

Controller tablesLink


User 1 - 8 Remap descriptors RetroPad Inputs PlayStation Controller Inputs DualShock Inputs Analog Controller Inputs Analog Joystick Inputs neGcon Inputs
Cross Analog button I
Square Analog button II
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
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


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


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


A list of known emulation bugs can be found here

See alsoLink