1092 Commits
Author SHA1 Message Date
SourMesen af2342818c Debugger: Profiler/Trace logger/Watch - Fixed empty window/missing options for all consoles/games with a single CPU (#266)
This was caused by the Avalonia 12.1 upgrade
2026-08-27 19:01:10 +09:00
SourMesen a33b8b2712 Debugger: GSU - Added profiler support (#261)
This is implemented by pretending every 16 bytes in ROM is a different function, allowing the profiler to display cycle counts for each individual "function" in the UI
Also fixes a missing call to ResetFlags for the merge opcode for FX3
2026-08-27 19:00:55 +09:00
SourMesen 8ac7e1df7d Lua: Fixed address value in memory callbacks when using memory types other than the default cpu memory type (#265)
Also fixed a few scenarios where the PPU memory write callbacks did not allow the Lua script to change the value about to be written (because the callback was called too late)
2026-08-27 19:00:22 +09:00
SourMesen 4c27ebf26f UI: Update to Avalonia 12.1 (#249)
Allows drag and drop to work on Linux
2026-08-15 16:56:22 +09:00
SourMesen 8614f1e3d6 UI: Allow pausing from the menu when any "Pause when..." option is enabled (#253)
Opening the game menu would display the "resume" option, making it impossible to pause (and keep the emulator paused after the menu is closed) by using the menu
2026-08-15 16:44:46 +09:00
SourMesen b88f23e663 UI: Removed old unneeded patch used to center setup window on Linux (#256)
This doesn't appear to be needed anymore (WindowStartupLocation = CenterScreen seems to work on Linux), and it looks like in some scenarios this could cause the setup window to appear in the wrong location on Windows
2026-08-15 16:44:07 +09:00
SourMesen ad0a1b9849 Lua: Misc. fixes & improvements (#250)
-Fixed getAccessCounters documentation (swapped param order)
-Fixed file watcher not being disabled properly when closing the script window, causing the script to run if changed on the disk, even if the script window is closed
-Prevent file watcher from triggering from writes done by the script window itself (which caused the script to be reloaded 2 or 3 times in a row)
-Fixed UI freezes when using emu.log() on a large table
-Fixed crash when 100k character limit (in the last 500 lines) for script log was reached (out of bounds read/write)
-Added "fps" value to "getState"
-Slightly improved getAccessCounters/getCdlData performance
-Added a new drawPixels API to improve performance when a script needs to draw a lot of individual pixels
2026-08-10 22:42:34 +09:00
Takumi Grainger 57f31a37fa SNES: Fix inconsistent Action Replay format in cheat DB (#244)
Fixes cheats in Phantom 2040 and Return of Double Dragon
2026-08-02 16:07:49 +09:00
SourMesen 9219fab3ed Debugger: Profiler - Keep track of cycles executed while the CPU is halted (#243)
Also adds a "cpu usage" meter in the debugger window which appears when software makes uses of halt/wai/etc.
2026-08-01 12:10:12 +09:00
SourMesen 05d74e7e40 Debugger: GBA - Show byte code as a single 16/32-bit value (#242)
Misc fixes:
-Fixed issues with the opcode tooltip not appearing for some GBA instructions (esp. when the condition code ends with an 's', e.g: rsbcs, movls, subcs)
-Fixed byte code not being lower case when the "use lower case" option is enabled
2026-08-01 12:09:15 +09:00
SourMesen fd32321313 Debugger: Added "copy to clipboard" option for tilemap, tile, sprite and event viewer (#240) 2026-08-01 12:08:49 +09:00
Takumi Grainger b2b9497c1d NES: Update DIP switches for Vs. Mahjong (#239) 2026-07-30 20:26:05 +09:00
SourMesen 918379b7a7 Debugger: Tilemap viewer - Added option to pick background color (#238)
Also, minor bug fixes for WS:
-Fixed tilemap viewer for sometimes using the wrong background color
-Fixed the 4-bit RGB color values in the palette viewer having the R and B values swapped
2026-07-28 19:55:12 +09:00
SourMesen 8fc682325c Debugger: Lua - Added getPressedKeys API (#236)
Also:
-Improved emu.log() to support tables/array and numeric values, instead of only strings.
-Fixed duplicate save state key name for GB
-Fixed TrimRight logic not working properly when the string had a single non-space character followed by spaces (e.g TrimRight("A ") returned "A ")
2026-07-28 19:54:00 +09:00
SourMesen 112b6f3d09 Debugger: SuperGrafx - Added VPC options and VDC1/VDC2 filter in the event viewer (#234) 2026-07-28 19:52:25 +09:00
SourMesen e055ddee35 SNES: Added deinterlacing options (#224) 2026-07-24 14:50:15 +09:00
SourMesen ed9a919abf Video: Fixed black screen when toggling VRR while in fullscreen mode (#233)
When the user turned on fullscreen mode without VRR enabled, then enabled the VRR option, and then turned off fullscreen mode, it would cause the screen to be black until the application is closed.
2026-07-24 14:49:32 +09:00
SourMesen c49fbb0461 SNES: FX3 - Fixed reset behavior (#231)
The "Fx3" flag was getting set to false after a reset. Refactor to move the flag out of the state struct to prevent this
2026-07-20 16:57:02 -07:00
SourMesen 2d0fd5f1ac Movies: Added support to load BizHawk/GBAHawk movies (#228)
Supports NES, SNES and GBA (only default controllers, etc.). Most movies will likely not sync properly, but some do.
2026-07-19 01:30:07 -07:00
Adrian "asie" Siekierka ec5f14d95e WS: WonderWitch/NOR flash + extended 2003 mapper emulation support (#100) 2026-07-18 19:30:57 +09:00
SourMesen d7ad2aab8a SNES: Added support for FX3 (new release of Doom) (#222)
Also fixed a crash in the SNES event viewer when overclocked and slightly improved performance for GSU games

FX3 code by @RandalLinden
2026-07-18 12:01:33 +09:00
SourMesen 1c38575013 UI: Allow binding the numpad enter key separately from the left enter key (#223) 2026-07-17 17:47:52 -07:00
SourMesen 1489d34441 SNES: Added support for BlueRetro controller (#220)
This controller/adapter supports rumble as well as reading the state of both analog sticks and the L/R triggers.

Code by @RandalLinden
2026-07-16 05:10:26 -07:00
SourMesen 49c9a3a4ba GB: Added overclock and remove sprite limit options (#216) 2026-07-11 17:47:41 +09:00
SourMesen 5b71c4e072 SNES: Added "Remove sprite limit" option (#207) 2026-07-11 16:43:58 +09:00
SourMesen c660425d48 SNES: Added color correction options (#205) 2026-07-11 15:34:36 +09:00
SourMesen 40335ce735 UI: Update to Avalonia 12, .NET 10 and replace ReactiveUI with MVVM community toolkit (#142)
Also fixes DX11.0 support (for Win7 PCs that aren't fully updated), which stopped working after the recent variable refresh rate changes
2026-07-03 16:04:42 +09:00
SourMesen 8a7971397e GBA: Added support for MRC/MCR for CP14 (#196) 2026-07-02 15:54:24 +09:00
Takumi Grainger c8f8bc31c3 NES: Add FCNS controller (#193)
Also fixes presets/clear buttons for NTT, Pachinko & Hypershot, and improves layout for all controller config popups (buttons/borders are aligned, etc.)
2026-06-28 13:34:30 +09:00
SourMesen 0532a2ec98 NES: Fixed issues with 2/4 player adapters (#194)
-The pachinko/subor mouse/ntt/virtual boy controllers could be selected in the UI for 2p/4p adapters, but did not work at all
-Keybindings for the "custom keys" for some controllers were not working when connected to a 2p/4p adapter
-Pachinko controller did not allow the user to configure the keybindings for NES-style buttons
2026-06-26 20:40:09 -07:00
SourMesen 06de8af157 Build: Remove dependency on powershell/zip utilities (#192)
Powershell may not be allowed to run by default, or the "zip" utility might not be available, etc. Replaced the command line calls with msbuild tasks which should ensure they work identically in all environments.
Also makes builds slightly faster for dev purposes by avoiding building the UI when not needed
2026-06-26 15:40:36 -07:00
SourMesen 819d959b84 SNES: Fixed HDMA trigger DMA syncs on every scanline even after all active HDMA channels are done for the frame (#183)
Super Bonk triggers an HDMA at the top of the screen on scanline 0 and then the HDMA channel stops. This caused the logic to call SyncStartDma & SyncEndDma on every scanline until vblank, even though no HDMA channel is active for the rest of the frame. The lost CPU time caused Super Bonk's demo to desync even earlier than hardware.
2026-06-21 01:32:54 -07:00
SourMesen 6c54ae1989 Video: Support for VRR in borderless fullscreen (Windows only) and improved frame pacing (#178)
* Video: Add support for VRR when in borderless fullscreen mode (Windows only) and improve frame pacing

* Fixed debug stats not disappearing when unchecking option in some scenarios

* Changed frame pacing graph scale/logic to show the gap between the ideal pacing and the current pacing (within +/- 2ms)
2026-06-21 01:29:30 -07:00
Adrian "asie" Siekierka 083057e37a Debugger: WS - Expand ELF importer layout support. (#184)
Added support for ELF files which do not have special handling for WS platform banking and instead only map the 20-bit CPU memory space.
2026-06-20 22:59:03 +09:00
SourMesen 95ceb59d48 Debugger: Enforce 64kb maximum length for labels in all scenarios (#177)
When importing labels via .dbg/.elf/etc. files, the 64kb length limit for labels was ignored.
This prevents several performance problems when a label is defined as having a length of e.g 1+mb
2026-06-16 22:35:17 +09:00
SourMesen dc2cda6c51 Debugger: Memory search usability improvements (#173)
-Removed the confusing/hard-to-use "previous refresh value" "compare to" option
-The "last value" column now shows the values that "previous search value" will compare against
-Added "update values" button to apply an empty filter that does not hide any addresses, but updates the "last value" that will be used for subsequent filters
2026-06-15 17:47:49 -07:00
Fiskbit 20ba206cef Version Update: 2.2.1 (#166) 2026-06-05 02:30:28 -07:00
SourMesen 317f89dbb2 Version Update: 2.2.0 (#164) 2026-06-03 23:29:37 -07:00
SourMesen 5e8b8e12ed Debugger: SNES - GSU - Allow labels on GSU work ram (#163)
Also fixes GsuWorkRam not being able to lookup its relative CPU address (which caused the "CPU Addr" column to always read <unavailable> in the label list)
2026-06-03 22:03:43 -07:00
SourMesen 18fa0ef4bf NES: Update Racermate DB entries to have 64 KB of CHR RAM (#161)
+ Cleanup Nmco163 DB-related board checks that did not need to exist (NAMCOT-175 and NAMCOT-340 boards in the DB are all marked as mapper 210, not 19)
2026-06-03 02:33:41 -07:00
SourMesen 7c29fb4006 Debugger: Tilemap viewer - NES - Fixed the "Changes" highlight mode for NT/AT data (#159)
Did not work at all following a change done ~3 years ago to improve the tilemap viewer's performance
2026-06-02 23:11:49 -07:00
Fiskbit e222f0fcad NES: Fix header editor units bugs. (#157)
The header editor was treating MB units as KB, and its error checking was showing errors for MB sizes between 8 and 59 that were not a multiple of 4 because it was treating them as KB sizes.
2026-06-02 23:02:39 -07:00
Fiskbit 17466d7063 UI: Set MesenCE-specific guid used for restricting to one instance. (#153)
We recommend other forks NOT copy this change. We're switching away from the Mesen2 guid to avoid single-instance interactions with other Mesen2 forks. If you change your guid, please do not use ours.
2026-05-30 09:29:03 -07:00
SourMesen e064131f90 UI: Tweak icon colors (#152) 2026-05-30 07:42:09 -07:00
SourMesen c3e4a3e77b Debugger: Find all occurrences - Fixed duplicated results when searching a function label that contains a multi-line comment (#134) 2026-05-24 19:36:50 -07:00
NovaSquirrel c40c250ed7 Debugger: Allow using built-in assembler with SA-1 (#139) 2026-05-24 18:59:50 -07:00
SourMesen a13ae9a461 Code: Added naming style CI checks for C#/UI code (#132) 2026-05-22 20:43:13 +09:00
Adrian "asie" SiekierkaandSour 22424d7412 WS: Initial cartridge RTC implementation (#98)
* GBA: Separate S3511A RTC emulation code from GBA interface emulation code.

* WS: Initial cartridge RTC implementation.

* WS: Expose cartridge RTC state to register viewer.

* Code: Fix formatting.

* WS: Update Core.vcxproj.

* Fix compilation error, remove unused method

---------

Co-authored-by: Sour <[email protected]>
2026-05-19 05:50:19 -07:00
FiskbitandSour b82eb7b213 NES: Improve OAM corruption accuracy. (#122)
* NES: Improve OAM corruption accuracy.

Our understanding of OAM row corruption has significantly improved since Mesen's implementation of the feature that was based on oam_flicker_test.nes results. This change improves the accuracy of the two OAM corruption emulation options.

Primary OAM (OAM1) and secondary OAM (OAM2) live in the same block of memory, made up of 9-byte rows where the first 8 bytes are consecutive OAM1 bytes and the last byte is an OAM2 byte. The PPU accesses OAM on every dot. On some dots, it uses the OAM1 address ($2003), and on other dots, it uses its internal OAM2 address. If the address changes during an OAM access (the 2nd half of a dot) and this causes the selected row to change, then it can trigger either analog corruption (the new row gets 'random' data) or a row copy (the old row's 9 bytes are copied to the new row). More information can be found at nesdev.org/wiki/OAM_internals.

Address selection is fairly simple. When rendering is off, OAM1ADDR is always selected. When rendering is on, OAM1ADDR is selected on odd dots in 1-256, and otherwise OAM2ADDR is selected.

Corruption occurs on the NES in 3 situations:
1. Writing to $2003 on NTSC PPUs, because writes are not synchronized at all and so the CPU open bus value and the new value can both cause the row to change mid-access. Depending on the timing, this can do nothing, cause analog corruption, or cause row copy. This was fixed in PAL PPUs, but we don't know about Dendy.
2. Toggling rendering on an OAM2ADDR dot. Depending on the direction and the timing, this can do nothing or cause analog corruption of or row copy to the new row.
3. On 2C02E and later PPUs, having a row mismatch if rendering is enabled at the start of pre-render. This always causes a row copy from the OAM1ADDR row to the OAM2ADDR row and is required for Huge Insect to spawn enemies in level 1. (2C02C PPUs have some corruption in this situation, too, but it is not yet understood.)

This change adds support for OAM corruption in situations 1 and 2 using the "Enable PPU $2003/rendering-toggle OAM corruption" setting, which is off by default. This does not take alignment into account at all and only does row copy, not analog corruption. Recommended for developers, but probably undesirable for actual users. This setting was previously called "Enable PPU OAM row corruption emulation". Note that situation 1 ($2003 writes) is not perfectly matching blargg's oam_read test results in the most vulnerable alignment yet, suggesting there is more research to be done on this.

Situation 3 is now supported under the "Disable PPU frame-start OAM corruption (2C02D and earlier)" setting, so this corruption happens by default. Mesen was already doing some corruption here to support Huge Insect, with the previous version of this setting being called "Disable PPU OAMADDR bug emulation". These changes make the corruption more accurate and apply in more situations, so there is a chance it will break some user software, but because it is required for a game, we've opted to have it on by default. This feature should match hardware very closely, as it doesn't have the timing and analog aspects seen in situations 1 and 2.

To support these, sprite rendering was reworked a bit to more accurately manage the OAM1 and OAM2 addresses during rendering. This should make sprite rendering behavior more accurate when rendering is toggled mid-frame, although there are still inaccuracies that come up if you do this. The OAM2 address can also now be seen in the register viewer below $2003.

This was tested against a suite of NES tests, AccuracyCoin $2004 Stress Test, and oam_flicker_test.nes/oam_flicker_test_reenable.nes. The $2003-based corruption causes a few tests to change behavior when enabled (which is expected), but oam_read and related tests are not failing exactly right yet. Tests otherwise pass.

* Changes based on code review.

* Removed _spriteAddrL/_spriteAddrH members, use local variables instead.

* Simplify firstVisibleSpriteAddr assignment

---------

Co-authored-by: Sour <[email protected]>
2026-05-19 03:17:34 -07:00
SourMesen 830ffc3b04 Video: Fixed "merge fields" issues (#129)
Phase should be 0 when this option is enabled, otherwise there's still jitter from one frame to another (though less obvious jitter)
Also made the GB/GBA/WS filters alternate between the 2 phases (SNES filter is used), which makes the colors look much better, even without merge fields enabled.
2026-05-19 00:02:25 -07:00