ares v130 released
2022-09-30 16:25:00

ares v130 has now been released.

The most notable changes to this build are the addition of Nintendo 64DD emulation and support for Parallel-RDP on macOS.

Universal Binaries are now available to macOS users, so Apple Silicon users no longer need to self-compile for best performance.

Many emulator cores have also had significant improvement, please see the changelog for full details.

User Interface

  • Simplify the codebase by removing the ability to disable emulation cores or ungroup them from the gui [Luke Usher]
  • Log status messages to console in addition to the status bar [Rasky]
  • Sort systems in the system list alphabetically by vendor [Luke Usher]
  • Document command line options via --help parameter [Raphnet]
  • Rename "Vulkan" to "GPU acceleration" [Rasky]
  • Allow hotkeys to be used even when the window is unfocused,provided "allow input when focus is lost" is enabled [Luke Usher]
  • Added entitlements to allow JIT when running as a signed application on macOS [Rasky]
  • Bundle libMoldenVK on macOS [Rasky]
  • Fix auto-detection of Famicom Disk System games when dragging/dropping [remutro]
  • Prevent polling host input at too-high intervals, reduces lag when games rapidly poll input registers [Luke Usher]

Build System

  • Detect incompatibile, outdated gcc versions [Rasky]
  • Enable link-time optimization by default, giving a performance boost for most users [Luke Usher]
  • Build as a Universal Application on macOS, allowing the same binary to run native on Intel and Apple Silicon [Rasky]
  • Detect when gcc is actually an alias for clang [Invertego]
  • Fix compiler warnings with newer versions of clang [Invertego]
  • Use pkg-config to detect dependencies of Ruby [Tobias Jakobi]
  • Switch exclusively to clang for Windows releases and nightly builds [Luke Usher]
  • Allow cross-compilation on macOS [Rasky]
  • Add support for compiling using ccache [Luke Usher]

Nall (Standard Library / Runtime)

  • Improve make_string to pass by reference [Invertego]
  • Fix memory issues in assignment operators for nall types [Invertego]
  • Fix new//delete mismatch in hashset [Invertego]
  • Make the Posix implementation of thread::join idempotent [Invertego]

Ruby (Video / Audio / Input driver layer)

  • Remove DirectDraw rendering backend, this has been deprecated since DirectX 7 [Luke Usher]
  • Fix swap interval on systems that require the use of glXSwapIntervalEXT [Luke Usher]
  • Workaround double-mouse events with xlib [Raphnet]

Atari 2600

  • Fix a buffer-overflow crash condition [Invertego]
  • Increase scale factor for screen size consistency with other cores [Luke Usher]

Sega Master System / Game Gear

  • Add support for Sega Mega Drive controllers (Mega Mouse, Sports Pad, 3-button/6-button) [Raphnet]
  • Add support for the Sports Pad controller [Raphnet]
  • Add support for the Paddle controller [Raphnet]
  • Expose output signals to controller port [Raphnet]
  • Prevent Game Gear running in 50hz mode as a 50hz Game Gear was never manufactured [Luke Usher]
  • Add support for running the Game Gear bios (Optional) [Luke Usher]
  • Fix writes to controller port 2 [Raphnet]
  • Fix port $3e and $3f operation on Game Gear [Luke Usher]
  • Implement support for NTSC-U and NTSC-J Game Gear models [Luke Usher]
  • Initialize ram to zero (fixes titles that break when a bios is not loaded) [Luke Usher]
  • Fix incorrect hcounter calculation [Luke Usher]
  • Various minor VDP emulation improvements [Luke Usher]
  • Fix a crash when running the Game Gear in Master System Mode [Luke Usher]
  • Fix two more Game Gear games that require Master System Mode: Taito Chase H.Q (Japan) and Chase H.Q (USA) [Luke Usher]

Sega Mega Drive

  • Add eeprom support for Wonder Boy V (J) [TascoDLX]
  • Fix SRAM support for Psy-O-Blade [FitzRoyX]
  • Add support for the Mega Mouse [Raphnet]
  • Fix incorrect aspect ratio (32:35) [Luke Usher]
  • Simplify cartridge emulation by combining standard and banked mappers [TascoDLX]
  • Latch Z80 bus-request on reset [Invertego]
  • Preserve Z80 bank register on reset [Invertego]
  • Implement custom mappers for Triple Play 96 & Triple Play Gold [TascoDLX]

Sega 32X

  • Implement support for the standard SEGA/SSF2 mapper [Ralakimus]
  • Fix eeprom support [Invertego]
  • Ensure unused bits of the adapter control register are set to zzero [TascoDLX]
  • Expose cartidge SRAM through the 0x900000 range [Invertego]
  • Improve synchronization between the main/sub SH-2 processors [Invertego]
  • Unify sync timing between interpreter and recompiler [Invertego]
  • Ensure upper bits of the interrupt control register return zero [Luke Usher]
  • Fix an issue where games would render garbage to the top/bottom border areas [Luke Usher]
  • Fix an issue that prevented Sega CD32X games from detecting the 32X add-on [Invertego]
  • Implement proper 32x reset behavior [Luke Usher]

Nintendo NES / Famicom

  • Implement (partial) support for iNES 2.0 format roms [Luke Usher]
  • Fix an issue where GTROM had 8k CHR-RAM instead of the correct 16k [Luke Usher]

Nintendo SNES / Super Famicom

  • Fix an issue with performance-ppu selection [Intertego]
  • Fix a typo that lead to broken background layer 4 in Pixel Accuracy mode [FitzRoyX]
  • Fix auto-detection of MSU-1 games [Luke Usher]

Nintendo Game Boy / Game Boy Color

  • Allow Game Boy Color to run in DMG mode [Luke Usher]
  • Implement display disable while stopped [Luke Usher]
  • Prevent incrementing DIV counter when stopped [Luke Usher]
  • Fix a minor 'oops' in KEY0 [Luke Usher]
  • Fix DIV initial value [Luke Usher]
  • Various fixes to MBC2 mapper [Luke Usher]
  • Implement bgEnable differences between DMG and CGB [Luke Usher]

Nintendo Game Boy Advance

  • Fix games using EEPROM saving [Luke Usher]

Nintendo 64

  • Implement Nintendo 64DD emulation [Luigiblood]
  • Use MoltenVK to support Parallel-RDP on macOS via Metal [Rasky]
  • Use sse2neon to enable vectorization on Apple Silicon, boosting performance [Rasky]
  • Use XXH3 instead of crc32 for RSP recompiler cache, boosting performance [Luke Usher]
  • Implement overflow exceptions in TRUNC [Rasky]
  • Add setting to disable VI post-processing/blur [Parashoe]
  • Add missing variables to RDP serialization [sp1187]
  • Implement support for RDP crashes [Rasky]
  • Improve support for FPU exceptions [Rasky]
  • Improve COP1/COP2 invalid instruction exceptions [Rasky]
  • Split the RSP recompiler cache into 256-byte chunks, improving performance [Luke Usher]
  • Rewrite VI resolution scaling [Rasky]
  • Use a native data type (u16) for RSP Program Counter, improving performance [Luke Usher]
  • Fix AI DMA enable bit handling [Rasky]
  • Fix AI IRQ [Rasky]
  • Fix an issue where the recompiler would invalidate incorrect ranges [Luke Usher]
  • Fix buffer overflows in MAME RDP [Rasky]
  • Fix Control Stick dead zone scaling [kev4cards]
  • Fix numerical instability in Gamepad reading logic [Invertego]
  • Fix support for interlaced resolutions [Rasky]
  • Leave PIF RAM as-is when no data was received [Raphnet]
  • Fix when "Nothing" is selected as a controller type [Raphnet]
  • Implement precise RDP block invalidation [Invertego]
  • Refactor AI emulation to always return audio samples [Rasky]
  • Fix a bug in update of DP_START during a RDP DMA transfer [Rasky]

Microsoft MSX

  • Implement the Arkanoid Vaus paddle controller [Raphnet]
  • Implement controller port 2 [Raphnet]
  • Fix detection of the R-Type specific vs generic ASC16 ROM mapper [Luke Usher]
  • Add database entry for Batman (Japan) [Luke Usher]

SNK Neo Geo

  • Improve performance by reducing unnecessary synchronization [Luke Usher]
  • Fix a crash caused by not clearing the screen thread on unload [Invertego]
  • Fix outer-edge rendering issues by clipping overscan [Luke Usher]
  • Fix FM/SSG audio pkayback [Luke Usher]
  • Fix support for games with non-power-of-two sized CROMs [Luke Usher]
  • Fix loading of roms that use .ep program roms instead of .p program roms [Luke Usher]
  • Fix incorrect sprite offset: they are relative to top-border rather than line 0 [Luke Usher]
  • Implement preliminary support for ADPCM-A audio [Luke Usher]
  • Implement preliminary support for ADPCM-B audio [Luke Usher]

Sony PlayStation

  • Increase precision fo volume input during amplification [Luke Usher]
  • Add simple idle loop detection, slight performance boost [Luke Usher]
  • Clamp f32->u8 colour conversions [Invertego]
  • Fix a crash when rendering using out-of-range vram co-ordinates [Luke Usher]
  • Fix broken input in most (but not all) games [Luke Usher]
  • Implement disc command GetParam [remutro]

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

  • Add support for many more unofficial/undocumented instructions, however, we are still missing some of the lesser used ones [Luke Usher]

CPU: Motorola 68000

  • Fix divs/divu negative flag [Invertego]
  • Fix memory read order for A/SBCD and ADD/SUBX [Invertego]

CPU: Hitatchi SH-2

  • Fix serial communication [TascoDLX]
  • Synchronize on uncached writes [Invertego]
  • Fix broken Illegal Instruction debug output [Luke Usher]
  • Fix PC-relative addressing in branch delay slots [Invertego]
  • Add preliminary emulation of the SH6704 internal bus [Invertego]
  • Fix an issue where the incorrect return address was stored in an exception frame [Invertego]

CPU: Nec V30MZ

  • Fix shift behavior [Invertego]

CPU: Zilog Z80

  • Fix timings for RET, LD (IX+d),n & LD (IY+d),n [TascoDLX]
  • Fix extended/prefixed instruction timing and behavior [TascoDLX]
  • Fix IM0 and simplify IRQ implementation [Luke Usher]
  • Fix various other instruction timings [TascoDLX]
  • Fix reset logic [TascoDLX]

Audio: YM2612

  • Fix pm vibrato effect [TascoDLX]
  • Fix envelope update logic [TascoDLX]
  • Fix volume floor [TascoDLX]
  • Various other improvements and fixes [TascoDLX]

Audio: AY38910

  • Keep a copy of the last data written to IO ports [Raphnet]

Audio: SN76489

  • Fix additional data writes to noise channel [Luke Usher]