Awesome N64 Development

A curated list of Nintendo 64 development resources including toolchains, documentation, emulators, and more

Contents

Community

N64brew - Nintendo 64 homebrew chat on Discord

Discord64 - Nintendo 64 emulation and homebrew chat on Discord

#n64dev on EFnet - Nintendo 64 development IRC channel on EFnet

on EFnet - Nintendo 64 development IRC channel on EFnet /r/N64Homebrew - The N64Homebrew subreddit

Documentation

Videos

Toolchains

Official Nintendo 64 SDKs - Official Nintendo 64 Software Development Kits for Windows and SGI IRIX

N64 SDK Easy Install CD - An ISO image made by AlphaTango and CrashOveride to simplify installation of the official SDK. Works on Windows 98-XP.

n64chain - A development toolchain based on GCC that does not depend on any proprietary Nintendo library

modern-n64sdk - Describes how to get a modern build of GCC cross-compiling on a modern OS (Linux, Windows, macOS)

n64sdkmod - A libultra SDK for the modern era, supported on Debian-based Linux distros. See also: docs.

portable-n64-toolchain - A Dockerized toolchain based on modern-n64sdk

libdragon-docker - Dockerized toolchain based on libdragon

homebrew-n64-dev - macOS gcc and binutils Homebrew formulae for Nintendo 64 development

and Homebrew formulae for Nintendo 64 development mips64-gcc-toolchain - Windows and Linux scripts to automate building of a modern MIPS64 GCC toolchain for Nintendo 64 cross compilation

glankk/n64 - A collection of files and tools used to compile and test code for the Nintendo 64

Assemblers

ARM9/bass - A fork of bass which has been updated with Nintendo 64 MIPS/RSP/RDP output

ARMIPS - An assembler for various ARM and MIPS platforms. macOS builds also available.

Screwaround64 - An interactive assembler for Nintendo 64

lips - A MIPS R4300i assembler written in Lua

Emulators

Actively Maintained

cen64 - A cycle-accurate An emulator for Windows, Linux, and Mac. While currently not fast enough to play games at full speed, it aims for perfect emulation by emulating the hardware inside of the console down to the register-transfer level. Widely used to test ROMs in lieu of or before using real hardware.

Project64 (GitHub) (with Debugger) - An open source emulator for Windows and Android

Sixtyforce - A closed-source emulator for Mac

mupen64plus (GitHub) - A more recently updated fork of mupen64 for Linux, Mac OSX, FreeBSD, and Windows

Mupen64+ Reverser Edition - A fork of the Mupen64+ emulator tailored for reverse engineering

Works In Progress

cor64 - An in-progress emulator written in C#

r64emu - An in-progress emulator written in Rust

Unmaintained

1964 - An open-source emulator for Windows

mupen64 - An open-source, multi-platform emulator

Wii64 - A port of mupen64 for Nintendo Wii and Gamecube

Mupen64-360 - A port of Wii64 (and thus mupen64) to the Xbox 360. No longer maintained

Project Unreality - An early emulator for Windows

Nemu64 - A closed-source emulator for Windows

UltraHLE - An early emulator for Windows. Though closed-source, the source leaked in 2002.

Not64 - A fork of Wii64

Surreal64 and Surreal64 CE - An emulator for the original Xbox which includes ports of 1964, Project64, and UHLE

TrueReality - An open-source emulator

Development Hardware

64drive - A flash cartridge with USB support targeted at developers. Currently unavailable.

EverDrive-64 x7 - A flash cartridge with USB support for development

Brutzelkarte - An open-source (hardware and software) FPGA-based flash cartridge

El Barato 64 - An in-progress open source development cartridge

UltraHDMI (periodically in stock at Game-Tech) - A board that can be installed into the console to capture the digital output of the RCP and send it out a Mini HDMI connector to a modern TV. Convenient for connecting a real console to a nearby monitor while viewing the best possible output signal.

UltraSave - A device that works with the 64drive to transfer saves from real cartridges

GameShark 3.0+ - A method of running homebrew via a GameShark

sm64gameshark - How to transfer GameShark codes from USB to parallel, and how to identify GameShark cartridges with functional parallel ports

gs_libusb - GameShark Pro utilities using libusb over a USB parallel port adapter

Development Cartridge Loaders

64drive-usb-linux - A Linux tool to upload to/download from a 64drive development cartridge over USB

g64drive - Linux/Mac tool for operating a 64drive development cartridge

ed64 - Tools to develop on an EverDrive-64 cartridge

loader64 - A USB uploader for Everdrive-64

64drive.py - A 64drive loader written in Python

UNFLoader - A universal flashcart ROM uploader (64drive, EverDrive-64 V3, and EverDrive-64 X7) and debug library

Asset Conversion and Viewing

3D

64Drive Viewer - Preview textures, images, sounds, and 3D models on hardware with a 64drive over USB

Blen64 - Blender scripts to export meshes to draw lists as header files

Blender64 - A Python tool to export Blender 3D models to F3DEX2 microcode display lists

blend2niff - A Blender add-on to export to NIFF2 (Nintendo Intermediate File Format 2)

Fast64 - A Blender plugin to export display lists, geolayouts, and animations to Super Mario 64

objn64 - Wavefront .obj model converter that generates optimized displaylists for compilation with libultra

model converter that generates optimized displaylists for compilation with libultra Obj2N64DL - Another Wavefront .obj to displaylist converter

to displaylist converter Max_To_N64 - Scripts to export models from 3DS Max to C

N64_3DRenderingTest - A basic model viewer using NuSystem

2D

png2n64 - A Python 3 script to convert PNG images to 16 bit RBGA

GML-N64TextureConverter - Converts standard image formats to Nintendo 64 compatible C header files

n64CIconverter - Converts standard image formats to Nintendo 64’s Color Index (CI) format

N64GFXCookie - Nintendo 64 CI8 format graphics viewer/editor

n64rawgfx - A tool to export and import uncompressed/raw graphics from ROMs

Texture64 - A texture ripper and editor with support for multiple formats

leotools - Tools for working with 64DD images and related files

ImageMerge - Converts two 8-bit images into 2-bit images and packs them into 1 image to save space in a ROM

Spritemapper - Arranges a directory of equally-sized images into a sprite map and compresses it

xo-tt64 - Converts input images to .c files of the same name

mkspriten64 - Windows equivalent to the SGI program mksprite . Converts .png to a .h header and .c source file.

Audio Playback and Editing

N64-Tools - A tool to extract and import audio from many games that make use of the MIDI format

libmad-n64 - libmad with MIPS patches, for MPEG audio playback

seq64 - A full-featured editor for sequenced music in first-party games

N64-SoundTester - A ROM that allows you to test out N64 Sound Tools sample banks and tune them directly on your console or emulator, avoiding lengthy turnaround times

ANMP - A multi-channel loopable video game music player, with support for various Nintendo 64 audio formats

Debugging

Project64 EmuScripts - Scripts for debugging under Project64 emulation

n64rd - Remote debugger for GameShark 3.2 hardware over a parallel interface

ed64log - A tool and example code to implement development logging from a homebrew ROM running on an EverDrive-64

webserial-ed64log - An ed64log client using Web Serial API

ed64-gdb - A GDB stub for debugging with an EverDrive-64 V3

gdbstub-ed64 - Another EverDrive-64 GDB stub

N64-GDB-stub - A GDB stub that works with a modified version of the cen64 emulator

ROM Manipulation

spicy - An open-source replacement of the official SDK’s mild.exe (referenced by $(MAKEROM) in many Makefiles). Packs object files into an N64-compatible ROM.

(referenced by in many Makefiles). Packs object files into an N64-compatible ROM. makeromOpen - Another open-source makerom replacement (work in progress)

makemask - An open-source replacement of the official SDK’s makemask.exe . Adds a mask to a compiled ROM which pads the file to fill the entire cartridge space, adds a CIC version, and adds informational headers to the file. Typically run immediately after mild.exe . More on this tool at N64Squid.

. Adds a mask to a compiled ROM which pads the file to fill the entire cartridge space, adds a CIC version, and adds informational headers to the file. Typically run immediately after . More on this tool at N64Squid. Tool N64 - A tool to display ROM information and perform byte reordering

Real N64 CRC Tool v2 - A tool to check, calculate, and set ROM checksums and extract the bootcode of ROM files

n64splat - A ROM splitting tool to assist with decompilation and modding projects

seq64/n64checksum - Source for a tool to calculate and set ROM checksums

Info64 - A tool to display and set ROM header information and checksums

N64ShellPreview - A Windows Shell Extension to display ROM information in Explorer’s preview pane

ipl3hasher - GPU-accelerated hash collision finder for the IPL3 boot code

boot_stub - A replacement for the CIC-6102 IPL3 boot code

Development Libraries

libdragon - An open-source library for Nintendo 64 development

libn64 - An open-source library for Nintendo 64 development, part of n64chain

pseultra - A collection of tools used to develop software for the Nintendo 64 that are distinct from the official SDK

libreultra - A decompilation of the Nintendo 64 standard SDK library, libultra

n64ut - An in-progress set of modern Nintendo 64 libraries

libhfx - An in-progress open source library for 3D graphics

Reverse Engineering

Projects

Guides and Reference

n64-decompiling - An overview of decompiling Nintendo 64 ROMs with Ghidra

awesome-decompilation - A curated list of awesome decompilation resources and projects

N64LoaderWV - Nintendo 64 ROM loader for the Ghidra reverse engineering tool

RI Probe - A ROM that dumps RDRAM values onscreen for debugging and exploring

n64sym - Scans a RAM dump for symbols from a given library or object file

Online Disassembler - A lightweight, online service for when you don’t have the time, resources, or requirements to use a heavier-weight alternative

Compiler Explorer - Explore how your C, C++, Rust, or other compiled language code ends up looking after compilation

mips_to_c - An open-source MIPS decompiler, useful for understanding and reimplementing N64 games’ behavior in C

GEDecompressor - Decompressor for a wide variety of compression formats used across various titles

asm-differ - A diff script for MIPS assembly

script for MIPS assembly decomp-permuter - A tool to randomly permute C files to better match a target binary

Programming

Assembly

C

Guides

N64 Homebrew Starter Guide - Buu342’s guide to creating an N64 game with the official SDK

Implementation of Sounds Using the Nintendo 64 Sound Tools - Buu342’s guide to implementing sound in your ROM with the Nintendo 64 Sound Tools

N64Squid Homebrew - Development walkthrough using the NuSystem library that’s part of the official SDK

Example Code

ultra64demos - Original SGI Nintendo 64 technical demos

n64-sdk-demo - jsdf’s detailed example with heavily-commented source showing basic usage of the official SDK and the NuSystem library

brick64 - A homebrew 3D brick-breaker game using the official SDK

goose64 - jsdf’s Untitled Goose Game “demake”

helloworld - Hello World example using NuSystem and S2DEX microcode

Controller-Pak-Manager - A ROM that presents graphical user interface to manage Controller Pak data

old-castle - A homebrew game based on a NuSystem sample from the official SDK

n64-gameoflife jsdf’s implementation of the classic Conway’s Game of Life

shibamatch - A Shiba Inu-themed memory match game

UltraEd - An in-progress level editor and game engine

n64zlibbench - A zlib benchmark with result display

chip8-n64 - A CHIP-8 emulator, using libdragon

gb64 - A Nintendo Game Boy emulator that runs on real hardware

platformer64 - An in-progress adventure platformer

aw64 - (C++) A Nintendo 64 port of the bytecode interpreter from Another World/Out of This World

Memory64-N64 - A Simon style memory game with Rumble Pak support, using libdragon

FlappyBird-N64 - A demake of Flappy Bird using libdragon

n64triangle - RDP triangle demo, using libdragon

64doom - A source port of the original DOOM

cmake-demo-rom - Demonstrates building toolchains and a ROM using CMake and libdragon

n64_controller_test - A simple homebrew ROM to perform some basic controller tests

Rust