141 / 04-11-2024
ares
Accuracy
Performance
Features
Ares was originally Near/Byuu's last project and was subsequently 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
--141--
As always, if you wish to see the full changelog in a per-commit format along with their authors, you can do so on GitHub here.
Nintendo - SNES / Super Famicom
Fix detection of the Sufami Turbo base cartridge (Avoiding serial conflict with Sailor Moon SuperS - Fuwafuwa Panic).
Fix PowerFest '94 and Campus Challenge '92.
Add support for games with 256KB of SRAM (Notably used in rom hacks, but these hacks also work on real hardware).
Add support for the NTT Data Keypad
Fix SA-1 DMA to BWRAM banks 0x41 and above.
Nintendo - Game Boy Advance
Improve stop mode emulation, ensuring it only exits once the requested input is registered.
Improve interrupt timings (latch IE and IF for 1 cycle).
Add latches to DISPCNT background enable, object enable and force blank; these now correctly take effect after 3 scanlines.
Improve SIO register handling.
Fix an off-by-one error with BG mosaic handling.
Fix an oversight in OBJ mosaic at x=0. Improve OBJ timing: OBJs are now correctly rendered one scanline in advance, and OBJ PRAM access timings are closer to hardware.
Add a 2-cycle synchronizer and improve halted CPU timings
Selectively synchronize CPU and APU, allowing for the removal of the compile time 'PERFORMANCE' profile. (Greater accuracy in Release builds with no performance downsides).
Small improvements to PPU timing.
Added support for the Pixel Accuracy toggle; significant performance increase when pixel accuracy is disabled.
Nintendo - Nintendo 64
Remove the 'devertualizeFast' performance optimisation from code block lookups: this was proven to compromise correctness/accuracy.
Refactor devirtualize to return additional context for memory access, reducing code duplication in-memory operations.
Use JIT only when running code from i-cache.
Add support for 40 Winks (Aftermarket).
Add support for Xeno Crisis (World) (Aftermarket)
Allow for Pak swapping on Controller Port 1 (You can now change between Controller Pak/Transfer Pak/Rumble Pack at runtime).
Fix instruction trace debugging when using the recompiler.
Add support for multi-byte writes to the GDB debugger.
Use different GDB signals for the various exception types.
Allow arbitrary and possibly unaligned writes to RDRAM through GDB.
Add unusual warning when software uses CACHE on uncached addresses
Refactor JIT to remove an extra function call (instructionEpilogue) per instruction.
Sega - Mega Drive / Genesis / 32X / CD
Synchronize components more regularly when emulating 32X; this fixes a regression that caused 'Knuckles Chaotix' to be broken in ares v140.
Add an option to enable the TMSS "Produced by or under license from..." screen.
Other
Stage resources into the output directory on Linux; allowing running self-compiled builds without running 'make install' first.
Address some possible uses of uninitialized variables.
Enable the use of loading higan-style rom folders when using the command line
Update librashader integration for librashader ABI 2
MacOS fixes
Display errors from the shader loader in metal, easing debugging of librashader.
Add bounds checking for table view context menus; fixes a crash when right-clicking beyond the bounds of defined rows in a table.
Fix an issue where librashader did not function on macOS versions lower than 12 (Monterey) when compiled by CI
--140--
As always, if you wish to see the full changelog in a per-commit format along with their authors, you can do so on GitHub here.
Systems
Bandai - WonderSwan / WonderSwan Color
Implement cartridge SRAM open bus
Nec - PC Engine / TurboGrafx / SuperGrafx / CD
Automatic bios detection now prefers the Arcade Card bios for NTSC-J Region, rather than System Card 3.0
Nintendo - NES / Famicom / Disk System
Fix an issue where cartridge ram was not included in save states for some HVC-NROM and Sunsoft 1-3 mappers.
Add support for Camerica/Codemasters mappers
Add support for Tengen Rambo-1 mapper
Add support for Sachen-0037/Tengen-800008 mapper
Add support for the NES Zapper
Nintendo - Game Boy Advance
Prevent the debugger from advancing the CPU clock
Reset prefetch buffer on ROM accesses from DMA
Improve DMA timings
Implement that the prefetcher should halt only once DMA is accessing ROM
Prevent DMA from interrupting ROM accesses
Fix controls when using a rotated screen
Reload timer value after tick
Use separate latches per DMA channel
Implement graphics viewer in the debugger
Nintendo - Nintendo 64
Clear R0 register only when written to (Performance optimisation)
Fix an issue where loading save states would not set the correct audio frequency
Add missing fields to save states
Refactor to remove the branch state machine from the instruction epilogue (paving the way for future recompiler improvements)
Sega - SG-1000
Fix an issue where cartridge ram was not included for Taiwan-A and Taiwan-B mappers.
SNK - Neo Geo
Fix an issue where cartridge ram was not included in save states for the Jockey GP mapper.
Sony - PlayStation
Fix a crash when the display surface wraps around the framebuffer.
Fix an issue where CD-ROM seeking would not interrupt a read operation
Shared Components
ARM7TDMI
Fix reading SPSR register in user and system modes
Improve LDM/STM edge case handling
NEC V30MZ
Fix DAS overflow flag emulation
Fix instruction prefix handling
Fix IP on interrupt fired when prefixes are being used with non-prefixed instructions
Other
Fix an issue where settings may not save correctly on non-english locale
Improve the OpenGL integration with librashader; matching the implementation for the Metal driver
Improve the OpenGL driver on macOS: Fix flickering on resize, add fullscreen behavior toggle and fullscreen monitor selection
Fix building using Make 3.81 (macOS users no longer need to install a newer Make manually to build ares)
Properly detect the target arch when compiling with CL
Improve compatibility with FreeBSD
Fix an issue where the settings window would be too small to show all options on some configurations
Add the ability to switch between the interpreter and recompiler at runtime; previously this was a compile time switch unavailable to end users. You can use the "Force Interpreter" setting to force the 32X, N64 and PS1 cores to use the interpreter.
--139--
If you wish to see the full changelog in a per-commit format along with their authors, similarly to how previous release notes were written, you can do so on GitHub here.
Bandai - WonderSwan / WonderSwan Color
Improve EEPROM emulation accuracy
Nintendo - NES / Famicom
Fix DMA interrupt
Various PPU improvements: most (all?) current PPU accuracy test roms now pass!
Improve emulation of MMC3: fixes test roms and crashes in Mickey's Safari & Incredible Crash Dummies
Fix missing scanlines in Burai Fighter (USA) (last known rendering bug!)
Fix MC-ACC IRQ timing
Add support for mapper 150 (UNL-SACHEN-74LS374N)
Add support for mapper 229 (UNL-BMC-31-IN-1)
Add support for mapper 225/255 (UNL-BMC-128)
Add support for mapper 172 (TXC-22211B)
Add support for mapper 132/173 (TXC-22211A/C)
Add support un-headered roms with the .unh extension (note: uses internal database; unknown roms will not work, headered roms are still preferred)
Nintendo 64 / Nintendo 64 DD
Disable run-ahead for 64DD; fixes an issue that caused 64DD games to fail to boot.
Nintendo - Game Boy Advance
Improve VRAM mirroring in bitmap background modes
Implement 1-cycle timer latch behavior
Improve BIOS open bus edge case emulation
Increase synchronisaton between comonents: slight performance loss for measurable accuracy gain in irq dma tests
Improve video capture DMA such that it only runs if enabled on scanline 162 of previous frame
Sega - Mega Drive / Genesis / CD / 32X
Implement correct SH2 clocks for PAL/NTSC 32X
Improve 32X PWM volume/mixing by taking configured cycle rate into account
User Interface
Improve driver settings and full-screen behavior on macOS
Fix an issue where IPS patches that extend the rom would fail to apply
Fix an issue where changing the video driver may not correctly apply settings
Support "Default" as a device with the WASAPI driver on Windows (Win10 only)
FIx an issue where some settings would not persist on non-english locales
--138--
If you wish to see the full changelog in a per-commit format along with their authors, similarly to how previous release notes were written, you can do so on GitHub here.
Atari 2600
Improved 6502 CPU emulation; all unofficial opcodes are now implemented
Improve handling of the HMOVE register
Refactor of TIA; fixes many emulation issues but still imperfect
Implement correct 6502 reset timing
Bandai - WonderSwan / WonderSwan Color
Minor fixes to v30mz CPU emulation
Emulate 32KB SRAM for '8KB' type cartridges
Implement Sound Test register bits 1,2 and 3
Nintendo - NES / Famicom
Improved 6502 CPU emulation; all unofficial opcodes are now supported
Fix APU frame counter emulation
Various improvements to APU emulation
Implement correct 6502 reset timing
Nintendo - Nintendo 64
Fix an issue where saved data from the current game could be duplicated into the next
Fix an issue where the Real Time Clock may not function correctly depending on the user's local time zone
Nintendo - Game Boy Advance
Implement that the last cycle of the prefetcher cannot be interrupted
Implement correct ROM mirroring for Famicom Mini / Classic NES series
Improve handling of SRAM/Flash bus
Fix the timing of initial DMA wait cycles
Sega Mega Drive / CD / 32X
Lower sync interval between MD and 32X: improves emulation accuracy but does reduce performance
Sony - PlayStation
Update the blitter to operate on a copy of the framebuffer; fixes potential threading issues
ruby (Audio/Video/Input abstraction layer)
Added a native Metal backend for macOS with VRR support
Implemented latency selection in SDL audio driver
Removed the built-in Blur shader, using the bilinear slang shader is preferred
Removed non-hardware accelerated video drivers (any platform capable of running ares should at least have OpenGL, D3D or Metal available)
Reduce CPU usage on the video thread by using a condition variable rather than a spinlock
Add support for connecting a Mouse on macOS (for emulating SNES mouse, etc)
Remove tight loops in SDL and OpenAL drivers, reducing CPU usage when using these drivers.
User Interface
Fix an issue where nested slang shaders were not available in the UI
--137--
This is a relatively small update in terms of number of features/changes, however, the primary change is a big one I'm sure you all will love.
Slang Shader Pipeline (librashader)
ares's shader pipelien has been re-created to support shaders written for the same slang shader pipeline as RetroArch.
This was made possible thanks to librashader: a reimplementation of the RetroArch slang shader pipeline for standalone emulators.
All shaders from libretro/slang-shaders are included. Please be mindful that librashader itself, and ares' implementaton of it are both rather new; some shaders may have compatibility issues, but the vast majority should function as expected.
Bandai - WonderSwan / WonderSwan Color
Improve emulation of the WonderSwan APU: Improves Hyper-Voice accuracy as well as channel timing.
NEC - PC Engine / Turbografx 16 / CD
Add support for Games Express CD-ROM games, these use their own unlicensed System Card/BIOS.
Fix CD-ROM pregap offset (Fixes Super Air Zonk).
Fix PC-Engine Duo/Super CD-ROM internal RAM.
Nintendo - Super Famicom / SNES
wdc65816: Implement the (direct,X) wraparound bug in emulation mode. While this will not have any impact for commercial games (they don't tend to run in emulation mode) it is still an accuracy improvement that allows cputest-full to pass.
Implement SA-1 BW-RAM protection: as above, this does not have any impact for most commercial games, but it fixes the SA-1 RAM protection test.
Nintendo - Game Boy Advance
Improvements to PPU timings.
Improve 32-bit prefetch buffer timing during instruction fetch.
Sega - Sega Mega Drive / Genesis / 32X / CD
CD: Fix an off-by-one issue while decoding subchannels, fixes corruption in CD-G playback.
32X: Fix that unused bits of the
a1518a
register should be set to 0; fixes some broken homebrew.32X: Add approximate timing for 32X memory regions; fixes Brutal: Above The Claw, all known commercial 32X games are now playable, although some minor issues may remain.
32X: Fix an issue with dotscroll causing corruption on some scrolling graphics.
Other
Fixed an issue where the latest macOS SDK caused the statusbar to overlay the entire screen, appearing as if ares was broken.
Fixed clipping issues in the splash screen on macOS.
Improve UI behavior when changing drivers with a game loaded.
Enabled the SDL audio driver on macOS
--136--
Border/Overscan overhaul
When ares was initially designed, it was geared primarily towards SNES emulation, and as such the "Overscan" option in video settings behaved like the overscan feature of the SNES: showing or hiding the lower 16 lines of display. This behavior is not how most end users expect overscan to function.
For ares v136, we have overhauled how borders and overscan is handled across all cores in ares.
The overscan option has been reworked to show or hide all non-desirable edges of the screen (in most cases this is blank borders, but it can include areas that commonly just contain garbage pixels).
Additionally, we have updated most of the emulator cores in ares to have hardware accurate border and aspect ratio when overscan is visible: this also includes PAL, so PAL games are finally rendered at the correct aspect ratio to real hardware when 'aspect ratio correction' is enabled.
NOTE: The border regions for All TMS9918 VDP based consoles are thought to be be correct, as are Master System, Mega Drive, and NES, while SNES and PC-Engine are (educated) estimates. Hiding the overscan area is not yet implemented for Atari 2600, PC-Engine, Nintendo 64 or PlayStation as more hardware verification is required.
Cheat Support
A popular request: ares finally has support for cheat codes, as well as a cheat editor. You can access the cheat editor by going to Tools -> Cheats while a game is loaded.
Cheats are currently implemented for all cores, except for Nintendo 64 and PlayStation: support for these requires larger changes to ares that did not make the cut for this release.
The cheat code format is a simple patch code format XXXXXXXX:YY
where X is an address, and Y is the data to write; most emulators support this format so it shouldn't be difficult to port cheats between them.
It is possible to chain multiple codes into a single cheat entry by separating the codes with a +
symbol; this is useful if a single cheat requires multiple code to work.
Cheats are saved in a cheat database file alongside the rom: for example, Game.sfc
will create a cheat file titled Game.cheats.bml
.
Nintendo - Game Boy Advance
Implement prefetch buffer reset on ROM accesses from the CPU.
Implement that timer 0 count-up bit cannot be set.
Nintendo - Super Famicom / SNES
Fix an issue where the Super Gameboy 2 was running at the incorrect clock frequency.
Nintendo - Nintendo 64
Implement newly discovered PI DMA behavior when crossing RDRAM row boundaries.
Fix a corner face in FPU exception handling
Sega - Mega Drive/Genesis, Mega CD, 32x
Add the Mega CD's PC RAM to the debugger memory viewer.
Implement subchannel processing for Mega CD (Allows the playback of CD+G/karaoke discs provided a valid .sub file is provided)
Sony - PlayStation
Improvements to the handling of the GPUSTAT register.
Other
Switched back to wglSwapInterval for VSync on OpenGL for Windows; the DwmFlush approach caused worse tearing for most users.
Fixed an issue where the SDL input driver considered all controllers to be the same device.
Fixed an issue where rumble events could be missed causing rumble issues in many games.
Improved VSync stability with the DirectX video driver.
--135--
New Release Schedule
Up until now, releases of ares were made when the changes felt 'significant' enough to do so. As of v135, we are moving to a monthly release schedule.
We will aim to publish a new release each month from this point forward, however, there is no strict date allocated for this, so there's still an aspect of 'when suitable'.
User Interface
Renamed "Reload" to "Apply" in Driver Settings to clarify its function
Fixed an issue where the "Deep Black Boost" setting would not save
Rename FPS to VPS (VBlanks per second), as it represents emulation speed and not game frame rate
Fixed an issue where the Firmware Path setting would not save
Debugging
It is now possible to use instruction tracing even with the recompilers in use
Fix an issue where GDB would not reconnect after a disconnection
Coleco - ColecoVision
Added support for Xin1 and MegaCart mappers
Nintendo - NES / Famicom / Famicom Disk System
Use HKROM for MMC6
Improved Famicom Disk System timer interrupt generation
Nintendo - Game Boy Advance
Improve unmapped I/O register behavior: passes I/O read tests in mbga suite
Improve save type detection
Improve ROM to RAM DMA timing
Nintendo - Nintendo 64 / 64DD
Added the ability to disable the Memory Expansion PAK
Simulate SysAD freezes when accessing non-RDRAM areas via the cache
Improve SI emulation to approximate the correct SI Status values
Fix a bug where I/O writes to PIF ram would not trigger interrupts
Improve and extend cache coherency checks
Implement register mirroring
Improve PI latch emulation
Improve PIF HLE emulation by reducing latency
Add support for roms >= ~63.9MiB
Implement undocumented accesses in FPU half-mode
Sega - Mega Drive / CD / 32X
Enabled support for the Mega Mouse for 32X and CD32X games
Improve I/O port emulation (Fixes Decap Attack + others)
Sony - Playstation
Fix an issue where controller input would stop working if sideloading a PS-EXE
ARM7TDMI
Improved ldmia and stmia timings in Thumb mode
Fix additional instructions that require offset when reading PC
Motorola M68000
Correct prefetch order for ASR instruction
Zilog Z80
Implement newly discovered inir/indr/otir/otdr behaviour
Other
Fixed an issue where macOS builds were being optimised for the build machine rather than for distribution
Fixed an issue where the recompilers were broken on Apple Silicon
Fixed an issue where unloading systems after disc swapping could cause a crash
Fix an issue where ares could crash on startup with LTO on macOS
Added support for the SDL input driver on macOS
Fix an issue where the ares would look for resources inside the app bundle rather than alongside it on macOS
If you wish to see the full changelog in a per-commit format along with their authors, similarly to how previous release notes were written, you can do so on GitHub here.
--134--
New System: Arcade
We have added support for Sega SG-1000 based arcade hardware; hopefully the first of many arcade cores within ares (well, technically second because we had the Neo Geo, but that was focused on the console variant, the AES).
Due to the nature of arcade boards, Arcade cores use MAME format roms, and a game list rather than traditional rom files. You can set a path for arcade roms in "Settings -> Paths".
Arcade games will be grouped under one "Arcade" system, regardless of what system the Arcade hardware may be based on.
Please note that ares does not currently resolve parent-child relationships, so arcade rom zip files must contain every file required for that game; in MAME terminology, this is usually referred to as a "Non-Merged" set.
User Interface
A homebrew mode has been added to the settings panel; this is intended to enable features that are useful to homebrew devs but would harm performance for general gameplay. This setting is currently only used in the Nintendo 64 core; more information on this later.
Auto save settings when closing the settings dialog.
Add hot keys for volume control and mute
Refactor the log system to allow more control over log output
Restore the ability to hide cores from the menu
Add a "Scan" button to firmware settings; this autodetects supported firmware from a configured Firmware directory
Update the "Color Bleed" option to work for all non-HD cores, rather than just the SNES
Correct the description of Weave Deinterlacing (horizontal -> vertical)
Improve auto-detection of CD-ROM based games, drag/drop and command line loading are now more reliable
Debugging
Added support for debugging emulated systems via GDB, currently only the Nintendo 64 core supports this, but this will be expanded in future releases.
Atari - Atari 2600
Improve CPU timing in relation to WSYNC
Improve TIA timing, although still far from perfect
Implement latching of the current playfield pixel
Include "current cycle on this scanline" in CPU trace output to aid debugging
Improve RESMP behaviour and implement NUSIZ for missiles
Improve HMOVE object positioning
Fix RIOT timer and timer interrupt bit
Improve detection of PAL roms by looking for the (PAL) string as well as the (Europe) string in the rom filename
Support loading .bin format roms instead of just .a26
Bandai - WonderSwan / WonderSwan Color
Properly implement INT_BASE port
Implement sound DMA hold
Fix sound DMA readout values when disabled
Fix sound DMA source/length shadowing
Fix loading of trimmed roms
Fix ENTER/PREPARE opcode implementation and timing
Fix interrupt return address on division by zero
Improve ROM/SRAM bus timings
Microsoft - MSX / MSX2
Fix conflicts between ROM space and SCC with the KonamiSCC mapper
Allow loading of .rom format roms, rather than only .msx/.msx2
NEC - PC Engine
Add support for "color emulation" (non-linear RGB)
Nintendo - NES / Famicom
Lowered colour saturation to 1.5 to match most other emulators
Implement UNROM-512 mapper
Implement Action53 mapper
Implement mappers 31 and 218 (inl-nsf, magicfloor)
Fix MMC5 program mode 1
Fix support for NES2.0 extended PRG/CHR size variables
Implement self-flashing support to UNROM-512 and GTROM
Remove "GAMMA" adjustment when "Color Emulation" is enabled
Implement PPU open bus behaviour
Serialize controller state in save states: fixes input glitches when using run ahead
Support more variants of the Famicom Disk System Bios
Preliminary support for the EPSM expansion module
Nintendo - Game Boy
Fix MBC3 RTC Overflow/Register handling
Fix MBC3 RAMbank register width
Nintendo - SNES / Super Famicom
Fix support for the PAL Super GameBoy
Separate black level crush from color emulation, it's now exposed as "Deep Black Boost"
Fix PLB wrapping in emulation mode (based on hardware testing, all emulators seem to have gotten this wrong)
Nintendo - Nintendo 64 / 64DD
Implement RSP VU pipeline timings
Fix some incorrect game database entries (Beetle Adventure Racing (J), Chameleon Twist 2, J.League Live 64 Quake 64, Star Fox 64)
Implement RSP duel-issue restrictions for CFC2/CTC2
Fix RSP zero register locking
Clamp the analog stick range to an octagon shape
Implement RDP clock counter
Fix VI line interrupt to trigger post-increment
Fix an issue where instructions in icache would consume two cycles rather than one
Fix an off-by-one error in mul/div instruction timing
Preliminary implementation of FPU delays
Improve idle loop detection in the recompiler
Fix an issue where the recompiler would only advance the physical address and not the virtual address
Added support for the Nintendo 64 Transfer Pak
Fix a regression in the n64-systemtest relating to the TLB
Add support for "Homebrew Mode": this enables ISViewer debug output, and a cache coherency check to aid homebrew developers.
Add support for .D64 disk images
Add support for 64DD disk swapping
Implement the "Controller Config" portion of the Advanced Homebrew Rom Header
Clamp X/Y values from the N64 Mouse (prevents jittery input)
Fix broken RTC emulation for the 64DD
Fix broken RTC emulation for Doubutsu No Mori (Animal Forest)
Improve CIC detection algorithm to not rely on a database, allowing support for custom/homebrew IPL3
Sega - Master System / Game Gear
Added support for the Pak4 mapper
Added support for the Hicom mapper
Added support for the Hap2000 mapper
Added support for the K118in1 mapper
Rename MSX mapper to Zemina mapper to properly represent its origin/purpose
Add support for "color emulation": non-linear blue bias
Improve detection for Japanese roms (Games not containing "TMR SEGA" are only compatible with Japanese systems)
Force ".sms" extension roms to run in Master System Mode when loaded on the Game Gear core
Sega - Mega Drive / CD / 32X
Add support for runtime disc swapping, allowing multi-disc games to be played
Add support for the Mega Mouse when running Mega CD titles
Synchronize on every cycle when the 32X is not in use
Maintain 32X code cache allocation across resets
Fix audio overflow when titles restart the YM2612 (Fixes audio issues in Shining Force)
More performance tuning to the 32X core
Improve CDC emulation (ares now passes the CDC REGS test in mcd-verificator)
Fix a hang in "The Terminator (USA)"
Immediately update YM2612 key on/key-off on write, fixes Puyo Puyo Tsuu music
Update YM2612 key state on phase tick
Add 32X framebuffer mirror emulation, fixes SoulStar X
Tighten synchronisation between audio components
Improve bus-arbiter delays for z80->m68k communication (fixes audio in Overdrive 2)
Improve refresh and bus timings
SNK - Neo Geo
Use YMFM for YM2610 emulation, fixes audio issues in many titles
Sony - Playstation
Implement GTE interrupt bug (if an interrupt is triggered when a GTE instruction is next, the GTE instruction is erroneously executed), fixes spiky polygons in many titles.
Fix an issue where the CD-ROM SetLoc command was erroneously resetting the 'reading' flag
Fix an issue where the Digital Pad would not de-assert /ACK on an invalid command
Improve /ACK timing and behaviour, fixes broken input in many (but not all) games
Implement Dual Shock controllers, required for Ape Escape
Add support for runtime disc swapping, allowing multi-disc games to be played
Add support for half-speed XA-ACPDM, fixes high-pitched audio in many titles
Update ADSR envelopes immediately on write, fixes alert sounds in Metal Gear Solid
Implement muting of data tracks when played as CD-DA
Perform color modulation in RGB555 space, fixes Silent Hill's loading screen
Fix an issue where fast-load hooks would trigger at runtime, causing some games to crash at boot
Simulate an infinitely long cpu write fifo: fixes an issue where many games ran too slow.
Various timing tweaks to improve overall accuracy
Fix an issue where timers would update too slowly when using the recompiler
MOS 6502
Implement support for more undocumented opcodes
Other
Fix system-wide installations on Linux, this fixes database and shaders not loading.
Add support for SDL2 as an input driver on all platforms.
Allocate code cache at early startup for the recompiler: boosts performance on macOS, roughly doubling performance on M1 in some cases
Added support for SDL2 as an audio driver
Use DwmFlush on Windows for vsync, bypassing OpenGL driver bugs
Fix relative time in CD-ROM pregap Q subchannel
Move CD-ROM loading to a separate thread to speed up loading CD-ROM content
Avoid allocation of code buffers in the recompiler
More robust code cache allocation in the recompiler
Added "Games" category to macOS app bundle to allow Sonoma's Game Mode to function with ares
Added support for the risc-v architecture
Added preliminary emulation of the Intel 8080 cpu: not currently used but for future expansion
Fix an issue where the WASAPI driver would cause sync issues when fast-forwarding
--133--
User Interface
Systems that use MAME compatible Arcade roms (currently only Neo Geo) now use a dedicated roms folder (configurable in Settings -> Paths). When loading games for these systems, the user is now presented with a game browser dialog, so users no longer have to struggle to remember shorthand .zip filenames for their games.
ares will now use the modern file browser dialog when browsing for a directory on Windows.
Added a "Reset System" hotkey to allow quick resets of the running system.
Save States
It is now possible to undo the last save, or load, of a save state; this is intended to reduce the chance of data loss on accidental saving (easily possible when using a hotkey).
Atari 2600
Improved resolution handling/screen size calculation.
Fixed an issue where the TIA audio would not correctly reset.
Bandai - WonderSwan
Improved timing accuracy of the V30MZ CPU.
Sega Mega Drive / CD / 32X
The following games have been added to the game database
Alisia Dragoon (E): Override for incorrect region flags in header
Fifa Soccer 95 (Korea): Override for bad SRAM flags in header
NBA Live 95 (Korea): Override for bad SRAM flags in header
Sonic & Knuckles + Sonic the Hedgehog 3 (USA, Japan, Europe): Override for missing SRAM header
Fixed an issue where loading a CD32X game could result on the logo lacking color.
Implement correct sprite list termination behavior; fixes Power Drive's vehicle select menu.
Fix latching of window registers to before the scanline; fixes Landstalker's text box rendering.
Fixed a typo causing the 32X WDT to tick at the wrong frequency in some situations (2096 -> 4096).
Fixed an issue where 32X internal timers would tick too slowly when using the recompiler.
Fixed an issue where loading a CD game followed by a CD32X game would result in the 32X not being detected.
Added support for the SH2's mirrored cache control register; fixes Virtua Fighter.
Fixed an issue where CD BRAM would be overwritten if the CD was loaded without a disc inserted (eg: via mode 1 cartridge).
Fixed an issue where the SH-2 recompiler would not properly invalidate cache; fixes NBA Jam
Fix an edge case that could cause the SH-2 recompiler to infinitely defer interrupts.
NEC - PC Engine / TurboGrafx / SuperGrafx / CD
Added support for connecting/disconnecting the multitap; we could not safely leave it enabled as default as it caused some games to break.
Fixed an issue where ares would incorrectly corrupt CD BRAM when loading a HuCard game.
Fixed an issue where ares would not correctly zero BRAM on formatting.
Fixed an issue where the BIOS would incorrectly detect BRAM size and not format it properly.
Fix an off by one error in scanline interrupts; fixes blue characters in Akumajou Dracula X.
Microsoft - MSX
Added preliminary support for loading cassette tape software/games. Currently, this requires .WAV format audio data.
The following basic commands are used to load cassette tapes of each type:
Binary Data: `BLOAD"CAS:",R`
Tokenized Basic: `CLOAD`
ASCII `RUN"CAS:"`
Microsoft - MSX2
Fixed sprite rendering in Mode 2.
Implemented support for vscroll, Text Mode 1 and Graphics Mode 5.
Implemented just enough of the RTC to allow the use of a real MSX2 BIOS, rather than C-BIOS.
Nichibutsu - My Vision
Support for this system has now been added to ares; ROM dumps should be raw binary images of an entire cartridge using the ".myv" file extension.
Nintendo - Famicom / NES
Added support for the iNES 2.0 timing flag; ROMs that rely on this flag will now run at the correct speed.
Added support for VRC2/4 sub-types; the VRC2 and VCR4 test ROMs now pass successfully.
Fixed initial reset state, allowing reset test ROMs to pass.
Added support for AVE NINA-03 and NINA-06 boards (iNES mapper 79).
Added support for MMC3 multicarts (iNES mappers 37 and 47).
Fixed an issue where FDS games would play some audio channels at an incorrect pitch.
Nintendo - Super Famicom / SNES
Fixed an issue where games using real time clocks may crash the emulator.
Nintendo - Nintendo 64
ares now correctly uses the virtual and physical addresses when simulating icache loads with the recompiler.
Lots of performance tuning, mostly to offset the performance cost of the recent emulation improvements.
Fixed handling of BADVADDR in TLB miss exceptions that are raised by SWR.
Fixed an issue where PAL games would play audio at an incorrect frequency.
Added support for Weave de-interlacing instead of only Bob de-interlacing, Weave is now the default.
Added emulation of RSP SU pipeline stalls; fixes Donkey Kong 64 and Banjo-Tooie.
Added accurate PI DMA timing emulation; fixes Jet Force Gemini and Micky's Speedway USA.
Corrected out of bounds RDRAM behavior; RDRAM is not mirrored.
Removed MAME RDP emulation; Parallel-RDP is now supported on macOS via MoltenVK so the fallback was no longer required.
Nintendo - Game Boy
Fixed an issue where the stop() instruction would not correctly reset the internal div counter to 0.
Nintendo - Game Boy Advance
Implement upper bounds for background fetch; fixes rendering issues in Monster Gate.
Sinclair - ZX Spectrum
Added support for .tap and .tzx format tapes (no need to convert to .wav anymore).
Component changes affecting multiple cores
Fixed various audio inaccuracies in the SN76489 and YM2612 emulation.
Fixed various inaccuracies in Z80 emulation.
Fix various M68000 timing issues.
Command Line Interface
All ares settings are now exposed to the command line interface: a setting can be changed from command line using
--setting
. The list of available settings can be dumped with --dump-all-settings.Added support for suppressing file dialogs and loading multiple roms at once; this allows the loading of complex configurations (e.g.: Super Game Boy) from the command line without needing to use the GUI.
Other
Removed the non-functional Direct3D11 driver; no code for this ever existed, but the UI was displaying the option leftover from an experimental branch.
Fixed an issue where ares would make incorrect assumptions about pregap in CHD files.
Fixed the location/detection of Game Databases on POSIX systems (should reduce issues with third party builds).
Updated the Linux builds to default to GTK3 rather than GTK2, as the latest version of ubuntu has removed GTK2 support from the core repositories.
Added support for IPS softpatching, alongside the existing BPS support.
--132--
General User Interface Tweaks
Various changes have been made to the ares GUI in an attempt to improve user experience.
The "Recent Games" list has been updated to show the System name alongside the game names in the "Recent Games" list, avoiding confusion when the same title is available on multiple systems.
The "Color Bleed" setting is now disabled by default; this option only applies to the SNES core and was causing confusion due to the default settings of ares not being pixel-perfect.
For those using alternative front-ends, it is now possible to select a shader when launching ares from the command line with the --shader parameter.
Ares will now attempt to show an error if running on an unsupported processor, rather than silently crashing.
Screen Scaling
The changes here are significant enough to warrant their own section.
The multiplier scale settings are now radio buttons, allowing the user to see which option is selected, additionally, a 1x scale option is now provided for those who want the window to be 'actual size' of the emulated framebuffer.
Available scale sizes are no longer bound by the current monitor size, avoiding the situation where a selected option may disappear if the user changes monitor or resolution, and the resizing code has been updated to prevent the window growing larger than the active display; so you never lose access to the main menu.
The window resizing logic now avoids un-maximizing the window, if the user has manually done so, even when adaptive sizing is enabled; making it less frustrating to use ares in a maximised window.
The scaling options have been renamed to better describe their function and two new scaling modes have been added:
"Center" has been renamed to "Scale (Integer)"
"Scale" has been renamed to "Scale (Best Fit)"
A new setting: "Pixel Perfect" has been added, which always displays a 1x scale image in the center of the display, regardless of the window size
A new setting: "Scale (Fixed)" which will always display an image matching the users selected scale factor (1x, 2x, etc) regardless of screen size.
Improved CHD Support
Ares has supported CHD for CD-ROM based system for some time now, but it made the assumption that the CHD files were created from a raw bin/cue rip, which is usually the case for correctly dumped software.
This, however, is not the case for Homebrew, which will often ship as ISO files, rather than BIN/CUE. In previous ares versions these would stop working in after being converted to CHD, but this has now been resolved by implementing proper support for MODE1/2048 CHD images.
Save states
While it is expected that emulation updates may cause save states to become invalid when updating ares, the save state version used to be tracked at a global level. This meant that an emulation tweak in one core would break save states in ALL cores, even if the should have remained compatible.
Save State versioning has been updated to store a per-core version instead, to ensure that save states are only invalidated when actually required.
Atari 2600
We have updated the internal scaling ratio for Atari 2600 so that 1x screen scale works as expected.
WonderSwan / WonderSwan Color
The WonderSwan core has once again received a significant amount of improvements, making it even more accurate than ever before; while most of these changes do not impact commercial games, ares is rapidly becoming more viable emulator for WonderSwan homebrew development.
Among those changes are:
Significant improvements to emulation of the processor, including flags, undefined opcodes, and timing.
Better handling of some differences between WonderSwan and WonderSwan Color
Improvements to timing of WonderSwan components (PPU, etc)
Fixed an issue where save states would not work correctly
For a detailed breakdown, refer to the complete changelog on GitHub.
Nintendo NES / Famicom
There have been a few minor tweaks to NES/Famicom emulation:
Fixed an issue where the PPUDATA access scanline check was incorrect for PAL systems.
Added support for the ave nina-001 board, allowing Impossible Mission II to work
Added support for Unheadered ROMs; while it is still recommended to use proper iNES roms, ares will now lookup unheadered roms in our game database in order to allow known dumps to function.
Nintendo Game Boy/Game Boy Color
It is now possible to configure "color emulation" settings for Game Boy, allowing to simulate the original DMG screen, the GB Pocket screen, or output in pure unprocessed RGB.
Nintendo Game Boy Advance
Fixed support for 512 byte eeprom saves.
Nintendo SNES / Super Famicom
Fixed an issue where ares would crash when using the debugger memory view for cx4, sa1, and superfx.
Fixed a minor accuracy issue, allowing Peter Lemon's CPU reset test to pass; this should not impact any commercial games.
Nintendo 64
Once again there have been significant improvements to Nintendo 64 emulation in ares, some of the highlights:
The Real Time Clock is now emulated, meaning Animal Forest is now properly supported.
Better emulation of timing for the PI/RCP/SI.
Fixed saving in International Track & Field 2000
Improved accuracy of Controller Pak and Rumble Pak emulation
Ares now has a very accurate implementation of the behavior of PIF and CIC, including the full boot sequence and the communication between the two chips. This causes more accuracy for homebrew productions creating custom joybus packets and/or tweaking the boot sequence
For a detailed breakdown, refer to the complete changelog on GitHub.
Sega Mega Drive / Genesis / CD / 32X
Fixes to the MD/CD/32X emulation has further improved compatibility, this can especially be seen with a larger number of working Mega CD games.
Most notable here, is that the Mega CD core no longer requires a specific bios version, users should be free to use any bios version (excluding CDX/WonderMega/LaserActive)
Thanks to the impressive work of TascoDLX and invertego, we are pleased to announce that every single Sega Mega CD game at least boots; with an estimated 86% of the library playable to completion.
Sinclair ZX Spectrum 48k / 128k
Preliminary emulation of the ZX Spectrum has been added to ares.
Currently this emulates both the 48K and 128K models, and can load games designed for cassette tape, optional accessories such as Disk Drives are not yet supported.
Ares emulates the base system with a Kempston joystick interface attached, so most games should be playable with this setup.
Being a new core, accuracy is imperfect, but decent; most games we have tried work as expected.
Games must be converted to .wav before loading; ares does not yet support the many ZX-Spectrum specific archival formats.
Due to the sheer size of this library, the compatibility database is currently empty; this doesn't mean the system is not supported, just that we haven't yet built the game database yet.
SNK Neo Geo
Neo Geo emulation has undergone the most dramatic improvement out of any core in this release; with a significant portion of the library jumping from "Nothing" state to "Completable".
This has been acheived by adding support for many of the Neo Geo copy protection systems, and game specific memory layouts.
The Neo Geo romset ares expects you to use matches the current version of MAME at time of writing, we will make a reasonable effort to keep this in sync going forward.
It is now also possible to specify a custom .bin bios rather than a mame zip file; meaning that users wishing to use Unibios can do so.
Audio emulation has improved significantly: while there are still issues with missing sound effects in some games, overall things are closer to being correct
The issue where the user would see black lines during sprite scaling has also been fixed.
Sony PlayStation
Fixed an issue where memory cards did not persist between games
Other
Fixed an issue where ares would crash when loading roms from the command line while using the WASAPI driver.
Fixed an issue where it was not possible to configure bios files on newer versions of macOS.
--131--
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.
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]
ColecoVision
Correct pixel aspect ratio to 8:7 [PikaSamus]
MSX / MSX2
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]
CPU: NEC V30MZ
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]
--130.1--
This is an emergency hotfix release for macOS and Linux users that fixes the following issues:
N64, PS1 and 32X emulation crashes on Intel macs running macOS versions newer than Catalina. Unfortunately this slipped through the net because it was functional on Catalina, which I have, and the latest macOS on M1, which Rasky has.
For Linux users, some Audio/Video/Input driver options were missing, due to broken dependency resolution.
Additionally, one minor emulation fix did get merged: the Copyright screen on Perfect Dark now renders using MAME RDP. (This is not yet fixed when using Parallel-RDP, as we are still working on getting it fixed upstream) macOS users on Apple Silicon/ARM64 platforms, and Windows users can safely skip this update if they wish to do so.
Build System
Fix broken package detection after the switch to pkg-config [LukeUsher]
Nall (Standard Library)
Fix the recompiler/JIT on Intel macOS platforms newer than Catalina [LukeUsher]
Nintendo 64
Handle vstart/vend RDP coordinate wraparound when using MAME RDP [Rasky]
--130--
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]
--129--
As seems to be the recent trend, Rasky has once again contributed a significant amount of improvments to the Nintendo 64 core; among other things, even allowing the Nintendo 64 port of Linux to boot!
Additionally, this release adds preliminary emulation of the Atari 2600. This is notable as it is our first new emulation core since we have taken over development. In it's current state, many games are working but with the following caveats
Only a small subset of mappers are supported
The TIA isn't cycle accurate yet; a number of games may have rendering and/or collision issues.
There is currently little-to-no reason to use this over other Atari 2600 emulators at this time, but going forward we expect the situation to improve.
core
prevent synchronisation from calling a thread that is in the process of being destroyed [LukeUsher]
desktop-ui
Add support for choosing which system to launch via command-line parameters [LukeUsher]
a26
Add preliminary Atari 2600 emulation [LukeUsher]
n64
implement AI DMA hardware bug; fixes audio in Twisted Edge [rasky]
add n64 mouse emulation [LuigiBlood]
implement per-controller joybus pif communication [LuigiBlood]
fix clamping of RSP vrndn/vrndp opcodes [rasky]
fix VMACQ and fix/simplify VMOV [rasky]
implement more null opcodes in RSP [rasky]
run PI DMA immediately, delay only the interrupt [rasky]
improve PI DMA timings [rasky]
improve RSP DMA timings [rasky]
re-activate 64-bit memory map [rasky]
rework RSP DMA double buffering [rasky]
fix serialization [rasky]
fix marginal cases of SHV and SWV [rasky]
use a stronger hash in RSP recompiler to avoid collisions [rasky]
fix RDP scissoring in copy/fill mode [rasky]
fix incorrect identifier for South Park Rally (USA) [remutro]
fix LWL/LWR accesses over RCP ranges [rasky]
fix identidtier for WCW Mayhem [remutro]
fix RSP opcode SFV [rasky]
fix RSP opcode STV [rasky]
implement invalid COP0 register access [rasky]
more accurate RDP status bit management [rasky]
fix 64-bit addressing [rasky]
improve 64-bit DLB exceptions [rasky]
fix 64-bit TLB vaddr match [rasky]
add region check to TLBP [rasky]
implement basic RDP freeze [rasky]
fix RSP emulation on ARM [rasky]
md
add workaround for Corpse Killer (CD) gamepad bug [TascoDLX]
sfc
alternate fix for voxel demo; fixes SuperFX compatibility regression [LukeUsher]
lazily sync co-processors; improves performance on lower-end systems [LukeUsher]
gba
prevent window from blocking translucent sprite blending [LukeUsher]
ps1
fix broken seek cd-rom commands [LukeUsher]
data reads should stop cd-da reads [LukeUsher]
implement ReadToc cd-rom command [LukeUsher]
implement SCEX test commands [LukeUsher]
stub cd-rom MotorOn command [LukeUsher]
clear parameter fifo after command execution [LukeUsher]
ng
fix a crash when loading an invaliud neo geo bios [remutro]
sh2
implement watchdog in interval timer mode (fixes Star Wars Arcade 32X) [LukeUsher]
--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.
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.
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]
--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.