![]() |
|
To be fair, N64 is not the PS2 or Gameboy--there are only 388 games that were released for it. Going through all of the games that were released and shepherding them through this process is feasible.
|
![]() |
|
I'm pretty sure all roads lead to either playing the game or otherwise not doing anything of value to Nintendo whatsoever (ie who cares if you bury a box of roms in your yard)
|
![]() |
|
Is it in any? Because I don't think just adding a "You need to own the game to download this binary" text to your GitHub repo is going to do a lot legally.
|
![]() |
|
> you still need to disassemble the ROM up front and annotate it heavily before it can be recompiled. Why? Surely it's more straightforward to do binary-to-binary translation. No human input needed! |
![]() |
|
This is really cool. Many of the foundational tools created for N64 decomp are finding their way into other system decomp packages. I recently came across https://decomp.me/ which allows collaborative decompilarion for a bunch of systems with presets for their relevant SDKs and hardware. I’d imagine this happening several more systems in the coming years.
|
![]() |
|
Other emulators want to solve the problem generically, and this solution doesn't quite. Static recompilation from one machine language to one other language is somewhere between extremely difficult to not being generally possible in practice [1]. To make recompiling something like this properly, you need some help from the binaries that make recompilation easier [2] and on top of that you need to patch certain things to make this work [3]. Dynamic recompilation doesn't have this problem. It allows you to create software you can dump the original binaries+assets ("ROMs") in and it will generally emulate it. There's a lot of confusion about how generic this solution it. It's extremely impressive in how much work it saves making recompilations/"ports" much easier, and it will be very valuable. But it is not able to replace the need for traditional emulators. [1]: https://cs.stackexchange.com/questions/155511/why-is-static-... [2]: N64 game binaries may happen to avoid a bunch of things that make general static recompilation hard that help this approach, but I don't actually know. [3]: The Majora's Mask recompilation repository contains a lot of handcrafted patches to make it work: https://github.com/Mr-Wiseguy/Zelda64Recomp |
![]() |
|
Emulating the hardware usually requires cycle-accurate emulation of things running in parallel, so it's not quite so simple as just the program in the ROM.
|
![]() |
|
Modern x86-64 processors are still capable of running 16-bit code but, assuming you want to do it from within a modern operating system, it needs to be 16-bit protected-mode code, which isn't that useful since I think most 16-bit games run in real mode. Hence why DOSbox/Bochs are used instead (also, for emulating the original sound/graphics hardware). AFAIK, no 64-bit version of Windows ever shipped with native 16-bit support, though. That means 16-bit support on x86-64 in practice was only ever usable on a 32-bit operating system, which means you still couldn't have 64-bit, 32-bit, and 16-bit code running side-by-side, even if the hardware could theoretically support it. Intel does want to get rid of most of the compatibility modes, including all 16-bit support, but they haven't done it yet: https://www.intel.com/content/www/us/en/developer/articles/t... |
![]() |
|
Haha I remember this launch and how awful it was an thinking about how a bunch of fans have done such a better job. Hell, even Nintendo did a better job for the Wii's Virtual Console.
|
![]() |
|
The N64 had a fully unified memory architecture, and weird custom silicon that also happened to be a fully programmable GPU kinda device. For decades, all N64 emulation was done by translating calls to that GPU (called the RDP) to openGL or DirectX calls, and that works horribly, but anything else would have had awful performance. Several years ago however, someone decided "Fuck it" and created a fully emulated version of the RDP that you could run, ie feed it real N64 instructions and it spits out pixel values. It was significantly slower than the translation approach, so you had to have like a powerful 8 or more core CPU to run it well. Some other madlad then took that approach, and ported it to a GPU Shader, because fuck yeah thousands of cores! It actually greatly improved the situation, as you didn't need a super powerful GPU, just a somewhat modern GPU. That development means devices like the steam deck actually have zero issues running awesome N64 emulation, including allowing for upscaling to much higher rendering resolutions without artifacts because you are literally telling a virtual RDP to do it, and it happily complies. Before AngryLion and ParaLLEl, we were stuck with basically the same graphics plugins, glitches, and tweaks as the late 90s. https://www.libretro.com/index.php/category/parallel-n64/ for a more detailed description of how this changed things. |
![]() |
|
I don't think that's true, it really does recompile the N64 games into native executables, you can compile them using any C compiler like msvc, gcc and clang.
|
![]() |
|
The native ports have additional features, which are easy to implement starting from the native compilation. For example, the native port of Zelda has gyro aiming and automatic autosave options.
|
![]() |
|
Yeah, SM64 is weird because a lot of '3d' objects used billboarding, it was actually just a flat object always facing the camera, so they don't scale up well. Anything spherical (chain chomp for example). Hilarious proof: https://imgur.com/gallery/Xw4tN#FoRAGl7 The characters in Mario Kart 64 were like that too, they just prerendered a heap of different angles and inserted the appropriate one. With recompilation we could change those things, but I'm not sure how much work it would be and how many people who care to play those games would want to alter them that much. Early 3d games will always have those rough edges sadly. |
![]() |
|
JIT emulation can cause stutters while AOT should not. The difference may not be noticeable now that computers are so much faster than the N64.
|
![]() |
|
Thanks for the correction. Of course as someone without an N64, I went with "sure, that Dvorak keyboard will be recognized!" without checking if it's actually fit for purpose.
|
![]() |
|
Isn't Nintendo hunting every one of their fans^H^H^H^H IP abusers with their black helicopters? Why do people even bother when they know they'll get lawyers at their door in 3... 2... 1... ? |