Now that I have your attention... I'd like you guys to test Mupen64plus. (No, this wasn't a bait-and-switch topic.)Before reading further, please heed Surkow's warnings about this thread in posts #3 and #28. tl;dr Support of games is not guaranteed. Full-speed gameplay is not guaranteed.
It's the result of 2 years of trying things with JIT compilation and finally arriving at a result I like. I'll spare you guys the technical details, but the JIT is much faster than the interpreter at doing its job. There are other jobs to do in an N64 emulator, like emulating the RSP and RDP, and handling video and audio, so while the task of emulating the CPU is much faster, all the other tasks are still running at the same speed, which may not be enough. I'm in the process of cleaning up the one massive commit that I wrote everything into, and writing documentation about the technical details so that interested people may read about everything.
So, while I'm fairly certain the JIT should be compatible with all the games the interpreter is compatible with (which is quite a lot of them), I'm not really able to test all games, so I'd like you guys' help on this, as well as a few more requests at the end of this post.
Here are two builds of Mupen64plus. The first
is the highly compatible, but slow
, interpreter build. It is the reference implementation that the JIT compiler should run like. The second
is the faster
JIT compiler build. If it doesn't run a game like the interpreter does, that's a bug.Interpreter build: https://dl.dropboxusercontent.com/u/106475413/gcw-zero/preview/mupen64plus-interp.opkJIT build (updated 2015-11-15): https://dl.dropboxusercontent.com/u/106475413/gcw-zero/preview/mupen64plus-alpha-20151115.opk
Source code is at the end of this post.
These are bare emulator builds. The usual gmenu2x file selector allows you to select uncompressed
.n64, .v64 or .z64 format ROMs. There is no frontend with which to rewind, save states, modify configuration, or any of that.
When launching a ROM, especially one that is 16 MiB in size or more, please note that the GCW Zero will need to read, hash (for lookups in the ROM database, keyed on the MD5 hash) and byte-swap (the Nintendo 64 is big-endian, and the GCW Zero is little-endian) the ROM. It is a time-consuming task, which contributes to high startup time.-- Controls --
You should be able to use the following controls to play N64 games:
(GCW Zero button = N64 button)
D-pad, A, B, Start, L Trigger, R Trigger = Same
D-pad = Analog
D-pad = D-pad
Analog = Nothing
Y = Z Trigger
X = C Button LeftSelect = (Exit emulator)
The lack of analog nub mapping in this test version is due to mupen64plus-input-sdl not allowing a keyboard and a joystick to be used for the same player, as well as my lack of interest to investigate that due to my test GCW Zero having an analog nub that constantly reads fully up and to the left as soon as it's a little bit off-center, which makes using the analog nub aggravating.
As for the C Buttons, only C Button Left is mapped, because the GCW Zero has insufficient inputs, and A and B are pretty important.-- My requests to everyone --
- I'm no good when it comes to frontends. I'd like it if a frontend better than a bare emulator could be built. I would then include the frontend in the OPK if its license allows for that.
- I'm no good when it comes to 3D and OpenGL (desktop or embedded). The graphics look odd in some games, but if they look as odd on the JIT as they do on the interpreter, I can't do much about that. Perhaps one of you could build gonetz's GlideN64 plugin and see if it's fast enough and compatible with OpenGL ES 2, or help fix it or report bugs if not. And then I could also include that in the OPK.
- The input mapping may need adjustment per game to fit with the GCW Zero's buttons, of which there are fewer than on a Nintendo 64 controller. That would require per-game configuration in a frontend, similar to how ReGBA does it.
- With that in mind, please report bugs in the JIT and I'll be happy to investigate them.
Improvements, praise and hate mail all go here! GitHub will be better for JIT bug reports, but they may go here too. Post away!-- Source code that went into this release --https://github.com/mupen64plus/mupen64plus-ui-consolehttps://github.com/Nebuleon/mupen64plus-core/commits/trace-jit-experimentalhttps://github.com/mupen64plus/mupen64plus-input-sdlhttps://github.com/mupen64plus/mupen64plus-audio-sdlhttps://github.com/mupen64plus/mupen64plus-rsp-hlehttps://github.com/Nebuleon/mupen64plus-video-gles2n64
(this is based on a gles2n64 source dump, itself based on the GLN64 source code)