Skip to content

Mesen

The NES emulator that shows its working

Mesen is an open-source NES and Famicom emulator written by a developer known as Sour, first released in February 2016. It became known for two things: passing the NES test programs its author tracked, and a debugger that shows what the console is doing on every scanline. Its SNES offshoot, Mesen-S, was folded into Mesen 2, which also covers the Game Boy, Game Boy Advance, PC Engine, Master System, Game Gear and WonderSwan. Since 2026 it has been maintained as a community edition under the NESdev organisation.

Mesen lets a programmer watch the NES at work. Alongside the game, it can open a window that plots each read and write to the video chip’s registers, and each interrupt, at the point in the frame where it happened, so a programmer can see whether a mid-screen change landed in time. Its author also published a table of NES hardware test programs, 246 individual tests in all, and by 2020 every one was marked as passed. The NESdev community, whose members wrote many of those tests, names Mesen among its “best-of-breed emulators”.

The name is a pun. The project’s own site explains that “Mesen” is a Japanese word, 目線, meaning “point of view” or “a person’s gaze”, and also “NES Em”, short for NES emulator, spelt backwards.

Fast facts

  • Author: Sour, who started the code in June 2014.
  • First release: version 0.1.0, a beta for Windows, on 11 February 2016.
  • Language: a C++ emulation core with a C# user interface.
  • Systems: NES, Famicom and Famicom Disk System from the start; SNES from 2019; Game Boy, Game Boy Advance, PC Engine, Master System, Game Gear and WonderSwan in Mesen 2.
  • Licence: GNU GPL version 3, with the source code public on GitHub.
  • Today: Mesen Community Edition (MesenCE), maintained by Sour and other developers under the nesdev-org GitHub organisation since June 2026.

From beta to reference

The first versions carried a warning that save states and recorded movies might not work in later releases. By May 2016, with version 0.1.3, the feature list was already long: save states, movie recording, net play, a built-in debugger and support for the Famicom Disk System. The 0.1.1 release, three days after the first, fixed a timing problem that froze Battletoads on its second level, a game the NESdev wiki calls “infamous among emulator developers for requiring fairly precise CPU and PPU timing” (see cycle accuracy).

By 2018 the site described Mesen as “a high-accuracy NES and Famicom emulator and NSF player for Windows and Linux”, with over 220 cartridge mappers supported, “all licensed games supported”. By version 0.9.9, released on 1 February 2020, the count was over 290. Mappers are the extra chips in a cartridge, such as Nintendo’s MMC1 and MMC3, that switch banks of ROM in and out and sometimes raise interrupts; an emulator has to imitate each one. The same page listed the Famicom Disk System, Nintendo’s VS System arcade boards, the Dendy, a Famicom clone sold in Russia, and NES music files (NSF) among the things Mesen could play. Players got rewinding, video filters and “HD packs”, which, in the documentation’s words, “make it possible to replace a game’s graphics and audio with high definition alternatives”.

Accuracy and the test programs

The NES has no official technical documentation for the public, so its behaviour has been worked out by experiment (see NESdev). Much of what the community learned went into test programs: small ROMs that run on a real console, check one behaviour, and print a pass or a fail. Mesen’s site published a table of “the majority of existing test roms and whether or not Mesen passes each test”. It covered the sound hardware (APU), the CPU, the video chip (PPU), input devices, the Famicom Disk System and a range of mappers, including the MMC3 and MMC5. In the version of the page from February 2020, the summary line reads “Test results: 246 / 246 (100%)”. The page also warned that test programs “are not perfect for assessing an emulator’s overall accuracy”, but “still provide a decent estimate”.

The NESdev wiki makes the same point in its article on accuracy, where it asks readers who find “a difference in behavior between the NES and best-of-breed emulators (like Mesen, Nintendulator, and Nestopia)” to report it. The work continues: the release notes for MesenCE 2.2.0 in June 2026 list improved CPU, APU and PPU accuracy, and 11 more passes on AccuracyCoin, a newer suite of NES tests.

The debugger

Mesen’s own site presents its debugging tools as “an extensive set of debugging tools for homebrew development and romhacking”. The documentation for version 0.9.9 lists:

  • a debugger with breakpoints, stepping and labels, which works with the ca65 assembler’s debug files to show where each label sits in the original source code;
  • an event viewer;
  • memory tools, including a hex editor that can read the text tables ROM translators use;
  • a PPU viewer for the nametables, the graphics tiles (which it can also edit), the sprites and the palettes;
  • an APU viewer, an assembler and a performance profiler;
  • a trace logger, which records every instruction executed;
  • a script window that runs Lua programs against the running game.

The event viewer shows the machine’s timing directly. The documentation says it lets you “visually check the timing at which various events (register read/writes, NMIs, IRQs, etc.) occur”, which matters for “timing-critical mid-frame changes to the PPU, or to verify that PPU updates finish before vertical blank ends”. On the NES, a program can only write to video memory safely during vertical blank, and split-screen effects depend on changing the PPU’s registers at exactly the right moment in the middle of a frame. With the writes plotted over the picture, a late update shows up as a mark in the wrong place.

Later versions kept adding to the debugger. The Mesen 2.1.0 release notes list stepping backwards by a scanline or a frame, undoing changes to ROM and RAM, and a new “forbid” type of breakpoint.

Mesen-S and Mesen 2

In April 2019 Sour released Mesen-S, a separate SNES emulator, again with a C++ core and a C# interface. Its last release, 0.4.0, came in April 2020. Development then moved to a single program, Mesen 2, which combined the NES and SNES emulators; by early 2024 its site listed the Game Boy, Game Boy Color and PC Engine as well. The old repositories now point users to it, because it is “more accurate, supports more consoles and has more features”. The SNES side emulates the cartridge coprocessors: the source code has cores for the Super FX, SA-1, Cx4, S-DD1, SPC7110 and DSP chips, among others.

Mesen 2.0.0 appeared in 2023. The 2.1.0 release in May 2025 added the Game Boy Advance, Master System (with SG-1000 and ColecoVision support), Game Gear and WonderSwan, and builds for macOS.

Community edition

On 4 June 2026 the Mesen 2 repository became a read-only archive, and development moved to a fork named Mesen Community Edition, hosted by the nesdev-org organisation on GitHub. The release notes for its first version, 2.2.0, explain the change: MesenCE is “maintained by Sour and various community members”, so that development “can continue whenever Sour is away from the project”. The licence stayed GPL version 3.

Sources

  • Mesen website, mesen.ca, archived copies from 2016, 2018, February 2020 and February 2024 (the project’s own site): the name and its meaning, the 0.1.0 and 0.1.1 release notes and the Battletoads fix, the feature lists and mapper counts, “all licensed games supported”, the accuracy test table with its caveat, and the systems Mesen 2 covered in 2024. https://www.mesen.ca/
  • Mesen documentation, version 0.9.9 (1 February 2020): the list of debugging tools and the Debugger, Event Viewer, PPU Viewer and HD Packs pages. https://www.mesen.ca/docs/
  • NESdev Wiki, “Tricky-to-emulate games” (web, secondary): Battletoads “requiring fairly precise CPU and PPU timing”. https://www.nesdev.org/wiki/Tricky-to-emulate_games
  • SourMesen, “Mesen” repository on GitHub: the archived 0.9.9 version, “a cross-platform NES/Famicom emulator for Windows & Linux built in C++ and C#”, GPL version 3, first commit 10 June 2014. https://github.com/SourMesen/Mesen
  • SourMesen, “Mesen-S” repository on GitHub: releases 0.1.0 (April 2019) to 0.4.0 (April 2020) and the notice that it was merged into Mesen 2. https://github.com/SourMesen/Mesen-S
  • SourMesen, “Mesen2” repository on GitHub: the 2.0.0-preview1 tag (January 2023), the 2.1.0 release notes (16 May 2025, “since the first release of 2.0.0 over 2 years ago”), and the archive notice of June 2026. https://github.com/SourMesen/Mesen2
  • nesdev-org, “MesenCE” repository on GitHub: the README, the SNES coprocessor source code, and the 2.2.0 release notes (June 2026). https://github.com/nesdev-org/MesenCE
  • NESdev Wiki, “Accuracy” (web, secondary): “best-of-breed emulators (like Mesen, Nintendulator, and Nestopia)”. https://www.nesdev.org/wiki/Accuracy

See also

Checked. Verified against primary sources and signed off by a person.