loading_reduced.jpg

128 / 17-05-2022

ares

Accuracy

Performance

Features

competition

Ares (Near/Byuu's last project) has been continued by new developers (including Luke from Cxbx-r)..! With that in mind,  it's a multi-system emulator focusing mainly on accuracy and some of its exhaustive features include but are not limited to 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

--128--

Improved Nintendo 64 Emulation

Rasky has been working hard on improving the n64 emulation; making sure we pass as many test cases in the new n64-systemtest rom as possible; after much hard work, we now pass almost every test; more than any other currently existing Nintendo 64 emulator.

--

Test Results for n64-systemtest as of 08/05/2022

Finished in 0.76s. Tests: 563. Failed: 3. Success rate: 99%. Skipped 5 tests.

--

Although compatibility isn't as high as some other emulators, most games do work and I believe it's safe to say that ares is the most accurate Nintendo 64 emulator at the time of publication; based on these test results as well as gameplay.


Improved MSX Emulation

With support for the MSX keyboard (finally!), and many more rom mappers, we have a dramatic increase in compatibility with MSX1 software. Support for Text Mode was also implemented, meaning text-based games (and MSX-Basic) are now able to be enjoyed. Note that we now require an MSX1 bios to be provided; previously we utilised C-BIOS, but due to technical limitations, this was unable to run much of the game library, so we feel like it is best to require a proper bios.


Note that MSX2 support is still barebones; and will still use C-BIOS for the time being; the current MSX2 emulation is so preliminary that the 'real' bios images do not even boot.


Portable Mode

A much requested feature: on Windows, ares is now 'portable' by default; storing it's settings and metadata in the application directory, rather than AppData. An existing installation can be converted to a portable one by copying the settings.bml and support folders from AppData\ares.


CHD Support

Another much requested feature: The few CD-ROM based systems that ares supports are now able to load CHD compressed disc images. There is currently a limitation where CHDs created from .bin/cue work, but CHDs created from .iso files do not; this will be addressed in future but is considered low-priority as ares was never able to load .iso files.


Other

There have been many other changes/improvements, to the desktop-ui and also to the GameBoy, MegaDrive, SNES and PC-Engine cores. See the changelog for further details.


List Changes

desktop-ui

  • add hotkey to toggle fast forward [LukeUsher]

  • add support for using Supergrafx and CD together [LukeUsher]

  • default filter/shader to "None" rather than "Blur" [LukeUsher]

  • ensure ares is 'portable' on Windows [LukeUsher]

  • fix an issue where System directories were created incorrectly [LukeUsher]

  • remap all inputs based on physical controller layouts [LukeUsher]

  • implement keyboard capture for msx [LukeUsher]


gb

  • tweak display timing; fixes dmg-acid2 and cgb-acid2 [LukeUsher]


gba

  • slightly reduce red tint, to bring the display closer to my GBA SP [LukeUsher]


md

  • add missing initialization during power-on [invertego]

  • readjust cpu sync after recent changes (Kolibri fix) [TascoDLX]

  • reimplement refresh timings [TascoDLX]

  • vdp dma transfer is delayed after bus is acquired [TascoDLX]

  • vdp timing tweaks for accuracy [TascoDLX]

  • vdp vscroll bug implemented [TascoDLX]


msx

  • connect/fix up keyboard emulation [LukeUsher]

  • fix a number of memory layout issues [LukeUsher]

  • fix linear cartridge rom mapping [LukeUsher]

  • improve rom type detection and add more board types [LukeUsher]

  • require a proper bios rom for msx1 [LukeUsher]


n64

  • activate address errors by default [rasky]

  • add address error for invalid 64bit address in 32bit mode [rasky]

  • add missing file for mame RDP SSE2 implementation [rasky]

  • add separate CIC 7102 detection [bigbass1997]

  • add support for homebrew-specific special header flag [rasky]

  • fix (again) TLB logic in case of invalid TLBs [rasky]

  • fix 64-bit pc calculation in J opcode [rasky]

  • fix a few memory access opcodes that were using a 32-bit address [rasky]

  • fix behavior of conflicting bits in writes to SP_STATUS [rasky]

  • fix BGEZAL/BGEZALL opcodes when testing RA [rasky]

  • fix cache to use physical addresses [rasky]

  • fix controller input after PIF refactoring [rasky]

  • fix COP0 config initial status [rasky]

  • fix cop0 LL write mask [rasky]

  • fix CPU core to correctly handle 64-bit PC [rasky]

  • fix Dual accesses on MMIO regs [rasky]

  • fix exception kind in case of TLB invalid page and with nonmatching asid [rasky]

  • fix handling of invalid pagemasks [rasky]

  • fix JALR when jumping to RA [rasky]

  • fix LL / SC / LLD / SCD opcodes [rasky]

  • fix masking of COP0 context / xcontext [rasky]

  • fix RSP BGEZAL/BLTZAL when RA is being tested [rasky]

  • fix RSP DMA wraparound [rasky]

  • fix RSP DMEM/IMEM accesses with all access sizes [rasky]

  • fix RSP LTV opcode in its corner cases [rasky]

  • Fix RSP MTC2 and LFV opcodes [rasky]

  • fix RSP PC to stay within 12 bits in all cases [rasky]

  • fix SIGILL at startup when SSE4.2 is not supported [rasky]

  • fix TLB logic for non-global entries [rasky]

  • fix TLB random register when wired > 31 [rasky]

  • implement buggy byte/half reads from cartridge space [rasky]

  • implement exceptions in non-taken delay slots [rasky]

  • implement LWU opcode in RSP [rasky]

  • implement proper PI bus writes with IO busy bit [rasky]

  • implement undocumented broken RSP opcodes [rasky]

  • improve address exceptions with correct COP0 status [rasky]

  • improve emulation of vector load opcodes in side cases [rasky]

  • improve TLB register masking [rasky]

  • increase a little the PI DMA timing. [rasky]

  • internal mask of physicalAddress register in TLB entries [rasky]

  • make sure TLB entries are correctly initialized at power [rasky]

  • map domain 1 address 3 zone into main memory map [rasky]

  • refactor PIF chip into its own class [rasky]

  • implement correct behaviours of jumps within delay slots [rasky]

  • small accuracy tweak to the RSP semaphore register [rasky]

  • Change inner dead-zone size and geometry [kev4cards]


pce

  • initialise bram for cd-rom system [LukeUsher]


sfc

  • Add database entry for the "Super FX voxel demo" to specify a RAM size of 64k instead of 32k [jbo-85]

  • Support ROM/RAM addressing for Super FX ROMs that are not a power of 2 [jbo-85]

  • fix a hang when loading Satallaview content [LukeUsher]

  • pad bsx flash to minimum size of a memory cart [LukeUsher]


m68000

  • adjust interrupt/exception timing [TascoDLX]

  • fixed group 2 exception prefetch (CHK, DIV by zero) [TascoDLX]

  • omit illegal addressing modes for CMPA & TST [TascoDLX]


tms9918

  • implement text mode [LukeUsher]


hiro

  • fix menubar visibility with gtk3 [AmatCoder]


nall

  • determine desktop path based on environment [LukeUsher]

  • handle CHD paths with non-ASCII chars on Windows [invertego]

  • optimize priority_queue remove function [rasky]

  • prevent chd memory leaks + don't allow unsupported track types [LukeUsher]

  • remove hardcoding of lto=true [LukeUsher]


mia

  • support for loading CHD compressed CD-ROM images [LukeUsher]

  • update out of date resources [invertego]

  • update sfc board database & heuristics [LukeUsher]


ruby

  • pulseaudio shouldn't block for events [AmatCoder]


other

  • Add top-level Makefile [rasky]

  • fix building from Windows command prompt [invertego]

  • fix clean targets on Windows [invertego]

  • fix zlib include path [invertego]

  • codesign binary after build on macOS [rasky]



--127--

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.


MAME RDP

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


Change log

  • 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]



--126--

This update brings even more improvements to the NES/Famicom emulation by adding support for many more rom mappers.


Compatibility for MSX1/MSX2 has also improved as a result of adding heuristics for better mapper detection. An issue that prevented Windows users from mapping inputs in v125.1 has also been fixed.

  • fc: support for namco 175/340 boards [encoded-byte]

  • fc: support for namco 118 board [encoded-byte]

  • fc: support for Color Dreams board [sp1187]

  • fc: support for bandai 74161 boards [encoded-byte]

  • fc: split bandai fcg / lz93d50 boards [encoded-byte]

  • fc: Support for Action 52 board [sp1187]

  • fc: support for bandai lz93d50 variant [encoded-byte]

  • fc: support for unrom variants [encoded-byte]

  • fc: support for sxrom boards with mmc1a [encoded-byte]

  • fc: support for cnrom with security [encoded-byte]

  • fc: support txrom variants [encoded-byte]

  • fc: support for namco 163 board (no sound) [encoded-byte]

  • fc: attach sunsoft 4 + ext rom [encoded-byte]

  • fc: support for cprom board [encoded-byte]

  • fc: support for bandai karaoke board [encoded-byte]

  • fc: fix saving on bandai lz93d50 + m24c02 [encoded-byte]

  • fc: support for bandai oeka board [encoded-byte]

  • fc: partial support for bandai datach [encoded-byte]

  • msx: add heuristics for rom type detection [LukeUsher]

  • msx: msx: use the slot layout and memory expected by cbios [LukeUsher]

  • component: fix eeprom m24c mode selection [encoded-byte]

  • hiro: monitor activate messages for window focus [invertego]

  • mia: updated fc database [encoded-byte]



--125.1--

It's an emergency point release to fix a major performance issue that has exclusively impacted Windows users. If you're a Windows users, you probably want to update.


Additionally, it fixes some minor crash issues, implements the GTROM mapper (used by some NES homebrew) and fixes an issue where some roms could not be loaded from a .zip file, these changes would usually have waited until v126, but since they have already been completed, it didn't make sense to hold them back.

  • fc: implement GTROM mapper [LukeUsher]

  • hiro: track window focus via messages, not polling [invertego]

  • mia: prefer known rom extensions in zip archives [invertego]

  • ms/sfc: fix some light-gun related crashes [invertego]



--125--

ares v125 brings significant improvments to Famicom, Mega Drive and Mega CD/32X emulation and minor improvements to Master System and GearGear emulation.


An issue that caused most recompiler based cores to crash on macOS has been solved.


The desktop ui also gained support for a 'screenshot' hot-key, a crash issue was fixed in the Nintendo 64 emulation core.

The website has also been updated to house a compatibility list, but a large number of titles have not yet been tested.
Feel free to submit PRs to add missing entries.

  • ci: use MSYS2 on Windows, add support for clang. Fixes performance issues on Windows [invertego]

  • desktop-ui: add screenshot hotkey [kawa-oneechan]

  • desktop-ui: fix file/folder browser dialog alignment [invertego]

  • desktop-ui: fix linking on older macOS toolchains [rasky]

  • fc: add chip type to manifest [encoded-byte]

  • fc: always check for ram presence [encoded-byte]

  • fc: check for ram and simplify banking [encoded-byte]

  • fc: fix jaleco jf14 banking [encoded-byte]

  • fc: pinout support for konami vrc7 [encoded-byte]

  • fc: support expanded bnrom & uxrom [LukeUsher]

  • fc: support for irem g101 mapper [encoded-byte]

  • fc: support for irem h3001 mapper [encoded-byte]

  • fc: support for item if12 mapper [encoded-byte]

  • fc: support for item lrog017 mapper [encoded-byte]

  • fc: support for taito x1-005 mapper [encoded-byte]

  • fc: support for taito x1-017 mapper [encoded-byte]

  • fc: support jaleco fc05 mapper [encoded-byte]

  • fc: support jaleco jf13 mapper [encoded-byte]

  • fc: support jaleco jf17/19 mappers [encoded-byte]

  • fc: support konami vrc2 varient [encoded-byte]

  • fc: support taito tc0190 mapper [encoded-byte]

  • fc: support taito tc0690 mapper [encoded-byte]

  • gg: add 'Micky Mouse no Castle Illusion (Japan)' to game database [LukeUsher]

  • libco: fix vector register handling on aarch64 [Sintendo]

  • libco: optimise co_swap_function on aarch64 [Sintendo]

  • m68000: avoid changing interrupt mask on exceptions [TascoDLX]

  • m68000: fix disassembly of pc-relative addresses [TascoDLX]

  • m68000: restore TAS instruction for cpus other than MD main [TascoDLX]

  • mcd: allow continuous CD playbacl [TascoDLX]

  • mcd: auto-detect disc region based on boot code, fixes some false detections [TascoDLX]

  • mcd: report error on unhandled cdd command [TascoDLX]

  • mcd: reset timer on write [TascoDLX]

  • mcd: support 3-button pad as default [TascoDLX]

  • md: fix interrupt ack special case [TascoDLX]

  • md: fix irq issues, timing, delays, ack [TascoDLX]

  • md: fix z80 bus access & timing issues [TascoDLX]

  • md: improved cpu open bus line accuracy [TascoDLX]

  • md: improved timing/signaling for Z80 busreq [TascoDLX]

  • md: prevent SRAM from masking out high rom [TascoDLX]

  • md: sram support for Super Hydlide (J) [TascoDLX]

  • mia: add konami vvrc2/4/6 to database [encoded-byte]

  • mia: use database for fc [encoded-byte]

  • ms: fix "set VDPBuffer" tests in VDPTEST.sms [LukeUsher]

  • n64: increase screen canvas to 576 lines, fixes a crash in certain display modes [invertego]

  • nall: Tweak & fix generation of CD subchannel data [TascoDLX]

  • nall: Various fixes to CD session handling [TascoDLX]

  • nall: improved CD cuesheet loading to handle PREGAP and POSTGAP [TascoDLX]

  • recompiler: on macOS allow data segment to be executable [invertego]

  • sh2: fix several instructions, default to recompiler [invertego]

  • snes: Fix D-Port BOS test in SPC7110 Check Program [jbo-85]



--124--

This release brings the compatibility rating for the Famicom and Nintendo 64 cores up to three stars. This means that at least 80% of the game library is working.


There have been notable improvements to Game Boy, Mega Drive, Sega Mega CD, Sega 32X and Nintendo 64 emulation, and the PC-Engine multi-tap is now supported.


Finally, the dynamic recompiler now generates slightly more efficient code. You may notice a slight performance boost in Nintendo 64, Sega 32X and Sony PlayStation.

  • Famicom: Add support for Jaleco JF11/JF14 mapper [Shideravan]

  • Game Boy: Bring fast-boot closer to normal boot; Fixes Dr. Fraken [invertego]

  • Game Boy: Use stable sort for sprites; fixes speech bubbles in Crayon Shin-chan 3 [invertego]

  • Game Boy: Remove limit on window width; fixes pause screen in Heiankyo Alien [invertego]

  • Game Boy: Emulate serial transfers with no link; fixes input in Alleyway [invertego]

  • Game Boy: Improve handling of LCD/BG enable for DMG; fixes Hyper Lode Runner [invertego]

  • Game Boy: Resume from halt whenever (IE & IF) != 0; fies Amazing Penguin [invertego]

  • Mega Drive: Fix DMA transfer rate and H-Int signalling; fixes Another World, 3 Ninja's Kick Back, Virtua Racing, Burning Force [TascoDLX]

  • Mega Drive: Fix sprite masking and overflow; Fixes Mickey Mania [TascoDLX]

  • Mega Drive: Fix DMA fill; Fixes Demons of Asteborg [TascoDLX]

  • Mega Drive: Fix VRAM byte addressing; Fixes Contra Hard Corps, Musha [TascoDLX]

  • Mega Drive: Fix VDP control port writes [TascoDLX]

  • Mega Drive: Implement HV Counter Patching [TascoDLX]

  • Mega Drive: Implement STOP instruction; fixes Thunder Force IV [TascoDLX]

  • Mega Drive: Default to 3-button gamepad; fixes games that don't support 6-button pads [Shideravan]

  • Mega Drive/Mega CD: Fix detection of device rom header; allows Mode-1 to work [Luke Usher]

  • Mega CD: Fix word-ram 1M access pattern; Fixes Lethal Enforcers II [TascoDLX]

  • Mega CD: Fix H-Int vectoring; Fixes Microcosm, Silpheed, Wing Commander, and others [TascoDLX]

  • Mega CD: Implement full graphics/1M wordram translations; fixes Rebel Assault [TascoDLX]

  • Mega 32X: Tighten M68k sync; Fixes Kolibri and Fifa 96 [TascoDLX]

  • Neo Geo Pocket: Fix off-by-one error in LDAR instruction; fixes a crash in SNK Gals' Fighters [invertego]

  • Nintendo 64: Support controller ports 3 & 4 [LukeUsher]

  • Nintendo 64: Better Flash Ram support; Fixes Majora's Mask, Paper Mario, Derby Stallion 64 [jeltaqq]

  • Nintendo 64: Add mempack/rumble status to database; eliminates controller pak/rumble pak warnings [remutro]

  • Nintendo 64: Consume cycles to compensate for skipped RDRAM initialization; fixes Wave Race 64 Shindou Pak [invertego]

  • Nintendo 64: Fix PIF RAM init on cold boot, preserve RDRAM on warm reset; fixes Perfect Dark boot [invertego]

  • Nintendo 64: Default to 3 controllers for Jeopardy!, this game doesn't work with 4 controllers, even on hardware [invertego]

  • Nintendo 64: Fix FPU compare and divide exceptions; Turok is now able to play the entire Acclaim logo animation [invertego]

  • Nintendo 64: Decrease SI DMA delay; improves Turok, Donkey Kong 64, Forsaken 64, Hercules, Triple Play 2000 [invertego]

  • Nintendo 64: Implement perfect PI DMA write [rasky]

  • PC Engine: Support Multi-Tap [LukeUsher]

  • TMS9918: Widen vcounter to 9-bits; improves ColecoVision, SG-1000, MSX [invertego]

  • desktop-ui: Support up-to 5 virtual controllers (For PC-Engine) [LukeUsher]

  • desktop-ui: Fix window background with GTK3 [ghisvail]

  • desktop-ui: Install icons in freedesktop compliant locations [ghisvail]

  • desktop-ui/hiro: Improved macOS user experience [LIJI32]

  • ruby: Fix conflated keys on Windows; fixes some keyboard input issues [invertego]

  • nall: Use XDG base directories on *nix systems [ghisvail]

  • shaders: Include a selection of public-domain shaders [LukeUsher]

  • ares: Fix address masking in instruction tracer [invertego]

  • ares: Fix warnings reported by clang [invertego]

  • ares: Fix static init in node subclasses [invertego]

  • ares: Use 64-bit integers instead of 128-bit integers in the scheduler [invertego]

  • ares: Use IP relative direct branches in the recompiler, where possible [invertego]

  • ares: Emit only one epilog per block in the recompiler [invertego]

  • ares: add label API to recompiler to simplify branches [invertego]

  • ares: Use fixed BSS allocation for code cache; improves recompiler performance [invertego]

  • ares: Fix instructionEpilogue test [invertego]

  • ares: Directly emit code for target ABI; generates more efficient code in the recompiler [invertego]

  • ares: Avoid encoding absolute data addresses in the recompiler [invertego]

  • nall: allow mingw headers to define MSVCRT_VERSION [invertego]

  • nall: generate PDB when building with clang on windows [invertego]

  • nall: allow generation of debug symbols with symbols=true [invertego]

  • nall: link with lld wen building with clang on Windows [invertego]

  • nall: Make thread movable but not copyable; fixes random UI hangs on Windows [invertego]

  • mia: Fix MSU-1 rom loading [Luke Usher]



--123--

It includes significant improvements to the emulation of the ColecoVision, SG-1000 and the Game Boy/Game Boy Color. 


This release brings the compatibility rating for ColecoVision and SG-1000 to four stars.


This means that we have 100% compatiiblity with both of those libraries, with the only exception being the few games that require additional peripherals (driving controllers; touchpads, etc). 


The Game Boy improvements are significant, but not quite enough to increase the compatibility rating at the present time, even so, Many more games are playable than before.


Finally, a few tweaks to MegaDrive emulation have improved compatibility, reduced the occurance of video corruption, and improved performance of the Sega 32X emulation.

  • ColecoVision: Initialize ram to 0; fixes a crash in The Heist [Luke Usher]

  • ColecoVision: Disable cartridge rom mirroring; fixes Sammy Lightfoot [invertego]

  • ColecoVision/MSX/SG-1000: Initialize VRAM to 0; fixes various games [invertego]

  • Game Boy: Check window x-coord instead of only y-coord; improves the Acid2 test rom [Luke Usher]

  • Game Boy: Only raise STAT interrupt when display is enabled; fixes Cool Hand [invertego]

  • Game Boy: Implement HALT hardware bug [Meepster99]

  • Game Boy: Fix relationship between LY and STAT interrupt; fixes Elite Soccer, Mouse Trap Hotel, Shantae [invertego]

  • Game Boy: Only trigger STAT interrupts at the start of OAM search; fixes Mortal Kombat 3 [invertego]

  • Game Boy Color: Fix HDMA5 bit.7 reads; improves a significant number of GBC games [invertego]

  • Game Boy Advance: Simulate standard GBA instead of Game Boy Player; fixes GBA Video titles [Luke Usher]

  • Mega Drive: Implement support for Sonic & Knuckles merged roms; fixes Sonic 2K, Sonic 3K [Luke Usher]

  • Mega Drive: Implement support for SRAM/EEPROM when using the SEGA Mapper; fixes Demons of Asteborg [Luke Usher]

  • Mega Drive: Default to 'accuracy' VDP; improves compatibility at the expense of performance [Luke Usher]

  • Mega Drive: Optimize how often the emulator synchronises between components; offsets the cost of the previous change [Luke Usher]

  • Nintendo 64: Maintain Parallel-RDP as a subtree; simplifies compilation [Luke Usher]

  • SG-1000: Implement support for roms greater than 32KB [Luke Usher]

  • SG-1000: Implement support for Taiwan Type-A/Type-B mappers; fixes unlicensed Taiwan releases [Luke Usher]

  • SM83: Fix DAA instruction [Meepster99]

  • TMS9918: Implement multicolor mode; fixes various SG-1000/ColecoVision games [invertego]

  • TMS9918/Master System/MSX: Allow sprites to bleed off top/left screen edges [invertego]

  • ares: Rename lucia to desktop-ui to better represent it's function [Luke Usher]

  • mia: Improve N64 save-type database [jeltaqq]

  • mia: Add support for UNF extension, alongside UNIF and NES [Shideravan]

  • nall: Add macOS deployment target flags; fixes ares on macOS 10.14 [MerryMage]

  • ruby: Give PulseAudio higher priority than ALSA on Linux Systems; ALSA was causing frame-rate issues [Luke Usher]



--122--

This release primarily provides improved Neo Geo Pocket/Neo Geo Pocket Color and Sega 32X emulation.


The entire Neo Geo Pocket/Color library is now thought to be playable, with minor graphical issues in four titles. 

A small number of SEGA 32X games are now playable, although most still experience graphical and/or audio issues.


  • ColecoVision: Clear top bit of controller port reads; fixes Defender [invertego]
    Neo Geo Pocket: Allow BIOS to handle the boot process [invertego]
    Neo Geo Pocket: Copy SNK logo from BIOS during fast boot; fixes Metal Slug: 2nd Mission [invertego]
    Neo Geo Pocket: Fix address used to test ram initialization [invertego]
    Neo Geo Pocket: Initialize Neo Geo Pocket port 1 to zero; fixes Dynamite Slugger [invertego]
    Neo Geo Pocket: Many improvements to 'fast boot' [invertego]
    Neo Geo Pocket: Re-enable savint ram to disk on unload [invertego]
    Sega 32X: Implement FM/Framebuffer access bit; fixes Spiderman [Luke Usher]
    Sega 32X: Implement RV bit [Luke Usher]
    Sega 32X: Optimise SH7604 recompiler min-cycles for 32X; fixes Knuckles Choatix & Virtua Fighter [remutro]
    Sega 32X: PWM DREQ and timer are different things; fixes PWM audio in many games [Luke Usher]
    Sega 32X: Used cached interpreter instead of recompiler [Luke Usher]
    TMS9918: Fix sprite size emulation; fixes many graphical issues in ColecoVision/MSX/SG-1000 [invertego]
    TMS9918: fix interrupt behavior [invertego]
    hiro: Fix browser dialog filters on macOS [Luke Usher]
    hiro: Force GTK3 to use X11 backend; fixes a crash under Wayland [thrimbor]
    lucia: Disable fast boot by default [Luke Usher]
    lucia: Support digital presses from analog inputs [invertego]
    mia: Add workaround for underdumped Delta Warp rom [Luke Usher]
    mia: Improve Nintendo 64 save chip database; fixes saving in some titles [sp1187]
    nall: Enable LTO by default on non-debug builds [Luke Usher]
    nall: Speed up recompiler codegen [Luke Usher]
    sh2: Allow cores to determine an ideal minimum recompiler block size [Luke Usher]
    sh2: Optimised code-gen for the interpreter [Luke Usher]
    sh2: Recompiler should invalidate single blocks, not entire pools [Luke Usher]
    tlc2900h: Fix immediate mask in BIT #,r; fixes Pocket Tennis [invertego]
    z80: Correct the effect of IE on the next instruction; fixes audio drop-out in Neo Geo Pocket games [invertego]



--121a--

It's a minor point release for v121.

This is identical to Near's final release of v121, with some additional patches to fix compilation on gcc (windows/linux) and macOS.



--121--

I've released ares v121. Because it is not fully complete or stable, it is released as source code only.

The license is now once again ISC instead of CC-BY-NC-ND.

Master System, WonderSwan, and WonderSwan Color compatibility have increased to 100%, with no remaining known bugs.


The Neo Geo Pocket is very close to 100% now with one issue remaining, where sound effects sometimes mute in games.

Nintendo 64 compatibility has increased to above 80% thanks to corrections to controller pak handling.

Several NES and Mega CD fixes have been added. EEPROM support has been added for the Mega Drive.

Memory cards and paks now pre-format themselves, so you don't have to do so in-game or in BIOS settings.

The new Neo Geo emulation is slowly improving, but it's still very preliminary with only seven games fully playable so far.

The Nintendo 64 SM5K and PlayStation HC05 processor cores have been emulated, but not connected yet due to a lack of information.


Added mouse input support and connected peripheral selection to the GUI, so mice and light gun games can now be used.


There is now per-system input mapping overlays, so you can map controllers based on the original system button names.

And lastly as promised, the SNES core has gained optional widescreen support.

  • Nintendo 64: added Windows ABI support to dynamic recompilers

  • PlayStation: added Windows ABI support to dynamic recompiler

  • Nintendo 64: temporarily disabled 64-bit addressing mode due to issues

  • Nintendo 64: corrected analog stick ranges and emulated octagonal boundaries

  • Nintendo 64: code cleanups around memory access functions

  • Nintendo 64: started to implement RDRAM broadcasting (very incomplete still)

  • Mega Drive: improved VDP scanline renderer timing

  • M68K: corrected clipping bug in ADD,CMP,SUB instructions

  • Nintendo 64: improved SI scanning of PIF RAM and emulated more flags

  • Nintendo 64: added very accurate controller pak initialization code

  • Nintendo 64: improved controller analog stick approximations [MerryMage]

  • Nintendo 64: added priority queue to delay SI and PI DMA transfers

  • Master System: added bit-perfect YM2413 instrument patch sets

  • Mega Drive: fixed a bug with LINEA and LINEF instructions (should not decrement PC)

  • Mega Drive: added EEPROM emulation

  • mia: added Mega Drive and Mega 32X EEPROM database entries

  • nall: added priority_queue::remove(T) support

  • Nintendo 64: reverted 64-bit TLB (not actually present)

  • Neo Geo: initial implementation

  • Neo Geo: many emulation improvements

  • nall: add workaround for compilers that lack __has_builtin

  • Nintendo 64: ignore A15 on controller pak reads and writes

  • Master System: implemented Codemasters, Korea, MSX, Janggun mappers

  • Master System: improved Sega mapper emulation

  • Master System: added initial emulation of port $3e

  • Master System: added support to load BIOSes

  • Master System: initialize stack pointer to 0xfffd when no BIOS loaded [Luke Usher]

  • Game Boy Advance: emulated BIOS swap register [MerryMage]

  • Mega Drive: cancel pending IRQs when they are disabled [Jonas Quinn]

  • Mega Drive: fixed handling of VDP field flag [Jonas Quinn]

  • Mega Drive: mask upper bit of VDP sprite Y value when in progressive display mode [Jonas Quinn]

  • X24C01, M24Cxx: improve emulation of EEPROM command sequences

  • Famicom: added database entries for Jajamaru Gekimaden and Mazase Top Pro PRG-RAM

  • M24Cx: rewrote emulation to be more complete; though still not working for Cxx/Cxxx sizes

  • Nintendo 64: try stopping SI polling on recv=0xfe

  • Mega Drive: improved EEPROM emulation

  • Nintendo 64: fixed CPU SCC counter rate [simer]

  • Nintendo 64: added initial emulation of the SM5K processor (not connected yet)

  • lucia: update frame rate from the main thread to prevent a race condition with GTK

  • Master System: emulated sprite zoom and fifth-sprite status flag

  • Master System: corrected VDP background emulation for mode 4 [fixes Codemasters games]

  • Master System: latch VDP background nametable address and scroll registers [fixes Desert Speedtrap]

  • Master System: mask CRAM reads to 6-bit in Master System mode [fixes Mercs]

  • Master System: refactored VDP code

  • Z80: swapped IND/INI to post-decrement B, and OUTD/OUTI to pre-decrement B

  • lucia: fixed a crash when loading Game Gear games due to stubbing out the BIOS

  • Nintendo 64: fixed cartridge flash memory support

  • Master System: VDP line coincidence should be initialized to $ff [fixes Shadow Dancer]

  • Master System: VDP sprite overflow index defaults to $1f, not $00 [fixes PGA Tour Golf]

  • SN76489: corrected port latching behavior and noise volume writes [fixes Micro Machines]

  • TMS9918: greatly refactored code

  • V9938: greatly refactored code

  • Z80: disassembler fixes

  • lucia: corrected mapping of Master System pause button [fixes Baku Baku Panic]

  • nall: disable -Wstringop-overflow for GCC due to compiler heuristics error

  • M68HC05: initial core implementation added

  • M68000: renamed core from M68K

  • Super Famicom: clearing $4200.d0 stops active joypad polling for the rest of the frame [Jonas Quinn]

  • Master System: don't evaluate sprites past active display area [fixes Rescue Mission]

  • Mega Drive: don't acknowledge VDP IRQs until the CPU triggers them [fixes Mega Lo Mania]

  • lucia: begin refactoring input mapping to allow per-system mappings and multiple controller types

  • Game Gear: set CPU::in() unmapped return value to MDR; fixes RoboCop 3 [Jonas Quinn]

  • WonderSwan Color: do not mask screen tilemap base address; fixes Sorobang [FPGAzumSpass]

  • Mega Drive: set supervisor mode and clear trace mode for all exceptions; fixes Gouketsuji Ichizoku [Jonas Quinn]

  • Mega CD: format BRAM instead of leaving it uninitialized; fixes Popful Mail (US)

  • WonderSwan: add patch for Meitantei Conan: Nishi no Meitantei Saidai no Kiki!

  • Game Boy: add MBC1#M mapper database entries; fixes Bomber Man Collection, Genjin Collection, Momotarou Collection, and Mortal Kombat I & II

  • Neo Geo Pocket: $8118 background register exists even in the K1GE GPU; fixes Samurai Shodown

  • Neo Geo Pocket Color: return 0xFF acknowledge byte after flash erase command; fixes Puzzle Link 2 and Memories off: Pure

  • Neo Geo Pocket: clear watchdog timer counter on trigger to prevent infinite triggering; fixes Neo Baccarat, Neo Cherry Master Color, and Neo Mystery Bonus

  • TLCS900H: do not allow interrupts to run between CPDR, LDIR, LDDR instructions; fixes Fantastic Night Dreams Cotton

  • Neo Geo Pocket: add all remaining missing I/O registers (not emulated, but registers are readable and writable now)

  • Neo Geo Pocket Color: above changes also fixed in-game audio in Crush Roller and Dynamite Slugger

  • Mega CD: added 1M mode WRAM swap request flag; fxies AX-101, Earnest Evans, and Might & Magic III [TascoDLX]

  • lucia: added input mapping overlays for all remaining systems

  • lucia: added two-player support to all remaining systems

  • TLCS900H: refactored instruction decoder and disassembler using range-case

  • TLCS900H: improved emulation of (PC+d16) addressing mode (LDAR)

  • TMS9918, V9938, SMS VDP: corrected sprite zoom emulation [Jonas Quinn]

  • Neo Geo Pocket: added new debugging modules (flash ROM, I/O accesses, system calls)

  • Neo Geo Pocket: improved CPU interrupt logger (prints name of interrupt now)

  • Neo Geo Pocket: fixed a critical issue with interrupt priority levels; fixes many games

  • Neo Geo Pocket: added stubs for all remaining TMP95C061F I/O registers (not emulated yet)

  • Neo Geo Pocket: set CPU I/O port $b1.d2 reads to return 1 (fixes SNK Gals' Fighter)

  • Neo Geo Pocket: added stubs for undocumented CPU I/O ports $b6 and $b7

  • Super Famicom: PPU code restructuring

  • Super Famicom: added widescreen (16:9 and 21:9) support to the scanline renderer

  • WonderSwan: refactored I/O handlers to use switch/case instead of if tests

  • WonderSwan: rewrote PPU renderer to modularize each component (screen1, screen2, sprite, dac, etc)

  • WonderSwan: corrected timers to count down instead of up; fixes timing in many games [FPGAzumSpass]

  • WonderSwan: improved screen two window emulation [FPGAzumSpass]

  • hiro: TableView::onContext() is now TableView::onContext(TableViewCell) (not supported for Cocoa or Qt yet)

  • lucia: merged code to handle input assignment overlays and controller polling for each emulation core

  • lucia: added virtual mouse emulation and added mouse capture support

  • lucia: added support to change devices connected to controller ports

  • Neo Geo Pocket: added database workaround for underdumped Prize Game: PP-AA01 Pusher Program (Japan)

  • Neo Geo Pocket: fixed fast boot mode for Neo Cherry Pocket

  • nall/range: added new within() templates

  • V30MZ: emulated instruction prefetch

  • V30MZ: greatly improved instruction timings (thanks to FPGAzumSpass' test ROM)

  • WonderSwan: disabling an interrupt source does clear its pending status (fixes Digimon Tamers)

  • TLCS900H: improved prefetch handling and instruction timing (still imperfect)

  • TLCS900H: improved timing further (still imperfect)


--120--

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]

Show Previous Changes

--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.