Mesen - NES Emulator

Discuss emulation of the Nintendo Entertainment System and Famicom.

Moderator: Moderators

Pokun
Posts: 2681
Joined: Tue May 28, 2013 5:49 am
Location: Hokkaido, Japan

Re: Mesen - NES Emulator

Post by Pokun »

Ah now I see what you mean. Yeah I already do that in my games so I can use expansion port controllers.
This won't work in a 4 player game though, and I think it's really unrelated to the emulator inputs that should preferably be separate.
Sour
Posts: 891
Joined: Sun Feb 07, 2016 6:16 pm

Re: Mesen - NES Emulator

Post by Sour »

Pokun wrote:There's one fundamental thing I still can't find anywhere in Mesen. Controller II microphone input. If possible I'd request to make it possible to assign the mic to its own separate input, not like in FCEUX where it replaces the controller II START button when enabled.
You're not blind - there's no microphone support yet. It's been on my list of things to do for a while (along with adding support for all the other types of controllers that Mesen doesn't support yet) - the microphone should be pretty simple to add though, I'll try to get it done over the next few days.
Pokun
Posts: 2681
Joined: Tue May 28, 2013 5:49 am
Location: Hokkaido, Japan

Re: Mesen - NES Emulator

Post by Pokun »

That would be helpful. Mesen is such a good and useful emulator with many features not found elsewhere.
Sour
Posts: 891
Joined: Sun Feb 07, 2016 6:16 pm

Re: Mesen - NES Emulator

Post by Sour »

I just released 0.9.2 which adds/improves a number of things in the debugging tools:
-Added a "Developer Mode" option in preferences that moves all debugging tools to the "Debug" menu in the main window (and all debug tools can now be opened without opening the main debugger window first)
-LUA scripting
-Syntax highlighting in the assembler (and some bug fixes)
-A few new small features/improvements in the PPU viewer
-iNES header editor
-Integration with freem's ASM6 fork - ASM6f can now export .mlb & .cdl files which can be imported into Mesen's debugger to get labels/comments and code/data analysis
-Changes done to PRG ROM or CHR ROM via the debugging tools (e.g chr editor, assembler or hex editor) can now be saved as an IPS file

And then some non-debugger stuff:
-Added a first-run setup configuration dialog to choose between portable mode or store-in-profile mode
-Added some options to select paths (and toggle between portable/profile modes)
-Some fixes for HD packs and support for replacing background music and sound effects with ogg sound files.
-Support for the famicom's 2P microphone
-Improved startup performance
tepples
Posts: 22708
Joined: Sun Sep 19, 2004 11:12 pm
Location: NE Indiana, USA (NTSC)
Contact:

Re: Mesen - NES Emulator

Post by tepples »

I'm on Debian 9, and I ran this:

Code: Select all

sudo apt install libsdl2-2.0-0 mono-runtime
mono ~/Downloads/Mesen.exe
sudo apt install libmono-system-windows-forms4.0-cil
mono ~/Downloads/Mesen.exe
libmono-system-io-compression4.0-cil
mono ~/Downloads/Mesen.exe
Now we're getting somewhere. It asked me whether I wanted to put the settings in the same folder as the executable or in my profile, the latter being ~/Mesen. In GNU/Linux, it's common to put data specific to a particular user and application in a directory whose name begins with a dot so that it doesn't clutter the home directory. One possibility is ~/.config/Mesen.

After all that, it gave me an alert box with the following text, which I had to retype because the alert box did not let me copy its text:
The Microsoft .NET Framework 4.5 could not be found. Please download and install the latest version of the .NET Framework from Microsoft's website and try again.
This gives me no information as to what other libmono-system-*4.0-cil packages I need to install? Is there a verbose option of some sort to see what library isn't being found?

Mesen README states that mono-complete is required. Yet APT says this is a 150 MB install on top of mono-runtime, S.W.F, and S.I.C. Should I just swallow this and be thankful it's smaller than Wine? I have to keep Wine around for FamiTracker anyway even if I do eventually phase out FCEUX debugging version in favor of Mesen. A 100 MB runtime here, a 100 MB runtime there, and pretty soon we're talking real disk space. So to answer your question elsewhere, Mesen is fine if you already have mono-complete installed to run another application. I guess FCEUX might be better if you already have wine installed to run another application but not mono-complete.

I bit the bullet and installed mono-complete, and the main window opened. But that wasn't what I expected to happen, as I typed this command:

Code: Select all

mono ~/Downloads/Mesen.exe --help
The --help, -h, or /? is supposed to print a summary of commands to Console.Out and then exit.

It ran The Curse of Possum Hollow on the first try. NES 2.0 ✓

Time for Zap Ruder. "Light Detection Radius": That's fun

240p Test Suite time. Looking at the circles in "Linearity", I see that the PAR isn't set by default (unlike, say, NO$SNS). In Video > General, I see how to set the PAR, and now they're rounded.

The "NTSC" filter works on the "Intel(R) Core(TM)2 Duo CPU L7500 @ 1.60GHz" in my ThinkPad X61, but NTSC 2x (Bisqwit) slows down.

Mono doesn't respect the GTK+ system font. It's apparently using SystemFonts.DefaultFont, which is hardcoded as Microsoft Sans Serif.

Now time to install it.

Code: Select all

mv ~/Downloads/Mesen.exe ~/.local/bin/
echo '#!/bin/sh' > ~/.local/bin/mesen
echo 'mono $HOME/.local/bin/Mesen.exe "$@"' >> ~/.local/bin/mesen
chmod +x ~/.local/bin/mesen
So should I be putting feature requests in GitHub or elsewhere?
Sour
Posts: 891
Joined: Sun Feb 07, 2016 6:16 pm

Re: Mesen - NES Emulator

Post by Sour »

Thanks for taking the time to try it out.

For the application folder, would /home/.mesen be appropriate? Or is it common to use the .config folder and multiple applications do so?

I agree Mesen is not ideal on Linux due to its dependency on Mono. I'd have to take a look at what specific packages from mono it requires - off the top of my head, the runtime + winforms + compression (which you listed) should be the main ones, but it is possible that something else is needed as well. The readme asks for mono-complete because that is the simplest/shortest way to list the requirements.

Not being able to copy the message box is probably a Mono bug - as far as I know, message boxes in WinForms rely on the Win32 API, which always supports Ctrl-C as a way to copy the text?
That message box should have showed the actual error, though (most other popups that are the result of an exception do display the exception's details) - that's my bad, I'll fix it.

Good point about --help - I can see if I can fix it, but I vaguely recall trying to implement that and failing because getting a .exe marked as a non-console application to display anything in the command line on Windows is actually hard or impossible (if I am remembering this right). And marking the executable as a console application has its own downsides as well.

Bisqwit's NTSC filter is very slow in comparison to the "NTSC" filter (which is blargg's) - on a dual core processor, this might actually be even worse due to the filter's code attempting to render the picture using 2 different threads + a 3rd thread running the actual emulation.

Mono probably forces Microsoft Sans Serif because that's the default WinForms font, and a lot of programs would likely render incorrectly if the font's size changed from what they expected (e.g if the software is using hardcoded sizes in pixels for layout, etc.) - at least, that's what I would guess.

It's nice to know the precompiled .exe file actually runs on Debian, though! I don't think I had managed to make it run on Debian in my own tests (iirc, only Ubuntu, which I use to compile, and Fedora Core worked for me - but I am far from being a Linux expert).

Putting feature requests on GitHub is fine - that's what it's for, and the best way to ensure I don't forget about it :p
tepples
Posts: 22708
Joined: Sun Sep 19, 2004 11:12 pm
Location: NE Indiana, USA (NTSC)
Contact:

Re: Mesen - NES Emulator

Post by tepples »

Sour wrote:Thanks for taking the time to try it out.

For the application folder, would /home/.mesen be appropriate? Or is it common to use the .config folder and multiple applications do so?
I've seen both.

Code: Select all

pino@pinox61:~/develop/parallax$ ls -ld ~/.fceux
drwx------ 8 pino pino 4096 Nov 20  2015 /home/pino/.fceux
pino@pinox61:~/develop/parallax$ ls -l ~/.config
total 88
drwxr-xr-x 2 pino pino 4096 Aug 11 21:13 autostart
drwxr-xr-x 2 pino pino 4096 Sep  5 19:27 dconf
drwx------ 2 pino pino 4096 Dec 19  2016 enchant
drwxr-xr-x 2 pino pino 4096 Nov 19  2015 galculator
drwx------ 2 pino pino 4096 Sep  5 19:26 gtk-2.0
drwx------ 2 pino pino 4096 Nov 17  2016 gtk-3.0
drwx------ 6 pino pino 4096 Dec 19  2016 hexchat
drwxr-x--x 7 pino pino 4096 Aug 14 18:17 inkscape
drwxr-xr-x 3 pino pino 4096 Aug 17 22:23 libreoffice
drwxr-xr-x 3 pino pino 4096 Aug 16 17:23 menus
-rw-r--r-- 1 pino pino  962 Sep  5 20:10 mimeapps.list
drwx------ 2 pino pino 4096 Jul 14  2016 Mousepad
drwx------ 2 pino pino 4096 Nov 19  2015 pulse
drwx------ 2 pino pino 4096 Aug 18 13:28 ristretto
drwxr-xr-x 2 pino pino 4096 Aug 12 19:37 sqlitebrowser
drwx------ 2 pino pino 4096 Nov 19  2015 Thunar
-rw------- 1 pino pino  626 Jun  5  2016 user-dirs.dirs
-rw-r--r-- 1 pino pino    5 Nov 19  2015 user-dirs.locale
drwxr-xr-x 2 pino pino 4096 Sep  4 18:19 vlc
drwx------ 2 pino pino 4096 Aug 14 00:59 xarchiver
drwxr-xr-x 7 pino pino 4096 Aug 23 20:01 xfce4
drwx------ 2 pino pino 4096 Nov 20  2015 xfce4-session
Sour wrote:as far as I know, message boxes in WinForms rely on the Win32 API, which always supports Ctrl-C as a way to copy the text?
Wine has the same problem. When I was trying to get 0CC-FamiTracker working, Ctrl+C in its message box didn't copy the crash message.
Sour wrote:Putting feature requests on GitHub is fine - that's what it's for, and the best way to ensure I don't forget about it :p
I've added a nonworking homebrew test ROM (which relies on three unsupported controllers) and a crash in input configuration.
lidnariq
Posts: 11432
Joined: Sun Apr 13, 2008 11:12 am

Re: Mesen - NES Emulator

Post by lidnariq »

Sour wrote:For the application folder, would /home/.mesen be appropriate? Or is it common to use the .config folder and multiple applications do so?
The modern "official"(????) way to to consult the XDG_CONFIG_HOME environment variable (or $HOME/.config, or getpwuid(getuid))/.config), and use a directory under that. Other parts may instead belong .local/share (XDG_DATA_HOME), .cache (XDG_CACHE_HOME)

But ... there are still dozens of brand-new-programs that use the old convention of a single dotdir in your homedir, so don't sweat the complexity-for-the-sake-of-complexity that the FreeDesktop group seem to be overly fond of.
Good point about --help - I can see if I can fix it, but I vaguely recall trying to implement that and failing because getting a .exe marked as a non-console application to display anything in the command line on Windows is actually hard or impossible (if I am remembering this right). And marking the executable as a console application has its own downsides as well.
Certainly the windows solution to that problem was to make an alert box containing the help text. Not the worst option...
tepples wrote:mv ~/Downloads/Mesen.exe ~/.local/bin/
echo '#!/bin/sh' > ~/.local/bin/mesen
echo 'mono $HOME/.local/bin/Mesen.exe "$@"' >> ~/.local/bin/mesen
chmod +x ~/.local/bin/mesen
I just have debian:binfmt-support installed, and ln -s ((path to Mesen build binary) ((path to personal binary binary directory))
User avatar
B00daW
Posts: 586
Joined: Thu Jan 03, 2008 1:48 pm

Re: Mesen - NES Emulator

Post by B00daW »

Has anyone suggested implementing Kazzo and CopyNES dumping integration into the Mesen debugger?
Rahsennor
Posts: 479
Joined: Thu Aug 20, 2015 3:09 am

Re: Mesen - NES Emulator

Post by Rahsennor »

I'm on Debian 9 as well, and 181 MB for a NES emulator is just silly.

I'd probably be using it otherwise; Mednafen's debugger is a pain in the rear.
maseter
Posts: 23
Joined: Fri Nov 18, 2016 7:56 am

Re: Mesen - NES Emulator

Post by maseter »

Sour: Have you considered a dedicated portable build?

Something that saves settings into the home folder by default, has no startup wizard, has no updater, no google drive integration, no built in database (so the GoogleDrive folder, MesenUpdater.exe & MesenDB.txt are not created/recreated or even included).

Something old school!
Cheers :beer:
User avatar
tokumaru
Posts: 12427
Joined: Sat Feb 12, 2005 9:43 pm
Location: Rio de Janeiro - Brazil

Re: Mesen - NES Emulator

Post by tokumaru »

maseter wrote:Something that saves settings into the home folder by default, has no startup wizard, has no updater, no google drive integration, no built in database
Those were the days!
Sour
Posts: 891
Joined: Sun Feb 07, 2016 6:16 pm

Re: Mesen - NES Emulator

Post by Sour »

lidnariq wrote:Certainly the windows solution to that problem was to make an alert box containing the help text. Not the worst option...
Some tools definitely do this, Mesen at this point probably has too many command line options for them to fit though. I guess I could just list the main ones, and indicate where the user can find the rest of them in the UI.
B00daW wrote:Has anyone suggested implementing Kazzo and CopyNES dumping integration into the Mesen debugger?
Nope - but since I do not own either device, that would probably be pretty hard to implement :\
Rahsennor wrote:181 MB for a NES emulator is just silly.
And I could argue that worrying about 0.06$ worth of SSD disk space (or < 0.01$ worth of HDD space) is also equally as silly :)
Either way, it is what it is - the dependency on .NET/Mono is also very much the reason why there is a complete set of debugging tools in the first place. WinForms & its designer in VS trumps any other UI toolkit that I am aware of in terms development speed & simplicity - without it, making the debugger would have probably taken hundreds of hours more of my time, and I quite honestly would not have bothered making one at all.
maseter wrote:Sour: Have you considered a dedicated portable build?
Most of this would not necessarily be very hard to implement, but it would require a fair amount of compile-time conditions - is there any reason why you would need this? Other than for the sake of it being old school, that is :p
maseter
Posts: 23
Joined: Fri Nov 18, 2016 7:56 am

Re: Mesen - NES Emulator

Post by maseter »

You could get the whole thing under 5MB this way, save another 0.06$ worth of disk space!

No reason really, except that many people prefer portable stuff playable from flashdrives.

Could you also make it recognize disksys.rom (like fceux) and not just FdsBios.bin?

puNES (for example) turns portable, if you rename the .exe to puNES_p.exe!

And is video filter none the same as software?
Cheers :beer:
Sour
Posts: 891
Joined: Sun Feb 07, 2016 6:16 pm

Re: Mesen - NES Emulator

Post by Sour »

maseter wrote:No reason really, except that many people prefer portable stuff playable from flashdrives.
[...]
puNES (for example) turns portable, if you rename the .exe to puNES_p.exe!
This is exactly what the initial config dialog is there for. e.g if you put Mesen on a USB drive, run it and select "keep data in the same folder as Mesen", it will be portable. Previous versions before 0.9.2 used the same _P.exe shortcut as puNES, but it seemed like the vast majority of people thought that was too hard to find and not a very user-friendly way of handling it.

I'm not sure I see a benefit in making it recognize disksys.rom? The UI will ask for the BIOS a single time and create a copy of the file with the name it expects - you can technically give it a file with any name you want (what Mesen ends up doing with that file, e.g creating a copy called FdsBios.bin in its data folder, shouldn't really be the user's concern?)

What do you mean by "software"? All of the video filters are software filters - "None" just means no filter is applied at all (the PPU's output is converted to RGB and sent to the video card as-is)
Post Reply