ares v127 brings significant improvements to Mega Drive and Nintendo 64 emulation, as well as improvements to NES / Famicom and SNES / Super Famicom.
Other than the usual emulation improvements, there have been the following notable changes:
Apple Silicon Support
ares v127 fixes the recompiler for aarch64 architecture, meaning that it is now possible to create Apple Silicon/M1 native builds, without relying on Rosetta and without losing support for the high performance JIT recompilers.
In order to be Apple Silicon Native, it is currently required to compile ares from source code as automated builds have not yet been configured, but users who wish to do so will no longer lose functionality or suffer poor performance as a result.
ares's Nintendo 64 core uses paraLLEl-RDP by default; this brings fast and accurate RDP emulation as long as Vulkan is present on the users machine; this meant that Nintendo 64 emulation was completely broken for all configurations without Vulkan support, including macOS.
ares v127 adds support for MAME's RDP implementation as a fallback, allowing Nintendo 64 emulation to be used when Vulkan is not present. This is handled automatically, however, a new option has been added to video settings to allow Vulkan support to be toggled, giving all users the ability to test the MAME RDP, if they wish to do so.
Although MAME RDP is now an option, paraLLEl-RDP is still the recommended choice, for both performance and accuracy.
Pixel Accuracy Mode
ares has contains two implementations of some of our emulated hardware; one optimised for performance, and another optimised for accuracy. Historically, the choice of which path to use has never been exposed to the user; higan always used the 'accurate' profiles, with ares always opting for the 'performance' profiles; any user wishing to change this would be required to compile ares themselves from source.
As of ares v127, we now provide a new option in the emulator settings: "Pixel Accuracy"; when this is enabled, any emulator core that supports a pixel accurate mode will use it.
For 99% of games, the default fast profiles will be sufficient, but enabling "Pixel Accuracy" allows games that require mid-scanline effects, such as the infamous "Air Strike Patrol" to function properly.
The following systems are currently support the Pixel Accuracy setting:
- NEC - PC-Engine / TurboGrafx
- Nintendo - Super Famicom / SNES
- desktop-ui: hook up pc-engine 6-button pads to virtual pads [Luke Usher]
- desktop-ui: implement frame advance [Luke Usher]
- fc: add bus conflicts to cnrom [encoded-byte]
- fc: check for ram on mmc1 [encoded-byte]
- fc: check if ram exists on mmc3 [encoded-byte]
- fc: clear oam address on each scanline [encoded-byte]
- fc: improve mmc3 irq behavior [encoded-byte]
- fc: improve ppu skipped clock timing [encoded-byte]
- fc: use hkrom for mmc6 [encoded-byte]
- m68000: allow recovery from zero divide [TascoDLX]
- m68000: reimplement DBcc instruction with correct timing[TascoDLX]
- md: A few fixes to SRAM save game [rasky]
- md: correct overscan / output when display is off [TascoDLX]
- md: correct reads of CRAM and VSRAM [rasky]
- md: detect region 'K' as NTSC-J [invertego]
- md: fix APU port in [rasky]
- md: fix debug register sprite masking [rasky]
- md: fix high bits in control port read [rasky]
- md: fix misaligned reads from VRAM [rasky]
- md: fix register masked write in mode5 [rasky]
- md: fix vblank bit toggling horizontal timing [rasky]
- md: fix VSRAM out of bound accesses [rasky]
- md: ignore erroneous device string used by Codemasters [invertego]
- md: implement undocumented VDP VRAM 8-bit reading mode [rasky]
- md: persist VDP state on reset [invertego]
- md: restore vdp free slot lost to refresh [TascoDLX]
- mia: Correct save type for Premier Manager 64 (N64) [sp1187]
- mia: Correct save type for Transformers: Beast Wars Transmetals (N64) [sp1187]
- mia: correct type for pak attribute [encoded-byte]
- mia: fix 32x sram [Luke Usher]
- mia: properly pass MD eeprom details to ares [Luke Usher]
- mia: updated famicom database [encoded-byte]
- mos6502: add illegal nops [encoded-byte]
- ms: correct overscan inc. dynamic screen resizing [TascoDLX]
- n64: add MAME RDP as a fallback for parallel-RDP [invertego]
- n64: allow vulkan to be disabled [Luke Usher]
- n64: change PI DMA to use 16 bit fetches [CasualPokePlayer]
- n64: fix mult/div opcode timings [rasky]
- n64: fix RSP halt condition to be more accurate [rasky]
- n64: fix several RDP regressions [invertego]
- n64: fix small bug in VMACQ [rasky]
- n64: fix SRA/SRAV opcodes [rasky]
- n64: fix vulkan detection [Luke Usher]
- n64: improve rsp recompiler pool allocation [invertego]
- n64: swap RSP/RDP order [CasualPokePlayer]
- n64: templatize rsp vpu [invertego]
- n64: vulkan tweaks [Luke Usher]
- nall: fix many compilation warnings on macOS [Luke Usher]
- nall: fix page protection on Apple silicon [invertego]
- nall: rewrite recompiler for machine-independence using sljit [invertego]
- pce: runtime pixel accurate VDP setting [invertego]
- sfc: fix horizontal off-screen test for sprites [jbo-85]
- sfc: fix missing sprite tile on Super Conflict title screen [jbo-85]
- sfc: fix missing sprites in Jurassic Park that are partly offscreen [jbo-85]
- sfc: runtime pixel accurate PPU setting [invertego]
- sh2: move registers into POD struct [invertego]