123 / 22-08-2021





Ares (Near/Byuu's last project) has been continued by new developers (including Luke from Cxbx-r)..! With that in mind,  it's a multi-system emulator focuses mainly on accuracy and some of its exhaustive features include but are not limited to native multi-platform UI adaptive sync, dynamic rate control, save states, run-ahead, rewind or fast-forward and much more..!

Current supported systems

  • Famicom + Famicom Disk System

  • Super Famicom + Super Game Boy

  • Nintendo 64 (Parallel-RDP port)

  • Game Boy + Game Boy Color

  • Game Boy Advance + Game Boy Player

  • Master System + Game Gear

  • Mega Drive + Mega CD

  • SG-1000 + SC-3000

  • PC Engine + PC Engine CD + SuperGrafx

  • PlayStation One

  • MSX + MSX2

  • ColecoVision

  • Neo Geo Pocket + Neo Geo Pocket Color

  • WonderSwan + WonderSwan Color + SwanCrystal + Pocket Challenge V2

Most Recent Changes


It includes significant improvements to the emulation of the ColecoVision, SG-1000 and the Game Boy/Game Boy Color. 

This release brings the compatibility rating for ColecoVision and SG-1000 to four stars.

This means that we have 100% compatiiblity with both of those libraries, with the only exception being the few games that require additional peripherals (driving controllers; touchpads, etc). 

The Game Boy improvements are significant, but not quite enough to increase the compatibility rating at the present time, even so, Many more games are playable than before.

Finally, a few tweaks to MegaDrive emulation have improved compatibility, reduced the occurance of video corruption, and improved performance of the Sega 32X emulation.

  • ColecoVision: Initialize ram to 0; fixes a crash in The Heist [Luke Usher]

  • ColecoVision: Disable cartridge rom mirroring; fixes Sammy Lightfoot [invertego]

  • ColecoVision/MSX/SG-1000: Initialize VRAM to 0; fixes various games [invertego]

  • Game Boy: Check window x-coord instead of only y-coord; improves the Acid2 test rom [Luke Usher]

  • Game Boy: Only raise STAT interrupt when display is enabled; fixes Cool Hand [invertego]

  • Game Boy: Implement HALT hardware bug [Meepster99]

  • Game Boy: Fix relationship between LY and STAT interrupt; fixes Elite Soccer, Mouse Trap Hotel, Shantae [invertego]

  • Game Boy: Only trigger STAT interrupts at the start of OAM search; fixes Mortal Kombat 3 [invertego]

  • Game Boy Color: Fix HDMA5 bit.7 reads; improves a significant number of GBC games [invertego]

  • Game Boy Advance: Simulate standard GBA instead of Game Boy Player; fixes GBA Video titles [Luke Usher]

  • Mega Drive: Implement support for Sonic & Knuckles merged roms; fixes Sonic 2K, Sonic 3K [Luke Usher]

  • Mega Drive: Implement support for SRAM/EEPROM when using the SEGA Mapper; fixes Demons of Asteborg [Luke Usher]

  • Mega Drive: Default to 'accuracy' VDP; improves compatibility at the expense of performance [Luke Usher]

  • Mega Drive: Optimize how often the emulator synchronises between components; offsets the cost of the previous change [Luke Usher]

  • Nintendo 64: Maintain Parallel-RDP as a subtree; simplifies compilation [Luke Usher]

  • SG-1000: Implement support for roms greater than 32KB [Luke Usher]

  • SG-1000: Implement support for Taiwan Type-A/Type-B mappers; fixes unlicensed Taiwan releases [Luke Usher]

  • SM83: Fix DAA instruction [Meepster99]

  • TMS9918: Implement multicolor mode; fixes various SG-1000/ColecoVision games [invertego]

  • TMS9918/Master System/MSX: Allow sprites to bleed off top/left screen edges [invertego]

  • ares: Rename lucia to desktop-ui to better represent it's function [Luke Usher]

  • mia: Improve N64 save-type database [jeltaqq]

  • mia: Add support for UNF extension, alongside UNIF and NES [Shideravan]

  • nall: Add macOS deployment target flags; fixes ares on macOS 10.14 [MerryMage]

  • ruby: Give PulseAudio higher priority than ALSA on Linux Systems; ALSA was causing frame-rate issues [Luke Usher]


This release primarily provides improved Neo Geo Pocket/Neo Geo Pocket Color and Sega 32X emulation.

The entire Neo Geo Pocket/Color library is now thought to be playable, with minor graphical issues in four titles. 

A small number of SEGA 32X games are now playable, although most still experience graphical and/or audio issues.

  • ColecoVision: Clear top bit of controller port reads; fixes Defender [invertego]
    Neo Geo Pocket: Allow BIOS to handle the boot process [invertego]
    Neo Geo Pocket: Copy SNK logo from BIOS during fast boot; fixes Metal Slug: 2nd Mission [invertego]
    Neo Geo Pocket: Fix address used to test ram initialization [invertego]
    Neo Geo Pocket: Initialize Neo Geo Pocket port 1 to zero; fixes Dynamite Slugger [invertego]
    Neo Geo Pocket: Many improvements to 'fast boot' [invertego]
    Neo Geo Pocket: Re-enable savint ram to disk on unload [invertego]
    Sega 32X: Implement FM/Framebuffer access bit; fixes Spiderman [Luke Usher]
    Sega 32X: Implement RV bit [Luke Usher]
    Sega 32X: Optimise SH7604 recompiler min-cycles for 32X; fixes Knuckles Choatix & Virtua Fighter [remutro]
    Sega 32X: PWM DREQ and timer are different things; fixes PWM audio in many games [Luke Usher]
    Sega 32X: Used cached interpreter instead of recompiler [Luke Usher]
    TMS9918: Fix sprite size emulation; fixes many graphical issues in ColecoVision/MSX/SG-1000 [invertego]
    TMS9918: fix interrupt behavior [invertego]
    hiro: Fix browser dialog filters on macOS [Luke Usher]
    hiro: Force GTK3 to use X11 backend; fixes a crash under Wayland [thrimbor]
    lucia: Disable fast boot by default [Luke Usher]
    lucia: Support digital presses from analog inputs [invertego]
    mia: Add workaround for underdumped Delta Warp rom [Luke Usher]
    mia: Improve Nintendo 64 save chip database; fixes saving in some titles [sp1187]
    nall: Enable LTO by default on non-debug builds [Luke Usher]
    nall: Speed up recompiler codegen [Luke Usher]
    sh2: Allow cores to determine an ideal minimum recompiler block size [Luke Usher]
    sh2: Optimised code-gen for the interpreter [Luke Usher]
    sh2: Recompiler should invalidate single blocks, not entire pools [Luke Usher]
    tlc2900h: Fix immediate mask in BIT #,r; fixes Pocket Tennis [invertego]
    z80: Correct the effect of IE on the next instruction; fixes audio drop-out in Neo Geo Pocket games [invertego]


It's a minor point release for v121.

This is identical to Near's final release of v121, with some additional patches to fix compilation on gcc (windows/linux) and macOS.


I've released ares v121. Because it is not fully complete or stable, it is released as source code only.

The license is now once again ISC instead of CC-BY-NC-ND.

Master System, WonderSwan, and WonderSwan Color compatibility have increased to 100%, with no remaining known bugs.

The Neo Geo Pocket is very close to 100% now with one issue remaining, where sound effects sometimes mute in games.

Nintendo 64 compatibility has increased to above 80% thanks to corrections to controller pak handling.

Several NES and Mega CD fixes have been added. EEPROM support has been added for the Mega Drive.

Memory cards and paks now pre-format themselves, so you don't have to do so in-game or in BIOS settings.

The new Neo Geo emulation is slowly improving, but it's still very preliminary with only seven games fully playable so far.

The Nintendo 64 SM5K and PlayStation HC05 processor cores have been emulated, but not connected yet due to a lack of information.

Added mouse input support and connected peripheral selection to the GUI, so mice and light gun games can now be used.

There is now per-system input mapping overlays, so you can map controllers based on the original system button names.

And lastly as promised, the SNES core has gained optional widescreen support.

  • Nintendo 64: added Windows ABI support to dynamic recompilers

  • PlayStation: added Windows ABI support to dynamic recompiler

  • Nintendo 64: temporarily disabled 64-bit addressing mode due to issues

  • Nintendo 64: corrected analog stick ranges and emulated octagonal boundaries

  • Nintendo 64: code cleanups around memory access functions

  • Nintendo 64: started to implement RDRAM broadcasting (very incomplete still)

  • Mega Drive: improved VDP scanline renderer timing

  • M68K: corrected clipping bug in ADD,CMP,SUB instructions

  • Nintendo 64: improved SI scanning of PIF RAM and emulated more flags

  • Nintendo 64: added very accurate controller pak initialization code

  • Nintendo 64: improved controller analog stick approximations [MerryMage]

  • Nintendo 64: added priority queue to delay SI and PI DMA transfers

  • Master System: added bit-perfect YM2413 instrument patch sets

  • Mega Drive: fixed a bug with LINEA and LINEF instructions (should not decrement PC)

  • Mega Drive: added EEPROM emulation

  • mia: added Mega Drive and Mega 32X EEPROM database entries

  • nall: added priority_queue::remove(T) support

  • Nintendo 64: reverted 64-bit TLB (not actually present)

  • Neo Geo: initial implementation

  • Neo Geo: many emulation improvements

  • nall: add workaround for compilers that lack __has_builtin

  • Nintendo 64: ignore A15 on controller pak reads and writes

  • Master System: implemented Codemasters, Korea, MSX, Janggun mappers

  • Master System: improved Sega mapper emulation

  • Master System: added initial emulation of port $3e

  • Master System: added support to load BIOSes

  • Master System: initialize stack pointer to 0xfffd when no BIOS loaded [Luke Usher]

  • Game Boy Advance: emulated BIOS swap register [MerryMage]

  • Mega Drive: cancel pending IRQs when they are disabled [Jonas Quinn]

  • Mega Drive: fixed handling of VDP field flag [Jonas Quinn]

  • Mega Drive: mask upper bit of VDP sprite Y value when in progressive display mode [Jonas Quinn]

  • X24C01, M24Cxx: improve emulation of EEPROM command sequences

  • Famicom: added database entries for Jajamaru Gekimaden and Mazase Top Pro PRG-RAM

  • M24Cx: rewrote emulation to be more complete; though still not working for Cxx/Cxxx sizes

  • Nintendo 64: try stopping SI polling on recv=0xfe

  • Mega Drive: improved EEPROM emulation

  • Nintendo 64: fixed CPU SCC counter rate [simer]

  • Nintendo 64: added initial emulation of the SM5K processor (not connected yet)

  • lucia: update frame rate from the main thread to prevent a race condition with GTK

  • Master System: emulated sprite zoom and fifth-sprite status flag

  • Master System: corrected VDP background emulation for mode 4 [fixes Codemasters games]

  • Master System: latch VDP background nametable address and scroll registers [fixes Desert Speedtrap]

  • Master System: mask CRAM reads to 6-bit in Master System mode [fixes Mercs]

  • Master System: refactored VDP code

  • Z80: swapped IND/INI to post-decrement B, and OUTD/OUTI to pre-decrement B

  • lucia: fixed a crash when loading Game Gear games due to stubbing out the BIOS

  • Nintendo 64: fixed cartridge flash memory support

  • Master System: VDP line coincidence should be initialized to $ff [fixes Shadow Dancer]

  • Master System: VDP sprite overflow index defaults to $1f, not $00 [fixes PGA Tour Golf]

  • SN76489: corrected port latching behavior and noise volume writes [fixes Micro Machines]

  • TMS9918: greatly refactored code

  • V9938: greatly refactored code

  • Z80: disassembler fixes

  • lucia: corrected mapping of Master System pause button [fixes Baku Baku Panic]

  • nall: disable -Wstringop-overflow for GCC due to compiler heuristics error

  • M68HC05: initial core implementation added

  • M68000: renamed core from M68K

  • Super Famicom: clearing $4200.d0 stops active joypad polling for the rest of the frame [Jonas Quinn]

  • Master System: don't evaluate sprites past active display area [fixes Rescue Mission]

  • Mega Drive: don't acknowledge VDP IRQs until the CPU triggers them [fixes Mega Lo Mania]

  • lucia: begin refactoring input mapping to allow per-system mappings and multiple controller types

  • Game Gear: set CPU::in() unmapped return value to MDR; fixes RoboCop 3 [Jonas Quinn]

  • WonderSwan Color: do not mask screen tilemap base address; fixes Sorobang [FPGAzumSpass]

  • Mega Drive: set supervisor mode and clear trace mode for all exceptions; fixes Gouketsuji Ichizoku [Jonas Quinn]

  • Mega CD: format BRAM instead of leaving it uninitialized; fixes Popful Mail (US)

  • WonderSwan: add patch for Meitantei Conan: Nishi no Meitantei Saidai no Kiki!

  • Game Boy: add MBC1#M mapper database entries; fixes Bomber Man Collection, Genjin Collection, Momotarou Collection, and Mortal Kombat I & II

  • Neo Geo Pocket: $8118 background register exists even in the K1GE GPU; fixes Samurai Shodown

  • Neo Geo Pocket Color: return 0xFF acknowledge byte after flash erase command; fixes Puzzle Link 2 and Memories off: Pure

  • Neo Geo Pocket: clear watchdog timer counter on trigger to prevent infinite triggering; fixes Neo Baccarat, Neo Cherry Master Color, and Neo Mystery Bonus

  • TLCS900H: do not allow interrupts to run between CPDR, LDIR, LDDR instructions; fixes Fantastic Night Dreams Cotton

  • Neo Geo Pocket: add all remaining missing I/O registers (not emulated, but registers are readable and writable now)

  • Neo Geo Pocket Color: above changes also fixed in-game audio in Crush Roller and Dynamite Slugger

  • Mega CD: added 1M mode WRAM swap request flag; fxies AX-101, Earnest Evans, and Might & Magic III [TascoDLX]

  • lucia: added input mapping overlays for all remaining systems

  • lucia: added two-player support to all remaining systems

  • TLCS900H: refactored instruction decoder and disassembler using range-case

  • TLCS900H: improved emulation of (PC+d16) addressing mode (LDAR)

  • TMS9918, V9938, SMS VDP: corrected sprite zoom emulation [Jonas Quinn]

  • Neo Geo Pocket: added new debugging modules (flash ROM, I/O accesses, system calls)

  • Neo Geo Pocket: improved CPU interrupt logger (prints name of interrupt now)

  • Neo Geo Pocket: fixed a critical issue with interrupt priority levels; fixes many games

  • Neo Geo Pocket: added stubs for all remaining TMP95C061F I/O registers (not emulated yet)

  • Neo Geo Pocket: set CPU I/O port $b1.d2 reads to return 1 (fixes SNK Gals' Fighter)

  • Neo Geo Pocket: added stubs for undocumented CPU I/O ports $b6 and $b7

  • Super Famicom: PPU code restructuring

  • Super Famicom: added widescreen (16:9 and 21:9) support to the scanline renderer

  • WonderSwan: refactored I/O handlers to use switch/case instead of if tests

  • WonderSwan: rewrote PPU renderer to modularize each component (screen1, screen2, sprite, dac, etc)

  • WonderSwan: corrected timers to count down instead of up; fixes timing in many games [FPGAzumSpass]

  • WonderSwan: improved screen two window emulation [FPGAzumSpass]

  • hiro: TableView::onContext() is now TableView::onContext(TableViewCell) (not supported for Cocoa or Qt yet)

  • lucia: merged code to handle input assignment overlays and controller polling for each emulation core

  • lucia: added virtual mouse emulation and added mouse capture support

  • lucia: added support to change devices connected to controller ports

  • Neo Geo Pocket: added database workaround for underdumped Prize Game: PP-AA01 Pusher Program (Japan)

  • Neo Geo Pocket: fixed fast boot mode for Neo Cherry Pocket

  • nall/range: added new within() templates

  • V30MZ: emulated instruction prefetch

  • V30MZ: greatly improved instruction timings (thanks to FPGAzumSpass' test ROM)

  • WonderSwan: disabling an interrupt source does clear its pending status (fixes Digimon Tamers)

  • TLCS900H: improved prefetch handling and instruction timing (still imperfect)

  • TLCS900H: improved timing further (still imperfect)


This release provides improved Nintendo 64 and Mega Drive emulation, plus some emulation speedups and new features like keyboard-mapping for all Nintendo 64 controls.

The infamous Titan Overdrive demos now run with the exception of one glitched screen each, but you will need to compile with profile=accuracy to enable the required cycle-based VDP renderer for this to work. I'll try in the future to support as much of it as I can with the default scanline renderer as well.

  • SH2: added support for Windows ABI to the recompiler

  • SH2: MAC must increment R[n] before reading from R[m]; fixes Virtua Fighter and Toughman Contest

  • SH2: fixed dynarec MOV @Rm+,Rn to not increment when Rm==Rn

  • SH2: fixed dynarec TST instruction

  • SH2: improved dynarec accuracy by breaking blocks on delay slot branches

  • SH2: improved dynarec accuracy by decreasing the underclocking amount

  • Mega Drive: implemented undocumented VSRAM and CRAM DMA fill

  • Mega Drive: simplified scanline VDP renderer; fixes TMNT: Tournament Fighters graphics

  • Mega Drive: improved region detection; correctly identifies Alien Soldier region now

  • Mega CD: fixed crash on game load

  • Super Famicom: fixed direct color mode; fixes Secret of Mana world map

  • WonderSwan Color: fixed initial state for new EEPROMs plus EEPROM size; fixes missing sound

  • lucia: fixed saving RAM files when a manual save path was specified

  • ruby: fixed library dependency detection for Arch Linux and other distributions

  • SH2: additional correction for dynarec MOV @Rm+,Rn instructions

  • hiro/GTK3: added CSS stylesheet overrides to improve appearance [Screwtape]

  • N64: VMRG was not clearing VCO in C++ version [Rasky]

  • N64: fixed "ctc2" in the disassembler

  • Mega Drive: VDP address/command bits are set even for non-register writes [Eke]

  • Mega Drive: implemented VDP FIFO with approximated timings

  • Mega Drive: implemented CPU bus arbitrator

  • N64: fixed RSP vector unit register values in the disassembler

  • Mega Drive: implemented proper VDP FIFO timings for both reads and writes (hopefully)

  • Mega Drive: enabled external and RAM refresh timing

  • Mega Drive: added (Mega Drive | Mega 32X) + Mega CD mode 1 emulation

  • Mega Drive: refactored dot-based VDP renderer

  • ares: added Thread::restart() function to reset a thread without resetting its clock

  • Mega Drive: improved DRAM refresh timings

  • Mega Drive: added VDP I/O logger

  • Mega Drive: fixed VDP counter emulation (still inaccurate)

  • Mega Drive: improved VDP DMA and FIFO emulation

  • Nintendo 64: report 64DD as missing for now; fixes F-Zero X

  • Nintendo 64: improved TLB emulation; fixes Conker's Bad Fur Day

  • Nintendo 64: PI DMA from flash always reads data, never the status; fixes Paper Mario

  • Mega Drive: improved VDP FIFO emulation

  • Mega Drive: improved VDP dot-renderer

  • nall/bit-range: fixed bug with bit indexes >= 32

  • Mega Drive: fixed VDP read buffer indexing for VSRAM and CRAM

  • Mega Drive: fixed 68K to VDP DMA so that it instantly freezes the CPU

  • Mega Drive: emulated VDP left window hardware glitch where hscroll&15!=0

  • Mega Drive: improved CPU interrupt handling

  • Mega Drive: added APU bus mirrorings

  • Mega Drive: emulated the VDP debug register

  • Mega Drive: fixed VDP VRAM DMA copy

  • Mega Drive: improved 128KB VRAM mode support

  • Mega Drive: mask sprite attribute table address in H40 mode [Sik]

  • Mega Drive: VDP timing improvements

  • Nintendo 64: improved EEPROM support; fixes Perfect Dark

  • Nintendo 64: improved VI interrupt support; fixes Star Wars: Rogue Squadron title screen [nodev]

  • Nintendo 64: emulated CIC-NUS-6105 copy protection; fixes Banjo-Tooie [XScale]

  • Nintendo 64: added serrate (interlace) support and fixed bug when supersampling in serrate mode

  • Nintendo 64: emulated CPU instruction cache

  • Nintendo 64: emulated CPU data cache

  • Nintendo 64: emulated CPU CACHE instruction

  • Nintendo 64: fixed CPU TLB bug; fixes GoldenEye

  • Nintendo 64: began adapting CPU cached interpreter into a dynamic recompiler

  • Nintendo 64: began adapting RSP cached interpreter into a dynamic recompiler

  • Nintendo 64: added 64-bit addressing and TLB supporting

  • Nintendo 64: added endian support to [LS][WD][LR] instructions

  • Nintendo 64: improved dynamic recompiler

  • PlayStation: began adapting CPU cached interpreter into a dynamic recompiler

  • lucia: allow mapping analog axes separately (allows mapping sticks to the keyboard)

  • Nintendo 64: corrected analog stick ranges

  • Nintendo 64: emulate the analog stick as an octagon rather than a circle [YetAnotherEmuDev]


Unfortunately a few critical issues crept in between v118 and v119, so here is a bugfix release for all reported issues.

It also fixes some game bugs while I'm at it, and boosts 32X compatibility from 50% to a little over 60%.

Please do upgrade if you have v119, this one's important.

  • SH2: MAC must increment R[n] before reading from R[m]; fixes Virtua Fighter and Toughman Contest

  • SH2: fixed dynarec MOV @Rm+,Rn to not increment when Rm==Rn

  • SH2: fixed dynarec TST instruction

  • SH2: improved dynarec accuracy by breaking blocks on delay slot branches

  • SH2: improved dynarec accuracy by decreasing the underclocking amount

  • Mega Drive: implemented undocumented VSRAM and CRAM DMA fill

  • Mega Drive: simplified scanline VDP renderer; fixes TMNT: Tournament Fighters graphics

  • Mega Drive: improved region detection; correctly identifies Alien Soldier region now

  • Mega CD: fixed crash on game load

  • Super Famicom: fixed direct color mode; fixes Secret of Mana world map

  • WonderSwan Color: fixed initial state for new EEPROMs plus EEPROM size; fixes missing sound

  • lucia: fixed saving RAM files when a manual save path was specified

  • ruby: fixed library dependency detection for Arch Linux and other distributions

  • hiro/GTK3: added CSS stylesheet overrides to improve appearance [Screwtape]


I'm releasing ares v119 today, which includes very preliminary Sega 32X emulation support. Compatibility is currently at around 50-75% or so, and since the system requirements were a bit too steep (on account of my Mega Drive core being cycle/dot-accurate), I downclocked the SH2s a bit until I can speed up the emulator more. You'll currently need about a Ryzen 5 2600 to hit 60fps reliably. With the underclock, my Ryzen 7 5800X hits 120fps, and without it, 85fps.

Although the compatibility for the new 32X core is a bit low, this is mostly due to pesky CPU bugs. The accuracy is quite high and I've emulated as much of the 32X and SH7604 peripheral functions as possible. I pass all 161 tests from the Mars Check Program. It should not take much more work to reach 98% compatibility in the future. Sega CD 32X emulation support is present, but is likely not functional, as I haven't tested it yet.

Other major features in this release include Sega SVP support for Virtua Racing, plus improved Nintendo 64, Mega Drive, and Mega CD emulation compatibility.

I'm going to start working on Sega Saturn emulation now, while Luke Usher works on Neo Geo emulation. No promises as to when or if these cores will become playable, I'm just giving you all a heads up since you'll see the skeletons for these systems in the source code now.

  • Nintendo 64: improved Expansion Pak detection

  • Nintendo 64: fixed swapped L and R buttons [simer]

  • Nintendo 64: emulated the RST bit for gamepads

  • ruby: added library detection support for the Linux and BSD targets

  • lucia: gained support for game paks (custom file dialog only)

  • Super Famicom: added support for Super Game Boy, Sufami Turbo, and BS Memory packs

  • hiro: made SourceEdit optional for gtk2 and gtk3 targets (disabled for ares)

  • Nintendo 64: emulated 2048-byte EEPROM identifier and transfer protocol

  • Super Famicom: corrected ppu-performance widths table indexing to consider overscan

  • Mega CD: fixed a bug in register $ff8003; allows Popful Mail to boot [TascoDLX]

  • Mega Drive: fixed a bug with 256-width video modes

  • Mega Drive: improved VDP DMA emulation which should fix many games

  • Mega Drive: added SVP emulation

  • Mega Drive: added 32X emulation

  • Mega CD: fixed a bit-masking bug in register $ff8004; fixes Radical Rex [TascoDLX]

  • Nintendo 64: fixed C implementation of RSP VMACU instruction

  • Nintendo 64: use correct NTSC and PAL PIF ROM images based on the region

  • Mega Drive: fixed reset logic, Z80 interrupt timing + prefix timing + bus control [TascoDLX]

  • Mega CD: fixed word RAM access and CDC DMA word RAM transfers [TascoDLX]

  • Nintendo 64: improved RSP VMOV emulation [Rasky]

  • Nintendo 64: fixed RSP DMEM DMA alignment (&~7, not &~3) [Rasky]

  • Nintendo 64: upgraded to the latest version of ParaLLEl-RDP

  • nall: greatly expanded recompiler/amd64's supported intrinsics

  • mia: substantial refactoring around a new virtual filesystem implementation from nall


I'm excited to launch ares v118 today, the first release featuring playable, full-speed Nintendo 64 emulation!

The new Nintendo 64 emulation is made possible thanks to Themaister very graciously porting his Vulkan-based ParaLLEl-RDP graphics renderer to ares. With its default settings, it is nearly pixel-perfect to real hardware, and it optionally supports upscaling to 2x or 4x the original Nintendo 64 resolution, plus optional supersampling back down to the original resolution (for enhanced anti-aliasing) if desired. The Vulkan support requires an appropriate graphics card, and either Windows or Linux. At this time, Vulkan is not available for macOS nor the BSDs.

Also new for the Nintendo 64 core in this release is Rumble Pak, Cartridge Pak, SRAM, EEPROM, and Flash save support. Note that for right now, the Rumble Pak will only be enabled for games which use internal saves (SRAM, EEPROM, and Flash.) That does not cover all Rumble Pak-capable games. The option to choose between Rumble Paks and Cartridge Paks will be added to a future release.

For the PlayStation core, Luke Usher provided two rendering fixes that allow Final Fantasy VII and Tony Hawk's Pro Skater to be fully playable!

Right now, approximately 33% of the Nintendo 64 library is fully playable, and about 67% of the PlayStation library is fully playable. Each core has only been under active development for about one month each, so they both have a long way to go. Please treat these early releases as tech samples, rather than finished emulation cores.

Further, note that the Nintendo 64 and PlayStation cores employ cached interpreters. This is a middle-ground between the accuracy of interpreters and the performance of dynamic recompilers. As such, ares' system requirements will be a bit higher than traditional emulators for these systems. Presuming no background task interference or CPU throttling, generally speaking, a Ryzen 5 2600 or better CPU should get you to around ~120fps in the average case, and ~60fps in the worst case.


Most notably, this release adds Sony PlayStation emulation. Please understand however that this support is new, and compatibility will be low. That said, the base hardware is entirely emulated, including MDEC, SPU, CD-XA, memory card support, etc. It shouldn't take much effort to raise the compatibility to a respectable level in the future. And thanks to dynamic recompilation and multi-threading, it should run at full-speed even on modest hardware. ares can run games in either ISO/CUE or BIN/CUE format, as split/WAV files or as a single merged BIN file.

As for the Nintendo 64, Themaister has ported Parallel-RDP to it, and it too is now capable of running commercial games at full-speed, with accuracy just shy of Cen64. However, the support is too new and untested to release at this time, and memory card support has not been added yet. Nintendo 64 support should ship with the next release instead.

Beyond this, there are six months of emulation improvements: many new Famicom mappers were added, several Master System and Game Boy Advance emulation bugs were fixed, etc. Also, a second virtual gamepad has been added for multi-player support.

Note: if you post this news elsewhere or are commenting on it, please refer to me only as Near, I would greatly appreciate that. If you're here wondering if ares development has resumed, the short answer is yes, but please read this post for more information.