UNFLoader


Released: March 1, 2021
Tags: C, C++, NCurses, Libultra, Libdragon, GitHub Actions, Azure Pipelines

When I joined the N64 scene, there were two choices for flash cartridges: The EverDrive 3.0 or the 64Drive. I opted for the latter, since it was a more developer oriented cart, created by a prominent member of the N64 community. The 64Drive provided a pretty extensive hardware spec sheet, unlike the EverDrive which only had some source code tidbits available on KRIKzz's GitHub. Eventually, KRIKzz released the EverDrive X7, which used a completely separate USB interface from the 3.0. I saw an opportunity: the N64 scene has a bunch of flashcarts, each with USB capabilities, but there aren't any projects which make use of this functionality. Not only that, writing USB code for one cart meant breaking your game on the others.

So in 2020, I began work on the Universal N64 Flashcart Loader. Originally the project was focused only on making a cross-platform program that allowed ROMs to be uploaded by USB (for fast iteration) for the three cartridges, but it then evolved into a USB driver for both N64 developer SDKs which provides full I/O for all current popular N64 flashcarts (including the then-new SummerCart64). UNFLoader allows users to printf, take screenshots, upload data to the game while it runs, and even debug using GDB. UNFLoader was written in C++ using the NCurses library to allow the terminal to be controlled, and uses LibFTDI and D2XX for USB communication. The driver for the N64 is written in C.

UNFLoader has basically been entirely my own doing, but it has had a lot of community support and has become the defacto standard for flashcart USB communication on this console. It is included with the Libdragon SDK, is supported by current emulators like ares, and is used by game modders alike. UNFLoader also features extensive documentation explaining how each cartridge's hardware works and guides on how to extend the tool further.


Return to projects