Released version 131 of the ares emulator

Released a new update for ares , the multisystem emulator descendant of higan and bsnes mainly focuses on accuracy and conservation.

 

This new update features a Windows ARM64 build, while core 32X is no longer marked as experimental, having reached 95% compatibility.

Of course there are still some small bugs scattered here and there, but most games can now be run without any particular problems.

As usual, significant improvements have also been made to many other cores.

The ares emulator currently emulates 27 hardware devices:

  1. Famicom + Famicom Disk System.
  2. Super Famicom + Super Game Boy.
  3. Nintendo 64 (under development).
  4. Game Boy + Game Boy Color.
  5. Game Boy Advance + Game Boy Player.
  6. SG-1000 + SC-3000.
  7. Master System + Game Gear.
  8. Mega Drives + Mega CDs.
  9. PC Engine + PC Engine CD + SuperGrafx.
  10. MSX+MSX2.
  11. Coleco Vision.
  12. Neo Geo Pocket + Neo Geo Pocket Color.
  13. WonderSwan + WonderSwan Color + SwanCrystal + Pocket Challenge V2.

Pixel Accuracy Mode

At present ares contains two implementations of some of the emulated hardware; one tuned for performance and another tuned for accuracy.

Higan has always used the “accurate” profiles, with ares always opting for the “performance” profiles; any user wanting to change this would be required to compile ares from the source code.

Now there is also a new option in the emulator settings known as “Pixel Accuracy” which if enabled will use this mode within the supported cores.

For 99% of games, the default fast profiles will be more than enough, but enabling “Pixel Accuracy” allows games that require medium scan effects, like the infamous “Air Strike Patrol” to run properly.

The following systems currently support the Pixel Accuracy setting:

  • NEC – PC-Engine / TurboGrafx.
  • Nintendo – Super Famicom / SNES.

Changelog

User interface

  • Debugger: Sets depth of trace history per processor. [inverted]
  • Debugger: Store 64-bit addresses in trace history. [inverted]
  • Debugger: Use a hashset to track visited addresses. [inverted]
  • Moved the audio driver settings to a new line to avoid large device names overflowing into the container. [LukeUsher]
  • Implemented the “Reload Current Game” context/menu option. [LukeUsher]
  • Controller: Associates analog inputs only with movement away from center. [inverted]

Build System

  • Avoid code signing when building from PR. [rasky]
  • Use widnres from build environment if defined. [inverted]
  • Added Windows AArch64 support. [inverted]
  • Using Guard SSE with a pre-processor. [inverted]
  • Added mame RGB utils for all architectures. [inverted]
  • Enabled debugging of self-signed builds on macOS. [inverted]
  • Removed libgtksourceview2.0-dev from dependencies. [LukeUsher]
  • Made LTO the default option again, the performance boost is worth the extra build time. [LukeUsher]
  • Supports compiling with MSVC/microsoft clang. (still requires GNU make for now) [invertego]
  • Define  _WIN32_WINNTin the makefile rather than headers. [inverted]
  • Favorite clang on all platforms. [inverted]

Nall (standard library / runtime)

  • Detects and supports PowerPC64. [inverted]
  • Fix LTO with PowerPC64. [inverted]
  • Recompiler: Simplifies the use of the carry flag. [inverted]
  • Prevent AppKit from handling file opens. [LIJI32]
  • Recompiler: wheel bit implemented. [inverted]
  • Recompiler: implemented masked shifts. [inverted]
  • Use snprintf to avoid build warnings. [rasky]
  • Split implementations into .cpp. [inverted]

Hiro (GUI Framework)

  • Stores Windows settings in the application directory, making ares truly portable. [LukeUsher]

Atari 2600

  • Fixed pixel aspect ratio to 12:7. [LukeUsher]

Bandai WonderSwan

  • Fixed color mode bit mishandling. [asiekierka]
  • Fixed PPU routing of 1024 tiles in 2bpp color mode. [asiekierka]
  • Updated PPU Planer, Packed, Depth, and Grayscale methods to be correct with real hardware. [asiekierka]
  • Optimized APU code to properly treat it as a 24000Hz digital chip, as opposed to a 3072000Hz analog chip. [asiekierka]
  • Fixed APU channel 2 “half volume” bits being ignored. [asiekierka]
  • Temporarily optimized low-pass filter value based on GuyPerfect’s research. [asiekierka]
  • Implemented a less chunky serial I/O stub. This correctly issues TX/RX interrupts. [asiekierka]
  • Added support for Bandai 2003 16-bit bank ports. [asiekierka]
  • Added stubby support for NMI 0xB7 register, as found and documented by FluBBa in the NitroSwan emulator. [asiekierka]
  • Properly separate I/O ports in WSC mode from Mono mode. [asiekierka]
  • Fixed behavior of HBlank/VBlank PPU timers when the cooldown value is 1, but the timer is not enabled. [asiekierka]
  • Fixed APU internal speaker output logic. [asiekierka]
  • Added support for Pixel Accuracy switch; significant performance increase when pixel precision is turned off. [asiekierka]
  • Fixed keyboard interrupt emulation to accommodate hardware quirks. [asiekierka]
  • Fixed interrupt base port handling 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]

Coleco Vision

  • Fixed pixel aspect ratio to 8:7. [PikaSamus]

MSX/MSX2

  • Fixed pixel aspect ratio to 8:7. [PikaSamus]

Nintendo NES / Famicom

  • Improved detection of MMC5 frames. [byte encoded]
  • Improved MMC5 RAM management. [byte encoded]
  • Fixed ram banking on MMC5. [encoded-byte]
  • Fixed MMC5 expansion audio. [byte encoded]
  • Fixed incorrect reset of MMC5 scanline register to NMI. [byte encoded]
  • Fix MMC5 scanline detection. [byte encoded]
  • Increased scan lines before MMC5 comparison. [encoded-byte]
  • Implemented namco163 expansion sound. [encoded-byte]
  • Enhanced audio output to be in line with other cores. [LukeUsher, byte encoded]
  • Combined APU, cartridge and CPU emulation into a single co-thread; improves performance without impacting accuracy. [LukeUsher]

Nintendo SNES / Super Famicom

  • Added Star Fox EX to the game database. [DerekTurtleRoe]

Nintendo Game Boy

  • Fixed RTC emulation. [inverted]
  • Fixed MBC1 mapper implementation for 8/16 Mbit cartridges. [asiekierka]

Nintendo Game Boy Color

  • Fixed sub-object pallets when running in DMG mode. [LukeUsher]

nintendo 64

  • Fixed 1-bit precision errors in RDP mame. [rasky]
  • Emulate guardband VI. [rasky]
  • Improved the generation of FPU flags and exceptions. [rasky]
  • Also trigger FPU exceptions via CTC1. [rasky]
  • Implement FPU flags and exceptions for FCVT_x. [rasky]
  • Fixed rounding and flagging for conversion functions. [rasky]
  • Fixed round-to-even FPU using intrinsics. [rasky]
  • Added DCTC1 and DCTFC1. [rasky]
  • Resets the FPU cause bits for each FPU operation. [rasky]
  • Fixed abnormal bandling in FCTV_S_D. [rasky]
  • Implement proper denormal flushing for each rounding mode. [rasky]
  • Prevent the compiler from reordering the code incorrectly using noinline. [inverted]
  • Replace cmath functions with intrinsic functions. [inverted]
  • Improved unimplemented exceptions on underflow. [inverted]
  • Removed spurious round mode change in FPU implementation on aarch64. [rasky]
  • Fixed issues with off-by-one conversion limits to FPU. [rasky]
  • Does not clear flags on FMOV. [rasky]
  • Throw unimplemented exceptions instead of invalid exceptions for FPU conversions. [inverted]
  • Replaced lround with round, lrint with rint. [inverted]
  • It does not clear the FPU flags on LWC1/LDC1/SWC1/SDC1. [rasky]
  • Fixed analog stick inputs on Aarch64. [inverted]
  • Added PC address to FPU exception registers. [rasky]
  • Correct PI open bus behavior implemented. [rasky]
  • Improved RDP crash behavior. [rasky]
  • Implemented hardware limit of LOAD_BLOCK RDP command. [rasky]
  • Fixed 32bit/64bit address space confusion. [rasky]

Sega Game Gear

  • Fixed pixel aspect ratio to 6:5. [PikaSamus]

Sega Master System / Mark III

  • Serialize the cartridge’s RAM. [inverted]

Sega MegaDrive/Genesis

  • Fixed cartridge rom banking for ROMs up to 32MB. [TascoDLX]
  • Fixed a build issue where bus functions were not integrated as expected. [LukeUsher]
  • Reduced synchronization between components, increasing performance with no observable loss of accuracy. [LukeUsher]
  • Refactored VDP to use models to reduce comparisons in tight internal loops. [LukeUsher]

Saw 32X

  • PWM fix fifo. [TascoDLX]
  • Implemented DREQ1 and fixed PWM IRQ. [TascoDLX]
  • Fixed RLE rendering. [TascoDLX]

Sony Playstation

  • Reduced the duration of the pause command, by fixing a race condition on initial game launch. [LukeUsher]

Component improvements

  • Changes to these components are not core/system specific, but impact all systems using the updated component.

CPU: MOS 6502

  • Fixed adc/sbc flags in decimal mode. [inverted]

CPU: NEC HuC6280

  • Fixed adc/sbc flags in decimal mode. [inverted]

CPU: NEC V30MZ

  • Do not ignore the immediate operand in AAD/AAM calls. [asiekierka]
  • Fixed low CPU timing, based on WSTimingTest. There are still some tests that fail, especially jumps. [asiekierka]
  • Fixed IN/OUT opcode decoding in CPU tracer. [asiekierka]
  • Fixed emulation of undocumented opcode 0xD6 and 0xF7 subop 1. [asiekierka]

Download: Ares v131 [MacOS]

Download: Ares v131 [Windows AMD64]

Download: Ares v131 [Windows ARM64]

Download: Ares v131 [Linux Flatpack – AMD64]

Download: Ares v131 [Linux AUR – Generic]

Download: Source code Ares v131

Source: ares-emulator.github.io