N64DEV

For the last couple of years I have been working hard on reverse engineering the proper method of communicating with the RDP without the use of libultra. So far, efforts have paid off slowly but I am proud to announce that libdragon now has code to allow you to display sprites using hardware acceleration using the new RDP interface. Also, I've begun a document describing how to interact directly with the RDP using open software. I plan to continue reverse engineering the RDP as well as documenting what I've found so others can write homebrew that is entirely FOSS.

Toolchain

To get compiling, you will need a mips64 targetted gcc/binutils/newlib. Wtih the help of LiraNuna, I've put together a windows toolchain as well as a linux buildscript that will get you started. The script for linux is a bit rough as certain packages are expected to be installed and it does not handle being interrupted well. Before running the build script, please be sure you have the packages libgmp3-dev, libmpfr-dev and texinfo installed before attempting to run the build script. The build script is available under the tools section as a part of the libdragon toolchain and API.

If you are on windows and can suffice with an older version of the toolchain, it is available here: Compiled toolchain and associated utilities for Windows (Updated May 2nd, 2009)

After compiling and installing the toolchain for any platform, you should define the environment variable N64_INST to point to the root directory of your toolchain. For example, on my Linux build, I have N64_INST=/usr/mips64-elf. For my Windows build, I have N64_INST=D:/devKitN64/mips64-elf (Please be sure to use forward slashes even on Windows). Inside that directory resides my bin, include and lib directories. This is necessary for the makefiles of libraries and code I put out as this ensures that it builds cleanly on Windows and Linux.

Support Libraries

The base support library that will get you going is libdragon. It is available in source form on GitHub. This is my own library that I am cooking up as I am getting further into N64DEV. I have recently merged all functionality not already present in libdragon from alt-libn64 so it is fully sufficient to get started. Thus, it can be used as a standalone library for developing for N64. For more information, visit the libdragon page.

For audio playback, I've done a quick port of libmikmod to the N64 and integrated a few of the fixes I threw in during my NDSDEV career. This port requires libdragon to work as it relies on the filesystem hooks it provides. If you instead wish to play files from memory, simply edit the mmio/mmio.c source file and change the file wrapper routines to read from memory instead. To play back files, see the libmikmod general documentation. The libmikmod package is available here and is set up to work with the above toolchains.

Hardware Documentation

Since there is so little good documentation for open source development of N64 binaries, so I have made it a semi-mission to put out some halfway-decent documents on the N64 hardware. The below documentation seeks to demystify the RCP which controls all peripheral access on the N64.

RCP Documentation Rev.6 released on 10/02/2010 (unfinished)