Libretro Cores Progress Report – May 27, 2020

Yesterday marked RetroArch’s 10 Year Anniversary date. Today, we’re not only releasing a new RetroArch version, but we’re letting you know all the changes that have been made to the libretro cores since the last progress report.

Our last core progress report was on April 2, 2020. Below we detail the most significant changes to all the Libretro cores we and/or upstream partners maintain. We are listing changes that have happened since then.

How to update your cores in RetroArch

There are two ways to update your cores:

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 the core from the list that you want to install.

Final Burn Neo

Description: Multi-system arcade emulator

  • Add Neo Geo Pocket Color support
  • Latest updates from upstream


Description: Sega Dreamcast/NAOMI emulator

  • Naomi/AW widescreen integrated cheats (KNIGHTS OF VALOUR THE 7 SPIRITS, Metal Slug 6, Toy Fighter, Dolphin Blue)
  • DSP: Proper MIXS input shift. Fixes Grandia 2 missing sound effects
  • DSP: fix output shift. Fix wrungp ear rape (NAOMI game)
  • Fix for: [Bug]Super Street Fighter II X for Matching Service (Japan) – Disable BIOS region patching
  • Fix for: Samurai Spirits – Frame-skipping issues before reset or changing the option – don’t reset frameskip to 0 at init
  • Haiku: Fix build
  • Rewrite nvidia jetson nano build
  • Make threaded rendering the default on all platforms. Synchronous mode enabled unless LOW_END is defined
  • Info and warning for xBRZ upscaling core option
  • ARM64: check CpuRunning at end of each timeslice. fix hang when exiting service menu in kofnw (NAOMI game)
  • NAOMI: wrungp inputs. support inverted axis for NAOMI
  • Libretro: Improve context request
  • Libretro: fix input descriptor L2/R2 mixup
  • NAOMI: Add Tokyo Bus Guide support
  • Log VMU files loading
  • CUSTOM TEXTURES: support JPEG format. Get rid of libpng and use stb_image log error if naomi eeprom save fails
  • Fix mouse state not being updated
  • PVR/NAOMI: update palette when PAL_RAM_CTRL is updated – fixes wrong palette in Gun Survivor 2 score screen
  • REND: Use original palette data to compute palette hash
  • PVR: textured background plane – fixes Who Wants To Be a Millionaire

DOSbox Core

Description: DOSbox core

  • Latest updates from upstream
  • Add option for using 2axis joystick even when only one port is connected – this fixes input problems in “Super Off Road”, but other games might also need this.
  • Add option for controlling log verbosity level – Since we can log to stdout now, it makes sense. Also, some frontends might not have configurable log verbosity levels.
  • Add option for printing log output to stdout/stderr –
    Useful if the frontend’s logging output is unreliable or too noisy (or
    both) and we only want to see log output from the core. RetroArch does
    have a configuration option for controlling frontend and core log output
    seperately, but it’s bugged.
  • Enable Voodoo on all platforms and regardless of fakesdl – Software-based Voodoo emulation doesn’t require SDL anymore so it should build fine everywhere.
  • Don’t claim there’s Voodoo2 emulation – Oops. 12MB doesn’t actually mean Voodoo2. The current code only emulates the original Voodoo. The 12MB setting is just a non-standard memory configuration for the Voodoo 1.
  • Add support for changing current core option values programmatically.
    This is a hack. The libretro API does not actually support this. We
    achieve this by replacing all current values with a bogus one to force
    the frontend to forget the currently selected value, since it doesn’t
    match the bogus one. We then submit the correct values again, but with
    the default value set to the value we want to switch to. This forces
    the frontend to switch to that value because the bogus value is now
    gone and thus not a valid value anymore. Finally, we submit the values
    again but with the initial default value (we only want to change the
    current value, not set a new default.) The frontend will not switch the
    current value, as the values themselves have not changed, just the
    default has.

    RetroArch seems to be well-behaved here and does the correct thing.
    Other frontends might not play ball though.

  • Hook up 3dfx core options
  • Vita: Fix dynarec, fix build
  • Add build options to make bassmidi and fluidsynth optional
  • Fix ARM dynarec
  • Correct cdrom sector size field length according to docs.
  • Refactor input mapper –
    Code should be simpler to understand now. This also fixes a bug where
    inputs on the second port weren’t working before. Mouse emulation is now
    possible on both ports and the default emulated mouse buttons have been
    swapped with the speed modifier buttons (L/R are now mouse buttons,
    L2/R2 the speed modifiers.) This is a saner default since not all
    controllers have L2/R2 buttons.
  • GHA: Support macOS 10.13 by building with GCC instead of XCode Clang
  • Fix floppy image file size detection oopsie
  • Improve disk control related code and move it to its own source file
  • Make image file extension comparisons case-insensitive –
    This fixes the issue where loading an image that has an upper-case
    extension (like “.CUE” instead of “.cue”) results in dosbox mounting the
    image itself without going through the libretro disk control interface.

    We add new case conversion funtions for this (in the new util.h/util.cpp
    files) because the existing conversion functions provided either by
    dosbox or libretro-common are crap and we’re smarter than everybody

  • Add libretro disk control interface disk labels support –
    Only retro_get_image_label_t for now. Leave retro_set_initial_image_t
    and retro_get_image_path_t undefined as it’s not clear what the use
    would be in case of DOS games, especially since we don’t handle m3u
    files yet.
  • Fix disk_replace_image_index always reporting failure –
    This silly mistake caused the “Failed to append disc” error message in
  • Add core option for setting the free space when auto-mounting drive C
  • Ensure overlay mount path ends with a dir separator –
    Otherwise dosbox will write data in bogus directories in the overlay.
  • Add option for mounting the executable’s parent dir as drive C –
    Some pre-installed games expect to be installed in C:\GAMEDIR rather
    than directly in C:\. This option allows these games to run without
    having to modify their configuration files first.
  • Enable PC speaker by default
  • Fix direct content loading of DOS executables
  • Fix BASSMIDI crashing during startup on 32-bit Windows
  • Add BASS/BASSMIDI libs to core info file
  • Add BASSMIDI MIDI driver –
    The bass and bassmidi libraries are looked for in the frontend’s system
    directory and loaded at runtime. This allows the core to work and be
    distributed in a GPL-compliant way without those libraries.


Description: DOSbox

  • Add SALC and XLAT to the dyn_x86 core. Improve LOCK handling a bit.
  • change new to new(std::nothrow) (vogons 73603) and some formatting
  • QNX: Adjust flags to msync based on libretro-common –
    I didn’t notice any bug before but this stuff is very difficult to trigger
  • QNX: Add support
  • Allow unaligned memory only on x86
  • Determine CPU based on actual running platform rather than build one –
    This allows to closs-compile on x86 linux into arm linux

    Endianness is determined in retro_endianness.h and dynarec is determined
    in dynarec.h

  • Correct cdrom sector size field length according to docs
  • memory: Add missing std::nothrow –
    Given subsequent check for NUL it was obviously intended for use with
  • Catch exceptions in dosbox –
    Right now an exceptions ends up killing cothread which is against libco
    recommendations and is more difficult to debug. Instead log and exit normally
  • Fix button mappings and wrong port assignment when using both ports –
    This maps B/A/Y/X to DOS buttons 1/2/3/4 by default. Also corrects the
    issue of input not working correctly when using two controllers.
  • Fix Windows x64 hang/crash by updating libretro-common
  • Don’t submit mouse emulation descriptors when no ports are connected
  • Fix new gamepad emulated mouse defaults being swapped
  • Map mouse buttons to L/R, modifiers to L2/R2, not vice-versa –
    Many gamepads don’t have L2/R2, which were needed to press mouse
    buttons with the gamepad using the default mapping. This change
    maps mouse buttons to L/R by default. The modifiers to speed up
    or slow down mouse motion are moved from L/R to L2/R2, since they
    are less essential. All of this can be remapped via quick menu
    using the input mapper.
  • Fix gamepad emulated mouse inputs not showing in mapper sometimes
  • Vita: Fix dynarec
  • Vita: Build fix
  • Switch to libco provided by libretro-common –
    libco embedded here crashes on vita. So let’s use the common one
  • Use RETRO_CALLCONV for disk control callbacks –
    It’s surprising that there were no crashes so far on x86 32-bit…
  • Fix disk_replace_image_index always reporting failure –
    This silly mistake caused the “Failed to append disc” error message in
  • Correct an oversight of r4186 when floppy disks are mounted.

Beetle PSX

Description: Sony PlayStation1 emulator

  • Load bios from path that was checked
  • sanitize gl context requests
  • Add more detailed error messages for mmap, unlink sooner
  • Allow Solaris 11 build
  • Cleanup warnings: snprintf truncation, strncpy->memcpy, memset
  • Lightrec: Cleanup/deduplicate mmap code
  • Lightrec: Improve homebrew support
  • Fix inverted check for dma-only invalidation
  • Fix OS X compile
  • Lightrec: fix more games –
    These games now work:
    – Need For Speed: V-Rally
    – Alone In The Dark – One-Eyed Jack’s Revenge
  • Lightrec: Fix SWL/LWL using wrong mask
  • When HAVE_SHM always use global memfd so it can be closed properly on exit –
    LGTM found this once the default was to compile in lightrec
  • Keep track of mmap failing –
    If mmap failed it should prevent crashing when closing and disables
    lightrec memory mirrors so as to not use an incorrect code path
  • Update to latest lightrec and extract PGXP from lightrec –
    PGXP functions are now called from within beetle
  • Compile in Lightrec support by default –
    Specify HAVE_LIGHTREC=0 if you don’t want it compiled
  • Improve DualShock calibration reference
  • Fix disk control interface when running single-disk PBP content

Mupen64Plus Next

Description: Nintendo 64 emulator

  • Only set WITH_DYNAREC based on ARCH if not set
  • Update GLiden64
  • Add support for loading GL symbols using dlsym() instead of libretro API –
    * Required for platforms with EGL version < 1.5 * To enable, use new compile-time define: `-DGL_USE_DLSYM` Currently only enabled for Raspberry Pi platforms that use the legacy Broadcom driver.
  • Add nasm variable
  • Assign variable and reference nasm
  • Bump Version to 2.0.5
  • Update Mupen64Plus INI
  • Add fbInfoDisabled to Ini parsing
  • Update GLideN64 INI


Description: Sega Saturn emulator

  • Enable Solaris build


Description: Sega Saturn emulator

NOTE: This core requires you to use the ‘glcore’ video driver right now. There is no software renderer and it won’t work properly yet with the regular ‘gl’ driver.

  • Activate openGL program precompilation
  • Precompile some shaders directly at boot time to have a smoother BIOS animation
  • Emit a callback at each frame for synchronizing need on ports
  • Swap the buffers at each frame
  • (libretro) framerate pacing + CDROM support + m3u extension
  • Implement a database & rework cart auto-detect
  • Add support for BIOS language
  • Fix Assault Leynos 2 black screen
  • Fix mesh improved image unit usage
  • Fix blinking in Sega Rally, CS Mode
  • Add support to remove banding when using gouraud shading
  • Modify the handling of improved mesh handling to prepare improved banding support
  • fix pause in Daytona USA
  • fix Sega Rally USA boot – might introduce other improvements or regressions
  • Prepare the SH2 threading
  • ST-V I/O is reading words
  • (libretro) fix resolution mode change
  • Rebase the openGL on Yabause since compute CS has a better rendering and openGL rework created new issues
  • (libretro) improve rendering loop
  • Better horizontal upscaling
  • Depending of vertical flip, sprite reading is not the same – Improving Sega Rally
  • (libretro) use cpu_tesselation as default for polygon mode
  • Use CPU tesselation by default
  • (libretro) make the frame rendering more libretro-friendly
  • Reintroduce some required variable for color calculation – fix Cotton Club
  • Software renderer supports 4 threads at maximum
  • Consider that only old card compatible only with OpenGL 3.3 are limited in variables and need to reduce VDP2 blitting program
  • Reintroduce software renderer
  • Reduce the VDP2 register texture width
  • Do not initialise unsupported openGL functions. Fixing some openGL Core 3.3 errors
  • For openGL do not call to much the rendering loop – Better to maximize cache texture impact
  • Add ignition line to VDP1 commands
  • Do not flush the cache texture at each HBlank – only flush when needed
  • In case of draw every 2 frames, do not consider CMD that has already been displayed
  • We have to update the texture before the evaluated startupline, not at the end of the first line… Fixing Skeleton tearing
  • allow STV rom loading to be CRC based
  • Trigger the VDP1 rendering as soon as we consider the draw command list has executed
  • Take care of effective starting line of VDP1 command to evaluate if the core has to regenerate the textures
  • Remove NVidia related pragma – Might impact other GC
  • Calculate VDP1 cycles requested by draw commands
  • Fix some STV loading –
    Fix batmanfr, thuntk & thunt boot without breaking dnmtdeka gfx (and maybe other’s ?)
    Also got sanjeon to boot.
  • Load the BIOS file of the right entry – Fixing Die Hard boot
  • Setup EEPROM directory at the same location than STV ROM
  • Fix “heap-use-after-free” on exit –
    YglGenReset can’t be called after _Ygl is freed
  • fix some STV loading issues –
    suikoenb, thunt, thuntk, batmanfr & znpwfvt now boot, however only thuntk seems playable at the moment
  • Support EEPROM save & load for STV
  • Update the rotation window before the rotated layer are using the values
  • Preliminary support for STV’s Kick Harness
  • Fix horizontal RBG offset in Final Fight Revenge
  • Allow openGL 3.3 since openGL without tesselation should work on most of the games
  • Fix the RBG vertical misalignment when upscale is on – Still horizontal tearing
  • Some minor fixes for RBG CS
  • Fix VDP1 mapping on highest upscale ratio
  • Fixing coin setup on ST-V
  • Backup RAM can be accessed in word and Long – STV is doing this
  • Better handling of the upscale
  • PTRM = 0x3 corresponds to PTMR 0x2 – Fixing Skeleton Warriors startup
  • Fix the special color condition in case sprite is cc enabled, not active as first screen, but activable as second
  • For color mode other than 2, read coefficient table on the upper part of the color RAM
  • Do not handle prohibited setting on PTMR – Fix Skeleton
  • Writing lower part of Color RAM in mode 0 is overwriting upper part
  • When VDPRAM mode is 0, color from RBG is read on the upper part since lower part is for color offset
  • If the code is checking EDSR, just wait for VDP1 processing to finish – avoid changing VDP1 texture while it is changing
  • Do not try agressive optimization yet – Fixing Disc menu performance
  • Fix Quad upscale in Compute shader
  • Fix the regeneration of the VDP1 surfaces – Fix Guardian Heroes
  • Add a compilation flag to enable/disable VDP1RAM update – enabled by default
  • LDCSR is changing the SR mask, so interrupt shall be handled as soon as it is changed – Fixing Princess Maker 2 boot
  • Fix the deinit of YGLTM
  • Fix libretro fullscreen switch – Implement a destroy of all openGL objects when openGL context is reset
  • (libretro) fix upscaling weirdness
  • (libretro) try at fixing scaling weirdness
  • On Libretro, do not execute the last resizing. It is required that the libretro framebuffer always provide a FB of size _Ygl->widthx_Ygl->height
  • (libretro) updates
  • Issue on IST cleaning. Princess Maker 2 is now crashing on master SH2 issue. Might be due to SH2 interrupt handling – Fixing Skeleton boot
  • SH2 interrupt mechanism is not accurate – Do not try to make it precise – Fix Capcom Generations 5
  • Compute the VDP1 buffer in threads
  • Double the VDP1 structure to avoid stall between frames
  • Big rework of SCU Interrupt handling – Fix Princess Maker 2 boot while fixing Nanatsue Kaze after the start screen – might introduce regressions
  • Reenable the support of asynchronous preparation of RBG layers
  • Do not enable RBG async preparation
  • Fix BIOS HLE interrupt usage
  • Fix sysclip size for rotation
  • Check if we need to send a SSH2 interrupt each time we are sending a MSH2 interrupt from SCU
  • Purge all the SCU interrupt and do not stack them
  • Changing SCU HIRQMASK can generate an interrupt
  • NMI interrupt has a specific handling and does not exit using a standard RTE command
  • Handle in priotity interrupts on SH2 core
  • Rework a bit the SCU interrupt handling
  • Reintroduce interrupt removal – Fix Princess Maker 2 – might impact Sakura Wars
  • Fix Sakura Taisen video
  • Fix line color offset on RBG compute
  • Fix Highway 2000
  • In case of rotated FB, increase the system clipping by twice the offset – It looks like a workaround – It is fixing Hang On ’95 blue line on the right
  • Better to use VDP2Ram access function
  • Fix VDP1 rotation for Hang on and Power drift. It looks like a scale might be still needed for Capcom Generations 4


Description: Sony PlayStation1 emulator

  • Android: Support for new lightrec API
  • Update lightrec to latest upstream
  • Minimize logs when loading a cheevos-compatible content
  • Cleanup retro_run() –
    – move input query into separate functions
    – move internal fps display to separate function
  • Hide other inputs from core options –
    – This adds a core option to hide some input options like multitaps, player ports 3-8 and analog-related fine-tuning options.
    – also combine dynarec-only options in one #define directive
  • More core option fixes –
    – This PR fixes core options and moves them to the related dynarec modes where they are implemented.

    LIGHTREC = relates to platforms that supports the new Lightrec mode
    NEW_DYNAREC = relates to previous dynarec implementation that is still used for some 32bit devices

    – Dynarec Recompiler core option, both dynarec implementation can be enabled or disabled

  • Move guncon options to update_variables –
    – This should stop unnecessary RETRO_ENVIRONMENT_GET_VARIABLE callback and log spamming
  • Fix some edge case where core can freeze upon loading content
  • Automatically disable Lightrec when no BIOS is present, take 2
  • cdriso: fix a disk switching deadlock when closing a CD image
  • ARM NEON: Fixed bug where MSB of a 15-bit BGR color could corrupt green value.
  • cdriso: fix a disk switching deadlock
  • unai: Add ARM-optimized lighting / blending functions

Addendum on UNAI ARM-optimized lighting/blending improvements –

“Looking at the generated ASM on 3DS, I thought I could squeeze out some extra performance by moving the inner lighting and blending functions to handwritten A32 assembly. This gives a medium improvement generally (3-5fps faster on the beach in Crash 1) and a large improvement when doing lots of blending (46-48fps before, 57-60fps after, behind the waterfall in Water Dragon Isle in Chrono Cross).

Some other notes:

  • I used the ARM11 MPCore (3DS CPU) timings for pipelining.
  • I had a few stall cycles during lighting, so I used them to preserve the MSB for lighting and blending, which saved a store, load, and orr later on. ~3-6 cycles saved overall by doing that.
  • I switched from u16 to uint_fast16_t, which is 32-bit on this platform. This saved a few useless uxth instructions for another few cycles. This shouldn’t affect other platforms, but I don’t know for sure. Could typedef if necessary.
  • A lot of the speed improvement in blending comes from not using two instructions per and. For example, & 0x8000 — the compiler preferred to mask out bytes using bic 0x7F00 and bic 0x00FF. Both slower and seemed less correct for what we’re trying to do.”


Description: 0.72 version of LRMAME

  • Fix cheat input dip switch option

LRMAME 2003 Plus

Description: 0.72 version of LRMAME with updates/enhancements

See CHANGELOG for all updates/enhancements on top of LRMAME 2003

  • New working game Gulun.Pa! CPS1 prototype
  • sample pause support for journey –
    uses pause instead of the mute hack implemented.
  • TANK III Joystick bootleg
  • Update samples.c
  • fix big samples dynamic loading when not an OST item
  • Update mcr2.c –
    Sepways.wav sample support for journey
  • Update inptport.c
  • Update foodf.c –
    Allows the player to face in the direction last applied.
  • A fix for Midway MCR3 game saving


Description: 0.139 version of LRMAME

  • Fix Selecting “Inputs (this game)” crashes Retroarch on Android (should also affect other ARM builds)
  • backport 12-bit wrapping fix

    Fix 12-bit wrapping behavior in YM2608/2610 ADPCM_A decoding, fixes some glitches in certain samples in the metal slug series, and likely other games. [Lord Nightmare, madbr]


Description: Gamecube/Wii emulator

  • Fix build for Windows x64
  • Request glcore context when video driver is gl

ParaLLEl N64

Description: Nintendo 64 emulator

  • Sanitize GL context requests
  • Update ParaLLEl RDP – about a ~10fps speed increase on Nvidia over previous version
  • Should fix Mega Man 64 graphics glitch (electric fence not visible)
  • Add ParaLLEl RDP
  • Add SI DMA Duration hack for Tetris 64
  • Use separate cache for DRAM and hidden DRAM.
  • Add DRAM flush and fix VI_REGISTER_OUTPUT.
  • Dump the hidden RDRAM as well.
  • Fix Seg Fault on Game Unload –
    When commit 11c1ae3 split r4300_execute into r4300_execute and r4300_init, it continued to check the “stop” variable, but this is undefined. Removing these checks resolves the seg fault and does not affect functionality.


Description: Magnavox Odyssey 2 emulator

  • Fix YES/NO keys and set 0 as default key
  • Change Action button to B to be more consistent with other cores, and remove the shortcuts to 1/2/3/4 keys (useless with the new virtual keyboard)
  • Add option for virtual keyboard transparency
  • Add graphical virtual keyboard


Description: 3DO emulator

  • Fix Haiku build
  • Remove NVRAM file and try rename again on initial failure –
    Windows doesn’t like renaming over files? This logic accomidates for both
    without needing platform specific behavior.


Description: Atari Jaguar emulator

  • Add Haiku build


Description: Game engine implementation for Rick Dangerous

  • Add Haiku build

vitaQuake 2

Description: Quake 2 game engine core

  • Add GLES Support and initial Rockchip platform
  • Fix intermission screen being unskippable.
  • Put on par with Vita build (Bump to v.2.3).
  • WiiU: Add build
  • PSL1GHT: Add build

vitaQuake 3

Description: Game engine implementation for Quake 3: Arena

  • Add Haiku build


Description: Game Boy Advance emulator

  • Libretro: Add cheevos support for GB/GBC
  • PS2: Update to newest toolchain


Description: 8bit Nintendo Entertainment System/Famicom emulator

  • PS2: Update to newest toolchain
  • Fix potential free(NULL); problems


Description: 8bit Nintendo Entertainment System/Famicom emulator

  • PS2: Update to newest toolchain
  • user-adjustable Zapper tolerance
  • reduce max Zapper tolerance to 20
  • MMC1 overrides are treated as ines 2.0, so its needs at least default values for prgRam and chrRam columns.

    Fixes FF1 pink screen due to unmapped CHRRAM.

  • Use proper geometry when switching NTSC filter on or off –
    – Width changes previously was not respected when using NTSC filter. With full use of overscan, NES width
    is 602 px when NTSC filter is used and 256 px on normal
  • Fix build when compiling without NTSC filter support
  • fixed 3DS build
  • Adjust Zapper tolerance; make Zapper input tolerance circular rather than rectangular by default
  • Fix timing when changing from PAL/Dendy to NTSC –
    – Happens when starting with PAL/Dendy region and changing to NTSC can cause frame to get stuck in 50 Hz
    – using RETRO_ENVIRONMENT_SET_SYSTEM_AV_INFO should remedy this.
  • NTSC: Remove height doubling/scanline effect –
    – We just use shaders for scanline if needed. NTSC + height doubling causes performance hit
    for some slow devices. Any decent platform should be able to handle scanline effect shaders at least.
  • ines.c: Simplify rom info logs and cleanup
  • Fk23c: Fix chr issues for some games –
    – Affects mostly waixing using mixed chr rom/ram modes (bit 2 of ram config register $A001)
  • Update ines-correct.h –
    – Add overrides for FK23C
    – Move MMC1 overrides
    – Move MMC5 overrides
  • Move overrides out of some mappers –
    Move mapper-based overrides out and use ines-correct.h if possible. Affects the following mappers below:
    – Move Cnrom database to ines-correct.h
    – Mapper 201 update
    – Mapper 91: Add Street Fighter III (Submapper 1) to ines-correct.h
    – Add dipswitch notes to m237
    – Update mapper9 (PC10 version of Mike Tyson’s Punch-out)
  • Move battery-backed prg ram override to ines-correct.h
  • Start expanding internal override database (ines-correct.h)


Description: 2048 game implementation

  • PS2: Update to newest toolchain
  • PS2: Apply color correction
  • DOS: Add platform support


Description: Sega Megadrive/Genesis/32X/CD emulator

  • PS2: Update to newest toolchain

Snes9x 2010

Description: 16bit Super Nintendo/Famicom emulator

  • libretro: added granularity in SuperFX overclock –
    There doesn’t seem to be any benefit of overclocking above 15 MHz
    (150%). The user should be allowed to be more precise with their
    overclock setting now.
  • Fix MMC reg for 64bit builds –
    Fixes a segmentation fault when playing large ROM games.
  • Fix MMC bank register bit 7 (FuSoYa) –
    Fixes the 64Mbit ExLoRom map.
  • ROM: fail if ROM is invalid –
    Fixes an issue whereby a non-SNES file would cause a segmentation fault.
    This may occur if the selected ROM is corrupt, or a file has an
    incorrect extension.
  • APU: remove unused SoundSync –
    Additionally modified the resampler to use buffer size as a parameter
    instead of the number of samples within the buffer. Previously, the
    buffer size was being changed to the number of samples, and then changed
    back within the resampler.
  • snes9x: add defines for unused multi-cart support –
    The compiler was already optimising these unused functions out. The
    libretro core can define SNES_SUPPORT_MULTI_CART 1 to re-enable support
    for multi-cart in the future.
  • snes9x: refactor defines and remove overscan –
    Out of bounds memory fix from
  • snes9x: APU: Fix buffer overrun –
    This fixes linking with LTO.
    Disable audio if an error occurs in init instead of continuing and
  • snes9x: reduce APU buffer to 64ms –
    I believe this to be a more sane setting than a 1000ms buffer.
  • snes9x: backport config from upstream –
    Most options were not available in English, despite it being the default
    language. All the options that were available in Turkish are now
    available in English.
  • snes9x: fix headercount increment
  • libretro: fix pitch measurement


Description: Game engine core for Doom 1/2, Ultimate Doom, Final Doom

  • Switch from ad-hoc endianness handling to retro_endianness.h


Description: Vectrex emulator

  • Fixed colour conversion (7 bit mono to RGB1555).
  • support analog controllers
  • Make line drawing code more efficient by doing RGB conversion once per line only
  • Nicer point shape
  • Allow scaling of vector display
  • more flexibility in adjusting display – allow for scaling and shifting to fit overlays


Description: SNK Neo Geo CD emulator

  • CD-ROM controller logic split into a separate file
  • Y Zooming don’t need a ROM file anymore
  • New system to identify and patch BIOS, should allow unknown BIOS to run.
  • BIOS files don’t need to have a specific name anymore they are identified by contents
  • Support for Universe BIOS 3.3
  • BIOS name in the menu now includes filename
  • Add synchronous CD operation mode
  • Vita: Use synchronous CD operation mode
  • Vita: Add build
  • 3DS: Add build
  • WiiU: Add build
  • PSL1GHT: Add build
  • Emscripten: Add build
  • Implemented horizontal interrupt masking (not verified on real hardware)
  • Fix CDROM music endianness
  • Fix big-endian support


Description: MP3 Karaoke audio player

  • Properly send logging to proper place –
    use logging interface as much as possible with stderr as fallback
    rather than being inconsistent
  • Swap frame before passing it to audio_batch_cb on bigendian –
    audio_batch_cb expects native-endian frames and libmad gives little-endian
    frames. Hence on big-endian we need to swap
  • libmad: Fix big-endian support


Description: Fairchild Channel F emulator

  • Switch from ad-hoc endianness to retro_endianness.h
  • separated CHANNELF HLE code


Description: Wolfenstein 3D game engine core

  • Latest updates from upstream
  • iOS/TVOS: Add build
  • WiiU: Add build


Description: Commodore Amiga emulator

  • Libretro improvements
  • Two joystick support with automatic switching
  • Define controls close to PUAE default. Use right analog stick as mouse and L2-R2 as mouse button.
  • Add working virtual keyboard support
  • Emulation resolution handing is better (especially change). 2nd mouse button working.
  • Solve right mouse button non working
  • Solve different video resolution
  • Solve audio glitches


Description: Commodore Amiga emulator

  • Disable waiting blits by default
  • Remapping fixes + clarifications
  • Zoom mode horizontal croppings + cleanups
  • Prefixes for hidden core options
  • Better sorting in M3U generation
  • Geometry fixes, Keymap update, Cleanups
  • WHDLoad fixes –
    – Custom parameter not working on many cases
    – Error messages and copy skips if Kickstart filesizes are not correct
  • Model preset overrides, Optional region search
  • Core option for D-Pad joystick/mouse switching
  • Model config overhaul
  • NTSC fixes
  • Optional region forcing with No-Intro tag support
  • WHDLoad update
  • Sort generated M3Us, Statusbar + glue updates
  • Fix android build
  • New defaults for CPU and Drive Sound Emulation, Sound cleanups
  • User-friendly warning messages for Kickstarts and CAPSImg
  • Attempt to fix crash when reloading core on static builds
  • Fix ZIP Browse Archive
  • M3U ZIP fix
  • Hor+Ver positioning fixes
  • Add “Remove Interlace Artifacts” core option
  • Backport interlaced double line field mode to replace old frame mode
  • Fix sound filter from effectively being always Automatic at startup
  • Fix filter type update, Improve zoom
  • Add core option for CD startup delayed insert, Remove previous disc change detect trickery
  • Change model force hierarchy, Option label updates
  • Android unzippings yet again
  • Core option for muting floppy sound when drive is empty
  • Automatic horizontal centering improvement
  • ANDROID X86: Fix build
  • Fix amd64 compilation –
    m68kops for amd64 is empty, use generic exactly how it was before the rewrite
  • Rewrite libretro m68k.h and m68kops.h to use non-libretro variants –
    They encapsulate per-cpu optimizations. There is no reason to
    have a version for libretro
  • Rewrite maccess.h using new retro_endianness
  • Automatic zoom improvements
  • Control improvements:
    – Enabled D-Pad as mouse in analog joystick mode to help out menu traversing, otherwise D-Pad does nothing unless toggled to mouse mode
    – Added core option for inserting RetroPads to joystick ports in different order (for Arcadia, Dyna Blaster etc.)
  • Fix vertical touch alignment on keyboard while zoomed
  • Global conf file, MultiDrive via Disk Insert
  • CDTV core option
  • Statusbar finetuning
  • Disk Control additions:
    – Transparent ZIP support in M3U parsing
    – Insert Disk support for M3U/ZIP/etc


Description: Commodore 64 home computer emulator

  • Keymap core option + rework
  • Autoloadwarp enhancement, Core option label tweaking
  • Remapping fixes + clarifications
  • Fix Plus4 cartridge launching, Statusbar fixes
  • Autoloadwarp fix for D81s, Statusbar cleanups
  • Freeze cartridge to reset types
  • More robust floppy autoloadwarping
  • VIC-20 updates:
    – RAM block set tidying
    – Fixed starting carts in M3Us
  • Achievements environment
  • Core option for 2nd SID, Warp mode rework
  • Automatic Load Warp core option
  • NBZ support
  • Dump available and not yet core optionized resources for easier ‘vicerc’ usage
  • Disk Control finetuning –
    – Fallback to drive 8
    – Remove “.” from image type detection extensions to also match cases like “.hidden-d64”
  • Fixed and enabled printer
  • Better sorting in M3U generation
  • Disk Control updates –
    – Allow CRTs & PRGs in M3Us
    – Removed redundant short pathname label fallback in widget
  • Automatic region fixes
  • Zoom mode honing –
    – Changed manual mode operation from automatic to optional
    – Corrected non-wide calculations
    – Added VIC-II/VIC/TED border info to sublabels
  • Core option reorganizing –
    – Separated VICE option variables from core option variables
    – Prevented updating VICE variables to the same variable
    – Simplified palette options
    – Fixed CBM2 embedded palettes & added missing PLUS4 embedded files
    – Removed & disabled non-working CBM2 models (510 not selectable in standalone, therefore no point fixing embedded files)
    – Fixed Super VIC memory expansion
    – Fixed CBM2 crash on higher resolution models
  • Work disk improvements –
    – No need to reset
    – Fixed start content
  • Automatic model core options for x64 & x64sc –
    – Scans for “NTSC|(USA)” and “PAL|(Europe)” tags
    – Both PAL/NTSC and C64/C64C can be preferred
    – Default is “C64 PAL Automatic”
  • Sync finetunings –
    – GetTicks returns a ticker from get_time_usec instead of fake microSecCounter
    – Bypassed internal frameskips and delays
    – Warp mode speed improved
    – Statusbar updates FPS in 1 second intervals instead of 2 & shows real FPS from both warp and fastforward
  • Work disk core option with device selection
  • Fix for autostart detection of D71
  • Work disk core option with device selection
  • Fix QNX build
  • Zoom improvements –
    – Presets for usual suspects (16:9, 16:10, 4:3, 5:4)
    – Hardcode exceptions minimized, math maximized with science
  • Fix Emscripten build
  • Switch from adhoc endianness handling to retro_endianness.h
  • Sort generated M3Us
  • Better retro_get_region, Embedded additions
  • Include NIBTOOLS for automatic NIB->G64 conversion
  • Manual cropping core options
  • Remove border stuff
  • Zoom overhaul, Reorganizing, Cleanups
  • JiffyDOS & GO64 for C128
  • Direct hotkey for joyport switching, TDE + DSE enabled by default
  • Disable JiffyDOS with tapes also on static platforms
  • Rename mouse_x to retro_mouse_x in retrostubs.c to avoid confusion with mousedrv.c
  • Fix compilation on Vita
  • PET fixes (embedded data, keyboard layout) + Cleanups
  • Extended ZIP+M3U Disk Control
  • Fix model change not triggering geometry change with borders disabled
  • PSL1GHT: Add build


Description: Commodore 64 emulator

  • Disable compilation of CmdPipe.cpp on libretro
  • Add safeguard in case of thead allocation failure
  • Resync libco
  • Add logging
  • 3DS: Add build
  • PSP: Add build
  • Vita: Add build
  • QNX: Add build
  • QNX: Fix cmdpipe
  • Exclude cmdpipe on PSP1 and Vita
  • Don’t use sigaction on PSP1 and Vita
  • Don’t use chdir and getcwd on PSP1 and Vita
  • Change pulsehandler not to use signals on libretro


  • Fix declaration of INLINE on Android
  • Support for big-endian Linux
  • Switch from ad-hoc endianness to retro_endianness


Description: 8bit Nintendo Famicom/NES emulator

  • Fix scratchy audio in Super Mario Bros. 3 and others


  • 3DS: Render at half-width
  • PSP: Render at half-width
  • Android: Fix build
  • Gamecube: Add build
  • PSL1GHT: Add build
  • WiiU: Add build
  • Big-endian support
  • avr8: Fix initial memory cleaning –
    Current code zeores-out only part of intended array
  • Disable av8::idle on libretro –
    It’s not used by libretro
  • Disable recording code on libretro –
    It’s not used by retroarch but it links with popen that is not
    available on many of retroarch platforms
  • Support compilation with g++ 4.6


Description: Game Music Emulator core

  • Gamecube: Add build
  • Wii: Add build
  • WiiU: Add build
  • PSP1: Add build
  • Vita: Add build
  • Use retro_endianness.h instead of ad-hoc endianness defines

Cap32 / Caprice


  • Fix video glitch on big-endian
  • Replace ad-hoc MSB_FIRST with retro_endianness.h
  • QNX: Fix build
  • PSL1GHT: Add build



  • PSL1GHT: Add build
  • WiiU: Add build
  • Wii: Add build
  • Gamecube: Add build
  • Filter-out identical calls to SET_GEOMETRY
  • Fix disk-reading routines on big-endian –
    Current approach of swapping after reading/before writing is sound
    in theory but in current codebase it’s difficult to track and leads easily
    to double-swaps. Just swap the values right before use and at assignment
  • Optimize byteswap
  • Fix big-endian video rendering
  • Disk endianness fix
  • Fix arguments to ReadPort/WritePort –
    Passing 32-bit value instead of 16-bit has undefined results. It works
    on some platforms and fails on other. Fix it properly
  • Support big-endian systems
  • Use retro_endianness instead of SDL_BYTEORDER
  • PSP: Add build
  • Vita: Add build


Description: Home computer MSX emulator

  • Remove leftover endiannness defines
  • Fix arguments for coinDeviceCreate –
    Argument mismatch is fatal on emscripten
  • PSL1GHT: Add build
  • Fix non-smooth scrolling in PAL 50Hz



  • Move from adhoc endianness to retro_endianness
  • PSP and Vita fixes
  • QNX: Add build
  • PSL1GHT: Add build



  • Latest updates from upstream

Bk Emulator

Description: BK-0010/0011/Terak 8510a emulator

  • Wii: Add build
  • Gamecube: Add build
  • Use unsigned int instead of uint –
    For mingw compatibility
  • PSL1GHT: Add build



  • Emscripten fixes



  • Vita: Fix build
  • QNX: Add build


Description: Sharp X68000 Emulator

  • Vita: Add build
  • QNX: Add build



  • Emscripten: Fix build
  • Fix path to auth database.
    Current path ends up in current working dir which might be anywhere,
    unwritable or not even exist as a concept.
  • Don’t attempt to run main loop after failure.
    It only clouds what errors have occurred
  • Android: Now goes ingame and no longer crashes at startup, doesn’t render blocks yet though

Mr. Boom


  • QNX: Add build
  • Emscripten: Fix build
  • support big-endian linux
  • PSL1GHT: Add build


Description: X Millennium Sharp X1 emulator

  • Android: Fix compilation
  • Wii: Add build
  • Gamecube: Add build
  • Add big-endian support
  • PSL1GHT: Add build
  • Add iOS arm64 build support
  • PSP1 scaling messes when source is larger than psp horizontal resolution,
    hence render at quarter resolution
  • PSP: Add build
  • Fix QVGA support: Code for rendering at quarter of resolution is broken for libretro files
    altogether as it was never really implemented.

    Highres QVGA rendering forgot horizontal offset resulting in single-color lines,
    fix it as well

  • Vita: Add build
  • QNX: Add build


Description: Atari 800 emulator

  • Support big-endian linux
  • PSP: Fixes
  • config: don’t use unaligned access on RISC – enables it only on x86 and m68k. Mirror it in our manual config
  • Use frame counter instead of real clock



  • Allow enabling or disabling FM sound (YM2413)
  • Prevent potential crash and cleanup –
    – set max geometry height to 240
    – remove some unnecessary functions and variables
    – move some callbacks from retro_init to retro_load_game
  • Add core option (Remove Border) –
    – removes left border (overscan). Works on SMS only.
    – General video renderer cleanups
  • Add core options for region and hardware type overrides
  • Add proper support for PAL content –
    – timing/region is detected using internal database
    – fix to rom names on rom info log
  • Improve performance when using NTSC filters –
    – Removes Sony decoder core options
    – Removes doubling of height when using NTSC filters
    – Use standard integers where applicable
  • Allow core to safely close when a required bios is not found –
    – For coleco rom content, it requires the colero bios to exists. So if none is found,
    just allow core to safely exit. SMS roms does not require bios to be playable, so no check is necessary for it.
  • Add support for colecovision roms (Experimental)


Description: Neo Geo Pocket (Color) emulator

  • Fix input mapping typo

TGB Dual

Description: Game Boy (Color) emulator with splitscreen link cable support

  • 3DS: Update target



  • Fixes graphics issues – Intellivania not working on emulator
  • Correctly detect MTE Test Cart
  • Fixes #40 – Intellicart roms w/o A8 –
    Detects Intellicart roms using a different method for files that don’t begin with 0xA8
  • Expose RAM for Retroachievements
  • OSD, Keyboard keypad controls –
    keys 0-9 as expected. [ and ] replace C and E
    OSD updated, real messages replace cryptic “colored pixel” loading error feedback



  • 3DS: Fix build
  • PSL1GHT: Add build



  • Update to 0.220
  • add 4-way joystick simulation option
  • Correct 4way support



  • PS2: Add build
  • Auto load BASIC 1 cartridge instead of BASIC 128 cartridge on TO7/70
  • Add virtual keyboard transparency option
  • Add TO8/9 keyboard
  • Update TO8 keyboard image and add TO7&TO7/70 virtual keyboards
  • Add virtual keyboards for all models
  • First version of on-screen virtual keyboard


Description: Game Boy Advance emulator

  • Fix cheevos support

Libretro Cores Progress Report – February 29, 2020

Our last core progress report was on February 5, 2020. Below we detail the most significant changes to all the Libretro cores we and/or upstream partners maintain. We are listing changes that have happened since then.

How to update your cores in RetroArch

There are two ways to update your cores:

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 the core from the list that you want to install.

Vitaquake 2

Description: Quake 2 game engine core

Vitaquake 2 is now available for the first time on 3DS and Android. It uses the software renderer on those platforms for now.

  • Bugfix: Analog input descriptors added
  • Bugfix: Actually exit on Sys_Quit and Sys_Error. They intend to exit. Not doing so only result in weird crashes later
  • Bugfix: Fix crash in soft renderer when going underwater on increased resolution
  • Port: Ported vitaQuake 2 core to 3DS (software renderer only).
  • Port: Ported vitaQuake 2 core to Android (software renderer only).
  • Softrend: Fix crash in soft renderer when going underwater on increased resolution


You’ve been able to read about the new core ECWolf in our separate blog article. Further developments since then have been a 3DS port and analog deadzone options.

  • Analog deadzone options
  • Port: Ported ECWolf to 3DS


Description: TIC-80 emulator core

  • Updated to latest version


Description: Sega Dreamcast emulator
We reported before in two separate articles this month on the mipmapping accuracy improvements. There have been other developments since the last progress report –

  • x64 DSP JIT support – audio DSP enabled should now have far less overhead than before
  • users now cannot force enable div matching [flyinghead]
  • disable div matching for Donald Duck Goin Quackers [flyinghead]
  • (NAOMI) parent rom name was incorrect for GDROMs [flyinghead]
  • (NAOMI) add ringout eeprom + some crcs [barbudreadmon]


The fast tile-based renderer (a new addition) can give a very welcome increase in performance. Note that only the ‘accurate’ renderer will display any graphics with 32X-based games, so only use tile-based rendering for now with regular Genesis/Mega Drive games.

  • Added an option to change the renderer from the default “accurate” line-based renderer to an alternative “fast” tile-based renderer, which may improve performance on slower devices such as the PSP. [bmaupin]


  • Fix periodic ram_translation_cache crashes
  • Add manual frame skipping


  • Fix Android compilation [phcoder]

    Despite what the comments say Openlara uses
    functions available only in glesv3. Hence we need to
    force GLES3 and not GLES2. Then we need to fix compile error.
    It was due to requiring too low version of Android before it
    had GLESv3


We talked about the serialization support before in prBoom. New improvements since then is that the wiggle fix is finally fixed now for ARM-based platforms like Android and iOS. Previously you’d need to have Wiggle Fix turned off if you didn’t want the floors and ceilings to look glitchy.

  • Implemented serialization support. Rewinding and runahead has been tested.
  • Use fixed point in precise flat calculation. This should work well now also in ARM and other platforms
  • Fix double free on failed load

DOSbox SVN/Dosbox Core

  • Latest SVN updates

Final Burn Neo

  • Latest updates from upstream


  • Latest updates from upstream


The biggest improvement since the last progress report [and the articles that followed it] definitely has to be runahead second instance support.

  • [3DS] Tweak compile-time options to increase performance [justinweiss]
    Adjusting a few things in the makefile to get some easy performance boosts.

    Did some measurement with Crash Bandicoot idling on the beach he starts on in Crash 1. All of these together brought it from ~44.5 fps to ~50.9.

    Tried all four UNAI options, this was the fastest by ~0.5fps.

  • [3DS] Fix dynarec crashes [justinweiss]
    After the dynarec writes new instructions, it has to flush the
    instruction and data caches. Some of these flush operations are
    privileged on the 3DS, so the clear cache functions have to run
    through svcBackdoor. The Nintendo implementation (and CFW
    reimplementation) of svcBackdoor has a problem where interrupts and
    context switches will cause crashes.

    Even though we can disable interrupts in the flush function, there’s
    still a window of time between svcBackdoor being called and the
    function being run where an interrupt will corrupt the stack.

    Luma3DS implemements a svcCustomBackdoor call we can use that also
    runs a function in supervisor mode, but uses an implementation that
    avoids this problem.

  • Fix second instance runahead [ZachCook]

Beetle PSX

Some crucial accuracy improvements to the hardware renderers means that Gran Turismo 2 is finally glitch-free with both OpenGL and Vulkan. Before, the HUD and other parts of the screen would flicker during gameplay.

  • Separate lightrec PGXP and non-PGXP rw_func [ZachCook] –
    When tested with soul blade this increases dynarec performance by ~1%
    for non-PGXP, and ~2% for PGXP as it always uses rw_func due to the fast-path
    being disabled for it.

  • Add frame duping support to RSX Vulkan [ggdrt]
  • OpenGL: Eliminate redundant glClear call [ggdrt]
  • Add accurate timing macros and report noninterlaced by default
  • Vulkan: Delay VRAM framebuffer size calculation to latest possible moment in
    Vulkan renderer; don’t rely on external timing of UpdateDisplayMode.
  • Add GP1(05h) command to rsx and parallel-psx [ggdrt]
  • Vulkan: Add Display VRAM core option support [ggdrt]
  • parallel-psx/Vulkan: Decouple MDEC and SSAA filter logic [ggdrt]
  • Limit image_offset range to prevent segfault [ggdrt] –

    Also update image_offset formula to better match core option info

  • Update rsx hook sequence in GPU reset and GPU restore state [ggdrt] –

    Fixes hardware renderer glitch where a portion of the BIOS PS logo would
    briefly flicker into the bottom right corner of the viewport after the
    normal BIOS animation.

  • Make scanline core options dynamic for sw renderer [ggdrt]

Desmume 2015

  • Blank screen gap for non-hybrid modes [Exalm]
  • Account for screen gap for touch input in top/bottom mode [Exalm]


  • 3DS: Fix build
  • Update to mgba 0.8.1


  • Fix -mem_wait audio distortion

    Occurred when running in mode V1S
    due to front-loading DMA waits on
    each vertical sync.

  • ParaLLEl N64

    We’ve run several stories on ParaLLEl N64 this month already. In addition to the changes listed here, an Angrylion VI performance enhancement has been implemented which makes the VI filtered modes have less overhead than before.

    • Fixed VI performance issue caused by false sharing

      As pointed out by Themaister, the rseed array in vi.c suffers from false sharing, since its element size is smaller than the cache line size.

      This improves VI performance by no less than 30%. [Themaister/ata4]


    Description: Commodore Amiga emulator

    This core is fast becoming one of the best ways to emulate the Amiga courtesy of sonninos.

    • Extended ZIP support [sonninnos]
    • WIIU build fix attempt + option display fix [sonninnos]
    • WHDLoad.hdf as raw files, Keylist fix, 68020 back to defaults [sonninnos]
    • Allow launching directories as hard drive images [sonninnos]
    • Save state fixes [jdgleaver]
    • Use memory-based save states (serialization support)
    • Reverted 68020 CPU shenanigans, Minor font fix, Less logging clutter [sonninnos]
    • New VKBD+statusbar fonts, RetroPad + CD32 Pad face button options [sonninnos]
    • Separate resolution & line mode core options, Automatic line mode [sonninnos]
    • Automatic resolution, Deinterlacing fixed, Statusbar fillings [sonninnos]
    • WHDLoad.hdf update [sonninnos]
    • Analog joystick device + minor reorganizing [sonninnos]
    • Resolution changing without reset [sonninnos]
    • Filesystem fixes
    • Model options for A4000, 68030+68040 [sonninnos]
    • “gl” video driver max_width fix [sonninnos]
    • Readme + core option label updates & ‘vsynctimebase’ tuning [sonninnos]
    • SuperHires video resolution & glue organizing [sonninnos]


    • Update to ScummVM 2.1.1

    Opera (formerly 4DO)

    Description: 3DO emulator core

    Genesis Plus GX

    Description: Sega Genesis/Mega Drive/Master System/Game Gear emulator

    • Android: Add OPLL sound core


    Description: NES emulator core

    NOTE: All changes courtesy of negativeexponent (unless expressly attributed to somebody else)

    • Do overscan cropping after the ntsc frame is generated. this allows
      removing left and right screen artifacts when using horizontal crop like
      what you would see happen in TV when adjusting horizontal size (HSIZE).
    • add core option that implements NTSC scanline effects. This requires
      framebuffer to double the height, so a define is added (NTSC_SCANLINES at
      the top of libretro.c) to disable this on some low-memory platforms or just disable NTSC filters altogether.
    • Mapper 235 update support for 1MB/2MB carts and cart with unrom block
    • CNROM: Minor database cleanup
    • Use existing crc32 database for Bingo 75 (Asia) (Unl), this moves checksum check on mapper side instead of unif overrides.
    • m269: Deallocate memory on exit
    • Update mapper 15 based on latest notes
      – bit 7 acts as A13 only on mode 2
      – prg mask now 0x3F of data latche etc.
      – unrolled loops
    • Merge mappers 225 and 255 since they are basically the same
    • re-implement extra RAM as its required for some multicarts
    • Fix colour emphasis support for NTSC filter & raw palette + nes decoder shader

      – this implementation is based on a more accurate colour emphasis from fceux.

      – The raw palette + nes decoder shader was kinda incomplete since the implementation was based on
      a per-frame basis which means that the emphasis bits were read once and applied to the whole frame. This
      means that some games that uses a per pixel or per scanline emphasis would not appear correct. The more
      accurate implementation reads emphasis bits from bits 5-7 of PPU[1] and saves this info in a separate frame.

      – The same implementation is also used to fix emphasis for the ntsc filter.

    • Fix palette for vs. system
    • use fixed value for ntsc width and when its cropped
    • Fix colour emphasis when using palette presets –

      This is an issue i found when implementing the NTSC filters. Currently when using palette presets,
      no clour emphasis is seen on games that supports it. This is cause because the palette table is
      fille with the same 64*3 colour info.

      Using custom palette (palette file) and default both creates the emphasis as expected. So internally,
      fceumm is able to support such feature.

      The fix is to generate the base palette (64 * 3 with each triplet representing rgb colour), and then
      send this internally using FCEUI_SetPaletteArray() to fill the colour table with emphasis instead.

    • (3DS) Disable NTSC filter [jdgleaver]
    • (Android) Add NES NTSC filters
    • Implement blargg NTSC filters –

      – this implements blargg’s nes ntsc filters using core options
      – an optional height doubling is also added but disabled for performance reasons (might make that optional as a core option)
      – since PS2 and PSP have their own blitter branches, these platforms do not have the ntsc filters since i dont have the means to test on those systems.
      – compile with HAVE_NTSC=1 to have these options, HAVE_NTSC=0 disabled filter including core options
      – HAVE_NTSC=1 is set as default, other than PS2 and PSP as stated above.

    • Add mapper 218
    • m227: Implement chr-ram write protect
    • Add UNIF BMC-WX-KB4K (m134) to supported boards
    • Update implementation of some unlicensed mappers

    • Update mapper 91
    • Add mappers 111, 356, 269, 353
    • backport mapper 111 (Cheapocabra or GTROM) from fceux
    • Add BMC-SB-5013 (m359) and UNL-82112C (m540)
    • Add mapper 543, 550, 516
    • MMC1: Better work ram and battery saves support for size greater than 8K
    • Add mappers 382, 534, 539
    • Update mapper 150/243 (unif UNL-Sachen-74LS374N)
    • Update mapper 45 –
      – fix starting register value
      – fix memory write range to 0x6000-0xffff
    • Add mappers 360, 533
    • Minimize core options shown by default
    • updates to region-related settings and overclocking, UNIF now sets ines mapper if available (used for overrides etc)
    • Unif: Pass iNES mapper number to cart struct when available


    Description: Game Boy/Game Boy Color emulator

    • Add optional LCD ghosting effect –
      This backports the LCD ghosting effects that were recently added to mGBA

      It replaces the existing Mix Frames core option with Interframe Blending. The old Accurate and Fast frame mixing settings have been renamed to Simple (Accurate) and Simple (Fast) – these perform the same 50:50 mix of the current and previous frames as before, required to achieve correct rendering of games that rely on LCD ghosting for transparency effects.

      In addition to these settings, there are now LCD Ghosting (Accurate) and LCD Ghosting (Fast) options. The former recreates the LCD response effect of RetroArch’s Gameboy Shader. The latter is similar, but uses a single accumulation buffer – which is more efficient, but lacks the subtlety of the shader implementation.

      Here are some stats showing the typical increase in performance overheads when using the various methods:

      Simple (Accurate): 30%
      Simple (Fast): 13%
      LCD Ghosting (Accurate): 48%
      LCD Ghosting (Fast): 28%

    • Do not add pointers to memory map if they are not available –

      skips sram when no sram is available
      skips extra RAM banks if not running in GBC mode

    • tvOS support


    • Safely power off console before closing content [jdgleaver] –
      Thanks to the efforts of @Sanaki, it was discovered that certain games do not correctly update their EEPROM save data unless the virtual Pokemon Mini console is powered off before closing content. Affected titles include Pokemon Pinball Mini and Pokemon Race Mini – up until now, it was generally thought that saving was completely broken in these games.

      This PR adds an automatic power off event to retro_unload_game(). This ensures saves are always written without any special intervention from the user.

      The issue has existed forever, and I believe it affects the standalone version of PokeMini as well – great to finally get this fixed!


    • Fix Android build


    Description: Sega Saturn emulator based on Yabause

    • Latest updates by F-Care


    Description: Commodore 64 home computer emulator

    Statusbar stays at the screen border + new position options: Top or Bottom

    RetroPad face button options: Rotate, Jump, Rotate+Jump

    Mouse type core option, usable with D-Pad + left analog + mouse, covered at least:

    Arkanoid (Paddles port 1)
    Arkanoid 2 (1351 port 1)
    Maniac Mansion Mercury (1351 port 2)
    Speeds are vastly different in Arkanoid & Maniac Mansion, so it was impossible to have both cases perfect with default options. VICE allows only one potentiometer device at a time, therefore it applies to the current RetroPad port. Pretty much everything else is familiar stuff from the PUAE core.


    Defaulted ReSID sampling to “Fast” on low-power platforms
    Minor reorganizing

    • Mouse support [sonninnos]
    • RetroPad face button options, More statusbar options [sonninnos]
    • New fonts + cleanups [sonninnos]

    Final Burn Neo

    Description: Multi-system arcade emulator core

    • Latest updates