Dragonminded.com
 
 
 
 
 
 
 
 
Dragonminded.com
 

N64DEV

This is the beginnings of a bunch of stuff that I want to do for the N64. I am the proud new owner of a Doctor V64 I picked up from a local game shop, and so my quest for N64DEV has begun. The pure homebrew side of N64DEV is still rather lacking as many people use proprietary tools. Thus, my interest at least at the beginning is to flesh out support libraries to make coding with purely open tools less of a hassle.

For the last couple of months, 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.

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.

Buildscript and associated source for Linux (Updated May 29th, 2010)
Compiled toolchain and associated utilities for Windows (Updated May 2nd, 2009)

After 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 with no edits.

Support Libraries

There is currently a replacement library for libultra called alt-libn64 under development, though it is very minimal and hasn't been touched in awhile. It provides the ability to interface with the 2D video hardware, audio hardware, serial interface (for controllers) and provides some rudimentary support for DMA and such. A slightly out of date source repository is available here. As a direct quote from one of the authors: "is intended to be the "barebones" replacement for libultra." A snapshot of more current files with a makefile that is fixed to work with the above toolchains is available here. However, I would recommend using my own libdragon.

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 code 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.

libdragon

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 no longer depends on alt-libn64 to operate. Thus, it can be used as a standalone library for developing for N64. For more information, visit the libdragon page.

Hardware Documentation

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

RCP Documentation Rev.5 (unfinished)

 




If you enjoyed something I've worked hard on and wish to donate, please do so!


 Site copyright © 2006-2010 Shaun Taylor. All rights reserved.