loading_reduced.jpg
competition

120 / 06-05-2021

ares

Accuracy

Performance

Features

ares is a multi-system emulator by Near (formally byuu) which is a descendent of higan and bsnes. It's focusing mainly on accuracy and preservation. Some of its features include 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

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]

--119.2--

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]


--119--

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


--118--

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.


--117--

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.

Check Previous Changes