ares v131 released
2022-12-27 20:55:00

ares v131 has now been released.

ARM64 Windows builds are now available.

The 32X core is no longer marked as experimental, having reached 95% compatibility. There are still have some minor glitches here and there, the majority of games can now be played.

There have been significant improvements to many other cores too, refer to the change log below for details.

Change Log

User Interface

  • Debugger: set per-processor trace history depth [invertego]
  • Debugger: store 64-bit addresses in trace history [invertego]
  • Debugger: use a hashset to track visisted addresses [invertego]
  • Move Audio Driver settings onto a new line, to prevent large device names overflowing the container [LukeUsher]
  • Implement 'Reload Current Game' hotkey/menu option [LukeUsher]
  • Controllers: bind analog inputs only on motion away from center [invertego]

Build System

  • Avoid code-signing when building from PRs [rasky]
  • Use widnres from build environment if defined [invertego]
  • Add support for Windows AArch64 [invertego]
  • Guard SSE usage with a pre-processor [invertego]
  • Add mame RGB utils for all architectures [invertego]
  • Enable debugging of self-signed builds on macOS [invertego]
  • Remove libgtksourceview2.0-dev from dependencies [LukeUsher]
  • Make LTO the default option again, the performance boost is worth the extra build time [LukeUsher]
  • Support building with MSVC/microsoft clang (still requires GNU make for now) [invertego]
  • Define _WIN32_WINNT in makefile rather than headers [invertego]
  • Prefer clang on all platforms [invertego]

Nall (Standard Library / Runtime)

  • Detect and support PowerPC64 [invertego]
  • Fix LTO with PowerPC64 [invertego]
  • Recompiler: simplify carry flag usage [invertego]
  • Prevent AppKit from handling file opens [LIJI32]
  • Recompiler: implement bit rotates [invertego]
  • Recompiler: implement masked shifts [invertego]
  • Use snprintf to avoid build warnings [rasky]
  • Split implementations into .cpp files [invertego]

Hiro (GUI Framework)

  • Store Windows settings in application directory, making ares truly portable [LukeUsher]

Atari 2600

  • Correct pixel aspect ratio to 12:7 [LukeUsher]

Bandai WonderSwan

  • Fix incorrect handling of color mode bit [asiekierka]
  • Fix PPU addressing of 1024 tiles in 2bpp color mode [asiekierka]
  • Update PPU Planer, packed, depth and grayscale methods to be correct to real hardware [asiekierka]
  • Tweaked APU code to properly treat it as a 24000 Hz digital chip, as opposed to a 3072000 Hz analog chip [asiekierka]
  • Fixed APU channel 2 "half-volume" bits being ignored. [asiekierka]
  • Tentatively tweaked low-pass filter value based on GuyPerfect's research. [asiekierka]
  • Implemented a less stubby serial I/O stub. This properly emits TX/RX interrupts. [asiekierka]
  • Added support for Bandai 2003's 16-bit banking ports [asiekierka]
  • Added stubby support for NMI register 0xB7, as found and documented by FluBBa in the NitroSwan emulator. [asiekierka]
  • Appropriately gate WSC-mode I/O ports from Mono mode. [asiekierka]
  • Fixed behavior of the HBlank/VBlank PPU timers when the reload value is 1, but the timer is not enabled. [asiekierka]
  • Fixed APU internal speaker output logic. [asiekierka]
  • Added support for the Pixel Accuracy toggle; significant performance increase when pixel accuracy is disabled. [asiekierka]
  • Fixed keypad interrupt emulation to match hardware quirks. [asiekierka]
  • Fixed handling the interrupt base port on WSC. [asiekierka]
  • Added PPU SCREEN1, SCREEN2 and tiles to the Graphics debug view. [asiekierka]
  • Added PPU, APU, cartridge, serial and SoC I/O ports to the Properties debug view. [asiekierka]
  • Exposed the ability to use internal speaker output in the UI. [asiekierka]


  • Correct pixel aspect ratio to 8:7 [PikaSamus]


  • Correct pixel aspect ratio to 8:7 [PikaSamus]

Nintendo NES / Famicom

  • Improve MMC5 frame detection [encoded-byte]
  • Improve MMC5 RAM management [encoded-byte]
  • Fix ram banking on MMC5 [encoded-byte]
  • Fix MMC5 expansion audio [encoded-byte]
  • Fix incorrect resetting of MMC5 scanline register on NMI [encoded-byte]
  • Correct MMC5 scanline detection [encoded-byte]
  • Increment scanlines before comparing on MMC5 [encoded-byte]
  • Implement namco163 expansion audio [encoded-byte]
  • Boost audio output to be inline with other cores [LukeUsher, encoded-byte]
  • Merge APU, Cartridge and CPU emulation to a single co-thread; improving performance with no accuracy impact [LukeUsher]

Nintendo SNES / Super Famicom

  • Add Star Fox EX to the game database [DerekTurtleRoe]

Nintendo Game Boy

  • Fix RTC emulation [invertego]
  • Fix MBC1 mapper implementation for 8/16Mbit cartridges [asiekierka]

Nintendo Game Boy Color

  • Fix secondary obj pallettes when running in DMG mode [LukeUsher]

Nintendo 64

  • Fix 1-bit precision errors in mame RDP [rasky]
  • Emulate VI guardband [rasky]
  • Improve generation of FPU flags and exceptions [rasky]
  • Trigger FPU exceptions also via CTC1 [rasky]
  • Implement FPU flags and exceptions for FCVT_x [rasky]
  • Fix roundings and flags for conversion functions [rasky]
  • Fix FPU round-to-even using intrinsics [rasky]
  • Add DCTC1 and DCTFC1 [rasky]
  • Reset FPU cause bits for every FPU operation [rasky]
  • Correct denormal bandling in FCTV_S_D [rasky]
  • Implement correct denormal flush for each rounding mode [rasky]
  • Prevent compiler from incorrectly re-ordering code using noinline [invertego]
  • Replace cmath functions with intrinsics [invertego]
  • Improve unimplemented exceptions on underflow [invertego]
  • Remove spurious round mode change in FPU implementation on aarch64 [rasky]
  • Fix conversion bounds off-by-one issues in FPU [rasky]
  • Do no clear flags on FMOV [rasky]
  • Raise unimplemented exceptions instead of invalid exceptions for FPU conversions [invertego]
  • Replace lround with round, lrint with rint [invertego]
  • Do not clear FPU flags on LWC1/LDC1/SWC1/SDC1 [rasky]
  • Fix analog stick inputs on Aarch64 [invertego]
  • Add PC address to FPU exception logs [rasky]
  • Implement correct PI open bus behavior [rasky]
  • Improve behavior in case of RDP crash [rasky]
  • Implement hardware limit of LOAD_BLOCK RDP command [rasky]
  • Fix 32bit / 64bit address space confusion [rasky]

Sega Game Gear

  • Correct pixel aspect ratio to 6:5 [PikaSamus]

Sega Master System / Mark III

  • Serialize cartridge ram [invertego]

Sega Mega Drive / Genesis

  • Fix cartridge rom banking for roms upto 32MB [TascoDLX]
  • Fix a build issue where bus functions were not inlined as intended [LukeUsher]
  • Reduce sync between components, boosting performance without any observable loss in accuracy [LukeUsher]
  • Refactor VDP to use templating to reduce comparisons in tight inner loops [LukeUsher]

Sega 32X

  • Fix PWM fifo [TascoDLX]
  • Implement DREQ1and fix PWM IRQ [TascoDLX]
  • Fix RLE rendering [TascoDLX]

Sony PlayStation

  • Reduce pause command duration, fixing a race condition in early game bootup [LukeUsher]

Component Improvements

Changes to these components are not specific to cores/systems, but rather they impact all systems that use the updated component.

CPU: MOS 6502

  • fix adc/sbc flags in decimal mode [invertego]

CPU: NEC HuC6280

  • fix adc/sbc flags in decimal mode [invertego]


  • Do not ignore immediate operand in AAD/AAM calls [asiekierka]
  • Fixed low-hanging CPU timing fruit, based on WSTimingTest. There's still some tests not passing, most notably jumps. [asiekierka]
  • Fixed IN/OUT opcode decoding in the CPU tracer. [asiekierka]
  • Fixed emulation of undocumented opcode 0xD6 as well as 0xF7 subop 1 [asiekierka]