The “Oman Archive” was a leak of Nintendo Technical documents from a source inside SGI in late 1999. It was uploaded to the internet under the name oman.rar
but has since been repackaged into multiple other archive formats.
An updated version of the Oman Archive was released in 2020 at the same time as the Gigaleak, another Nintendo Leak which includes N64 content.
Gigaleak - SNES Source Code Leak
For more information on the original Gigaleak check out this post.
Even the origin of the name itself is clouded in mystery with some saying it was leaked by a person called Oman and others disagreeing, but very little information is known about the leak.
It is believed that the archive kickstarted the N64 Emulation development scene and that without it we wouldn’t have made much of the early progress in figuring out how the hardware worked 1.
However the problem with the Oman archive is that the contents were obtained illegally and thus any development based on the stolen content would be liable for copyright infringement.
Thus many talented N64 emulator authors refuse to use the material and instead reverse engineer the inner working of the system themselves. This prevents the code (and the resulting binary) from any patent/copyright/trademark violations, but requires a lot of time and patience. So we are thankful for all these dedicated developers, helping maintain the codebase in a way that prevents distribution of N64 emulators from becoming illegal 2.
If you plan to do any N64 development then stay as far away from the Oman Archive as you can, including leaving this page…
However historically these documents are very interesting and preservation of the material is vital. So even if the originally material disappears from the internet forever (unlikely but not impossible) lets at least clear up a few misconceptions by asking: What exactly IS in the Oman archive?
Like most leaks there are a bunch of misc files at the root of the archive that are not always particularly relevant. This section will try to categorised them as best we can.
These documents are all from February 1997 and really should have been in a folder called N64Win95 or Sn64 as they all come from the same product, maybe it was a copy error by the original author of the leak.
They are from a development kit by SN Systems
known as SN64
and this was the Windows 95 version of the SDK. SN64 is just the brand name of the Nintendo 64 versions of SN Systems PSYQ
development kit that also supported Playstation and Saturn consoles.
This made it a really popular choice for 3rd party game developers as it was slightly easier to port code between the consoles using the SDK.
SN64 - Nintendo 64 Software Development Kit (SDK)
If you are wondering what these files do check out our page on the SN64 SDK.
All of the files in the root directory up to and including N64NOTES.TXT
(9th March 1997) are from this SN64 SDK. The other top level files are listed separately below.
Although the file simple called tmp
looks like a linux directory it is in fact an ASCII Text file that is the output of running a directory command on their E:\oman\DOC
folder.
A C-source file that must have been misplaced, not sure exactly where it came from but it was created by SGI in 1994. The same file exists in TOOLS\EMULATE\AUD.C
so it must have been copied by accident to the top level directory.
This contains a subset of the files from the /DOC
folder and they are all identical in contents to those files too. This zip can be ignored and you can go straight to the /DOC
folder.
This TAR archive contains the N64 SDK version 2.0G (for RCP 2.0) for use on an IRIX Unix machine, to install just copy the 2 folders (var and usr) to the root of your SGI IRIX.
Also note that these files also exist extracted in the root directory of the main tar file.
The files in this tar are part of the standard N64 SDK so will not be covered here as they have been covered multiple times elsewhere.
The tmp folder is blank and contains no data, it should not have been included in the archive.
IRIX machines comes with a command called inst
used for installing software distributed by SGI 3.
The program saves the details of everything that has been installed in the /var/inst
folder, and so the SDK comes with a few files used by the inst program when listing what is installed:
Name | Description |
---|---|
rsp_dev | Install record for Nintendo 64 RSP Development Environment 2.0G |
ultra | Install record for Ultra 64 Development Environment, 2.0G |
rsp_audio | Install record for Nintendo 64 RSP Audio Microcode Source Code 2.0G |
gng_noship | Install record for Ultra 64 Noship Go/No-go Test Software 2.0G |
rsp_gfx | Install record for Nintendo 64 RSP Graphics Microcode Source Code 2.0G |
hist | History file for IRIX inst command |
.rqsfiles | standard file on all IRIX machines that have inst command |
orphan | standard file on all IRIX machines that have inst command |
.machine_inventory | Holds metadata about the current machine |
INSTLOG | Log file from the last time the inst command ran |
The folder var/sysgen/master.d
on an IRIX system is used by the lboot
command to define the master files for the bootable kernel. In this case it just contains one file called u64
for the N64 hardware.
Master files are basically configuration for all the modules on an IRIX system and can be viewed using the master
command 4.
The folder called AS
is at the top level and contains a brief README saying that this folder contains a C program that begins to model the algorithms and functionality of the MSP and MDP (presumably the RSP and RDP).
The Algorithm Simulator was used before the N64 hardware prototype was available to develop on and allowed developers to get a head start on their games.
The folder contains:
The Cosim
folder contains C and Assembly source code used to test the hardware including testing the early Verilog model for “Project Reality”.
Co-Simulation is using software to verify and test simulated hardware, in this case it is testing the N64 development hardware with a few basic software tests 5.
This is the main folder of goodies, whenever someone talks about the value of the Oman Archive this is the documentation they are talking about.
The folder contains many different file formats, some are plain text (.TXT), others are Postscript (.PS) and more are File Maker
files (*.FM & *.DOC). So there was clearly no standard when it came to documentation.
Note that all the documentation located under this folder is part of what SGI called their HeadStart development environment
, which was documentation for starting development before the actual hardware was finalised for the console.
The files located at the root of the DOCS folder tend to be in 3 different formats, .DOC, .FM and .TXT.
Note that the .DOC files start with the ASCII string <MakerFile 4.0K>
and are not MS Word documents. Also the .FM files start with the ASCII string <MakerFile 3.0F>
.
They were both created with an early version of Adobe FrameMaker but don’t seem to be usable in the latest versions of the tool. They also can’t be converted with Adobe createPDF service either so the only current way to get partial content is to run strings
on it but it is hardly readable.
There was a FM2HTML
tool developed according to W3.org but all download links seem to have been Brough offline 6.
For anyone trying to reverse engineer the old FrameMaker format, they is a Postscript version of AUDUCODE.FM
which could help understand what the bytes in the format represent.
Hopefully someone will be able to convert them to a PS, PDF or HTML file someday for us all to enjoy.
Name | Description |
---|---|
ABI.DOC | Audio Binary Interface MakerFile Documentation |
ANIMATION_ENGINE.FM | Brief overview of 3D Animation of Models |
AS.FM | Graphics Algorithm Simulator |
AUDBI.FM | Audio Binary Interface 1.0 command reference (e.g for A_CLEARBUFF ) |
AUDUCODE.FM | RSP Audio Microcode Architecture |
AUDUCODE.PS | Same as AUDUCODE.FM but in Postscript format |
BLEND_MODES.TXT | Very detailed description of the Blend Modes by Phil Gossett |
CHAR_PLAN.DOC | Device Characterization checklist |
CHIP_DESIGN_DIRS.FM | Description of the Verilog folders |
DEBUGGER.TXT | Notes on how to use the CaseVision Debugger |
DIAGNOSTIC_PROPOSAL.FM | Proposal to create a Diagnostic System for the Nintendo 64 Hardware and Software |
DIAGS.DOC | Diagnostic program documentation for the Ultra 64 development board |
DMA_PERFORMANCE | DMA Performance Analysis |
EMULATOR.TXT | Status of the Graphics Binary Interface Emulator for SGI workstations |
ENDIAN.TXT | Brief notes on Big Endian bit ordering |
FILTER_BUILDLOG | Bash script to filter the log files in the directory |
FIXEDPT.FM | Notes on Fixed Point Numbers |
FRAMEREC.TXT | Notes on a way to record gameplay frame by frame on an SGI ONYX |
GFX_TEST.TXT | Notes on the tests located in the PR/apps/rsp* folder for testing the RSP |
GFXBI.FM | RCP Graphics Binary Interface Documentation |
GONOGO.FM | Ultra 64 Go/No Go Test Plan |
GRUCODE.FM | RSP Graphics Microcode Architecture |
GRUCODE.OLD.FM | Old version of RSP Graphics Microcode Architecture |
HUFFMAN.FM | Huffman Decoding for MPEG |
IO.FM | Interaction between I/O components |
IOSIM.FM | iosim I/O simulator command documentation |
LIGHT-MATERIAL.FM | Lighting and Materials |
LIGHTFOG.TXT | Documentation for Lighting, fog, and reflection mapping |
LOGICAL_RDP.FM | Rendering Pipeline |
MAKEFILE | Top level makefile that just calls the “RSP” folders makefile |
MEM_MGMT.FM | Memory Management such as Virtual Addresses and Segments |
MEMORY_MAP | Simple Text memory map of each of the components of the N64 (RCP, RDRAM etc) |
MMAKE | Fork of the SGI mmake bash script |
MNIGHTLY | Bash script for nightly builds using mmake |
MPEG_API.FM | MPEG Video API |
MPEG_STATUS.FM | Status of MPEG integration into the SDK |
MPEG_TALK.FM | How MPEG Works presentation |
MPEG_TALK.PS | How MPEG Works presentation (Postscript) |
MVT.FM | Multi-View Textures (Level of Detail optimisation) |
NIGHTLY.SH | Bash script to run nightly regression testing |
PERFORMANCE.DOC | RSP Geometry Transformation Performance |
PERFORMANCE.DOC.RECOVER | Older version of PERFORMANCE.DOC |
PERSPNORM.FM | Perspective Normalization |
PROBLEMS | Ultra64 Problems and Tips (with workarounds) |
RCP_ELEC_SPEC.FM | Electrical specification for RCP |
RDB.DOC | RDB Port connecting Indy & the development board |
RDP_COMMANDS.FM | Documentation for each of the Reality Display Processor commands |
RDP_COMMANDSIX.DOC | Index of RDP Commands |
RDP_FUNC_IO_TABLES.PS | I/O tables for the Reality Display Processor |
RDPPROG.FM | RDP Programmers Guide |
RDRAM_INITIALIZATION | Brief notes on the initialization sequence of the RDRAM (Rambus) |
README | Description of the HeadStart development environment |
README.6.2 | Notes on one developers attempts to get it running on a 6.2 Indy |
README.NIGHTLY | Instructions for setting up a nightly build of regression tests |
RELEASE2.FM | Readme for Ultra 64 Developers Release 2.0 |
RI_PROGRAMMING_GUIDE | RI/RDRAM register read/write operations |
RSP_GFX_SW.FM | RSP Fast3D Graphics Software Architecture |
RSP_VERIF_ENV | Notes about the RSP verification environment |
RSPVERIF.DOC | RSP Design Verification Strategy |
SPRITELIB.FM | Sprite Library Documentation |
SPRITES.VGS | Introduction to Video Game Sprites |
SRCTREE.FM | Introduction to the Src folder |
SWARCH.FM | Software Architecture |
SWARCH.PS | Postscript version of SWARCH.FM |
SWBRINGUP.DOC | Operational Software Bringup Sequence - nothing much in this document |
SYSDATAFLOW.FM | System Data Flow for both hardware and software |
TESTVECTOR.TXT | Test vector development environment for the RCP |
TEX_FIGS.FM | Texture Image Coordinate Space |
TEXTURE_OUTLINE.DOC | Good overview of texturing on N64 |
TREEBUILD.DOC | Document that outlines how to use the SGI pbuild development environment to build the source tree |
TREESETUP.SH | Small bash script for running the inst command to setup the dev environment |
TUTORIAL.FM | Tutorial for making a N64 game |
ULTRADBG.FM | FrameMaker version of ULTRADBG.TXT |
ULTRADBG.TXT | Very interesting document on how to debug N64 code |
VIDEO_MODES.TXT | Described the different video modes for both NTSC and PAL |
YIELD.TXT | Notes on What Yield is (e.g osSpTaskYield ) |
One of the most interesting documents in this list that can be easily read is SWARCH.PS
as it contains plenty of interesting information about how the software architecture works.
Name | Description |
---|---|
HW/4300_PIN_LIST | Comparison between the VR4300i and Nintendo R4300i Pins, most are the same but some are off by one such as EValidB |
HW/ASICSYN_QUICK_REFERENCE | ASIC Synthesizer Quick Reference |
HW/ATTRIBUTEBUFFER.FM | Attribute Buffering |
HW/AUDIO_DOC | AI CONTROLLER PROGRAMMING INTERFACE |
HW/BL.FM | Hardware Blender description |
HW/CC.FM | Color Combiner hardware |
HW/CELL_NEEDS.FM | |
HW/CELL_TRACK.FM | |
HW/CS.FM | |
HW/CSIM_INTRO.DOC | |
HW/CYCLES | |
HW/EWCTR.FM | |
HW/HWSYMBOLS.FM | |
HW/OS_DEV.SC | |
HW/OS_VIDEO.SC | |
HW/PI_BLOCK.TXT | PI Datapath Block Diagram |
HW/PI.FM | |
HW/PIN_LIST | List of all the pins on the RCP |
HW/PROTOBOARD.SH | |
HW/RAMSPEC.SC | |
HW/RCP_BLOCK.FM | |
HW/RCP_IO.FM | |
HW/REGFILESPEC.SC | |
HW/SHUFFLETABLE.FM | |
HW/SI_SPEC.TXT | Serial Interface specification |
HW/TAB_FORMAT.DOC | |
HW/TESTER_CRC.DOC | |
HW/TF.FM | |
HW/TOOLTIPS | Tips for using the tools Verilog and Compass |
HW/TRI_FORMAT.FM | |
HW/VERILOG_HEADER_TEST | Source code header - not interesting |
HW/WIREDELAYS | Email rising wire resistance and capacitance |
Hardware verification documentation files are located in this folder.
Name | Description |
---|---|
VERIF/BL | hardware Blender test cases |
VERIF/CC | Color combiner test cases |
VERIF/CS | Command Shuffle Unit Test Plan |
VERIF/CV | Check Vectors |
VERIF/EW | Edge Walker Unit Test Plan |
VERIF/HIGHLEVELTEST | |
VERIF/IO | I/O Subsystem Verification Plan |
VERIF/MS | Misc Info (it is blank) |
VERIF/RDPOVERALL | High level RDP Test cases |
VERIF/RDPVERIF.FM | |
VERIF/ST | |
VERIF/TC | Texture Compression Tests |
VERIF/TF | |
VERIF/TM | Texture Memory test cases |
These are pictures in SGI RGB format but it is currently unclear where they are used. If you want to view them just add the .SGI
extension to the end of them and you can open them in most image editors.
Name | Description |
---|---|
PICS/BALL.1 | Unknown image format starts with Magic number: 59 A6 6A 95 |
PICS/BALL.2 | Not an SGI image |
PICS/BALL.3 | Not an SGI image |
PICS/INTL.RGB | Has the TDK logo in it, very blurry greyscale |
PICS/LOGO_SGI.SMALL | Small SGI logo (205x196) |
PICS/TEN1.MB | Square with white pixels in bottom left and dark grey everywhere else |
PICS/TEN1.BLK | Small white Square with grey pixels in the top right corner |
PICS/TENNIS1.CIF | Greyscale image of man holding ping pong racket and bouncing ball on it |
PICS/PIC8.SGI | lots of squares with different patterns in them |
## AUDIO Not sure why a new directory was created for one file but this folder does exactly what it says on the tin, has Audio documentation in it. Which is only one file which contains the Audio API functions.
The file is:
The documents this folder are intended to be released to developers when they obtain the SDK.
Pretty much all of this is already available on the web such as on square7.ch: N64 Programming Manual.
As such we have just listed the chapter that each document corresponds to int he table below.
Name | Description |
---|---|
DEV/ADVMEMORYMGMT.DOC | Chapter 10 |
DEV/AUDIOFORMATS.DOC | Chapter 19 |
DEV/AUDIOLIB.DOC | Chapter 17 |
DEV/AUDIOMEMORYUSAGE.DOC | Chapter 21 |
DEV/AUDIOTOOLS.DOC | Chapter 18 |
DEV/BARKLEY.PS | Seems to be incomplete guide to setting up Development hardware |
DEV/BLENDER.DOC | Chapter 15 |
DEV/DK32.PS | Image of Donkey Kong as a RGBA32 texture |
DEV/DK32SF.PS | Upside down image of Diddy kong |
DEV/GAMESHOP.DOC | Chapter 23 |
DEV/GFXUCODE.DOC | Chapter 25 |
DEV/INSTALLATION.DOC | Chapter 1 |
DEV/IO.DOC | Chapter 8 |
DEV/MAKEFILE | makefile to create Postscript versions of the FrameMaker files |
DEV/MEMORYMGMT.DOC | Chapter 9 |
DEV/MUSICIANMAN.DOC | Chapter 20 |
DEV/OSCORE.DOC | Chapter 7 |
DEV/OSINTRO.DOC | Chapter 6 |
DEV/OVERVIEWCOMPILETIME.DOC | Chapter 5 |
DEV/OVERVIEWHARDWARE.DOC | Chapter 3 |
DEV/OVERVIEWRUNTIME.DOC | Chapter 4 |
DEV/PARTAUDIOTAB.DOC | PART files are just collections of chapters |
DEV/PARTDEVTOOLSTAB.DOC | PART files are just collections of chapters |
DEV/PARTGETSTARTEDTAB.DOC | PART files are just collections of chapters |
DEV/PARTGRAPHICSTAB.DOC | PART files are just collections of chapters |
DEV/PARTINDEXTAB.DOC | PART files are just collections of chapters |
DEV/PARTOSTAB.DOC | PART files are just collections of chapters |
DEV/PARTOVERVIEWTAB.DOC | PART files are just collections of chapters |
DEV/PARTPERFORMANCETAB.DOC | PART files are just collections of chapters |
DEV/PERFORMANCETUNE.DOC | Chapter 24 |
DEV/PERFORMANCETUNE.PS | Chapter 24 |
DEV/PRDEV.BOOK | Entire Book file references all the other docs |
DEV/PRDEVIX.DOC | Index |
DEV/PRDEVLOF.DOC | List of Figures |
DEV/PRDEVLOT.DOC | List of Tables |
DEV/PRDEVTOC.DOC | Table of Contents |
DEV/RDPSTATEMACHINE.DOC | Chapter 12 |
DEV/RSPSTATEMACHINE.DOC | Chapter 11 |
DEV/SCHEDULER.DOC | Chapter 22 |
DEV/SOFTWAREBRINGUP.DOC | Programming Manual Chapter 2 |
DEV/SPRITES.DOC | Chapter 16 |
DEV/SPRITEUCODE.DOC | Programming Manual Chapter 18 |
DEV/STYLE_STRUCTURE.TXT | Style guide for the documentation |
DEV/TEMPLATE.DOC | Template used for creating new documentation pages |
DEV/TEXRECT.DOC | Chapter 14 |
DEV/TEXTURE.DOC | Chapter 13 |
DEV/WALKAPP.DOC | Unreleased documentation about a Haunted house demo |
The file DEV/WALKAPP.DOC
seems to have never been released to developers as part of the SDK as it describes a N64 demo where a user walks around a haunted house.
This folder just contains the scripts to convert the FrameMaker files into PostScript files.
Name | Description |
---|---|
DEV/SCRIPTS/UPDATE.SCRIPT | fmbatch script to update the documentation |
DEV/SCRIPTS/PRINT_TO_PS.FM | |
DEV/SCRIPTS/PS.SCRIPT | fmbatch script to convert to Postscript |
This folder contains all the documentation about programming the Reality Signal Processor.
Name | Description |
---|---|
RSP/ADVANCED.DOC | Advanced topics, such as DMEM usage, RSP performance, code overlays, and the CPU-RSP relationship. |
RSP/APPENDIXA.DOC | Formally describes the behavior of each instruction |
RSP/COP0.DOC | Chapter 4 RSP Coprocessor 0 |
RSP/MAKEFILE | Used to make the postscript versions using fmbatch |
RSP/OVERVIEW.DOC | Overview of the documentation chapters |
RSP/RSPARCH.DOC | RSP MIPS Instruction Set Architecture |
RSP/RSPASM.DOC | RSP MIPS Assembly Directives |
RSP/RSPPROGGUIDE.BOOK | Book file that references each doc file |
RSP/RSPPROGGUIDEIX.DOC | Index of the Documentation |
RSP/RSPPROGGUIDELABELS.FM | List of Labels |
RSP/RSPPROGGUIDELOF.DOC | List of Figures |
RSP/RSPPROGGUIDELOT.DOC | List of Tables |
RSP/RSPPROGGUIDETOC.DOC | Table of Contents |
RSP/RSPREFCARD.FM | Reality Signal Processor Programmer’s Reference Card |
RSP/TITLEPAGE.DOC | Title Page of Documentation |
RSP/VUINST.DOC | Vector Unit Instructions |
This folder contains the printable postscript versions of the RSP Programming Guide and the Reference card documentation.
The reference card is a sort of “Cheat Sheet” for programming on the RSP.
Name | Description |
---|---|
RSP/PS/AA.ZIP | Zip archive of the two postscript files in this folder |
RSP/PS/RSPPROGGUIDE.PS | Postscript version of the RSP Programmers Guide |
RSP/PS/RSPREFCARD.PS | Postscript version of the reference card |
This folder contains scripts to convert the Adobe FrameMaker documentation into printable PostScript files.
Name | Description |
---|---|
RSP/SCRIPTS/UPDATE.SCRIPT | fmbatch script to update the doc files |
RSP/SCRIPTS/PRINT_TO_PS.FM | |
RSP/SCRIPTS/REFCARD.SCRIPT | fmbatchto print the Reference card to Postscript |
RSP/SCRIPTS/PS.SCRIPT | fmbatch to print to Postscript |
This folder contains pseudo-assembly examples for the Media Signal Processor (MSP) which is basically the RSP.
Name | Description |
---|---|
MSP_EXAMPLE/MSP_TRANSFORM.TXT | Transform example code |
MSP_EXAMPLE/README | Describes the purpose of the folder |
MSP_EXAMPLE/MSP_LIGHT.TXT | Example of lighting calculations |
MSP_EXAMPLE/MSP_SETUP.TXT | Example of triangle setup |
This folder contains all the RISC Processor Specification for the N64 CPU (NEC VR4300).
Name | Description |
---|---|
4300/ADDENDUM.DOC | Additional details about the CPU |
4300/BLOCKWRITE.MIF | Converted version of BLOCKWRITE.SUP using supTomif |
4300/BLOCKWRITE.SUP | |
4300/BOOK | FrameMaker Book file that references all the Docs |
4300/BOOKLOF.DOC | List of Figures |
4300/BOOKLOT.DOC | List of Tables |
4300/BOOKTOC.DOC | Table of contents |
4300/CACHE.DOC | Chapter 5 Data and Instruction Cache |
4300/CLOCKS.DOC | CPU Clocks documentation (on-chip Phase Locked Loop circuit) |
4300/CP0.DOC | System Control Coprocessor (CP0) |
4300/CP0.DOC.RECOVER | Old version of CP0.DOC |
4300/DELAYEDREAD.MIF | Converted version of DELAYEDREAD.SUP using |
4300/DELAYEDREAD.SUP | Delayed processor read request figure |
4300/DIFF.DOC | Differences from the R4000 |
4300/DIFFICE.DOC | |
4300/ELECTRICAL.DOC | Electrical information such as Voltages |
4300/EXCP_HAND.DOC | Exception Handling |
4300/EXECUTION.DOC | The instruction execution unit |
4300/FMDICTIONARY | Adobe FileMaker Dictionary |
4300/FUNDAMENTAL.DOC | Operation Fundamentals |
4300/GLOSSARY.DOC | Glossary of Terms |
4300/HISTORY.DOC | Revision History of the documentation |
4300/INTRO.DOC | Very short Introduction to the documentation |
4300/JTAG.DOC | JTAG Interface for the CPU |
4300/OVERVIEW.DOC | Overview of the five-stage execution pipeline |
4300/SYSINTF.DOC | Chapter 8 System Interface |
4300/TEMP.DOC | Template based on the Exception Handling chapter |
4300/TESTMODE.DOC | Test Mode (JTAG) |
4300/TITLE.DOC | Title Page of documentation |
Verilog is a Hardware Description Language used to Design and verify hardware. The HW and HW2 folders contain Verilog source code for the Nintendo 64 hardware, including the prototype development boards.
HW.old contains version 1.0 of the RCP Verilog source code presumably for archival reasons.
Verilog
For more information about Verilog source code click here
This folder contains header files that are distributed with the official N64 SDK to developers plus some additional headers used for internal tools.
Files unique to this directory and not in the SDK are as follows:
This folder contains code for Input/Output simulation for the Verilog models of the N64 hardware.
This seems to be mainly used for testing the prototype N64 hardware while still in development.
This folder contains the source code for the N64 development board kernel so that it can be used from the Indy workstation.
This consists of the following folders:
prinstall
which installs the SDKThis folder contains the source code for a variety of different libraries that are not distributed to developers.
Boot
and pif2Boot
, along with IPL4 codeuhOpenGame
which communicate with the N64 development hardwarelibimage.a
to libimage.so
librcppli
- unknown purposeLibUltra is the official Nintendo 64 development library sent out to all developers in compiled form as part of the official SDK. This folder contains the actual source code for this library.
The source code is split into a number of folders based on the specific task:
al
in the librarygtDumpTurbo
gu
such as guLookAtF
os
such as osContReset
sprintf
libultra_rom.a
libraryosCreatelog
osInitialize
osMalloc
osMalloc
osCreateScheduler
spMove
This folder contains all the Manual pages (known as man pages in unix) for the entire N64 development kit.
If you ever wonder what a specific tool or function was used for in N64 development then this is the best place to search.
During install of the development kit, two versions were created of these files, one in the standard man page location and the other in PostScript file format intended for physically printing out at /usr/src/PR/doc/ps
.
These folders contain two different versions of the Reality Display Processor Simulator. One for RCP 1.0 and the other for RCP 2.0.
This was used to help software developers start coding their games while the hardware was still being developed and also as a way to test the hardware while it was being created.
This folder contains the source code for the Assembler used to compile *.S
assembly files into RSP microcode (uCode).
To do this they have created a yacc parser grammar file called PARSER.G.Y
and a Lexer called PARSER.LX.L
. Also included are a few AWK scripts to help the assembler with tasks such as wrapping the file in C code etc.
This is a fairly standard way to create an assembler or compiler and it doesn’t take very long to understand the YACC grammar syntax and you can understand how it works.
The RSPASM1201
is just a previous version of the RSPASM
folder from the 1st of December (12/01) used for regression testing of the RSP.
This folder contains RSP source code (known as uCode or microcode) for performing a bunch of tasks on the RSP (Reality Signal Processor) chip.
These include:
GRAPHICS
folderAll the source code requires RSPASM
to assemble into object files and then RSP2ELF
to convert into an executable file format.
This folder contains the source code for a full simulator (emulator) of the RSP (Reality Signal Processor). This was created to allow developers to start writing RSP scripts while the hardware was still being developed.
There are a few executables that this source code builds which are:
These tools helped 1st party developers (and a few lucky third parties) write and debug their RSP microcode on their workstation without constantly testing on the hardware.
N64 RSP - Reality Signal Processor
For more information about the RSP check out this page.
The Tools folder contains the source code of many of the tools distributed in the Nintendo 64 SDK.
There is a Makefile
in this directory that can be used to build all of the tools at once.
The CompUtils folder contains code for a bunch of compiler tools such as nld
, gdis
, gnm
and r4300_check
.
The Controller folder contains example C code for a Unix (IRIX) program that can access a game controller. Probably useful for testing code before the N64 hardware was ready by connecting a controller directly to the IRIX workstation.
Multigen was a tool for creating 3D models and environments on SGI IRIX workstations and so was ideal for creating 3D graphics for the N64.
In fact Nintendo had its own fork of the project specifically for the Nintendo 64 called Ningen
.
N64 3D Modelling Software
For more information about MultiGen and Ningen check out this post on 3D Modelling Software for the N64.
The CONV project is source code for a series of tools to convert Multigen models and textures to a format that can be run on the N64. These tools include:
Not sure exactly what these tools are for but something to do with manipulating .data
scripts for Verilog.
Tools included I n this package are:
vi.tab
and compare to rgb fileThere seems to be a few tools from converting rdram to data and back but it is not clear what the purpose of this would be.
This folder is the course code for a tool called dlprint
that basically sits in a loop waiting for Display Lists to be passed to it and it will print them to the console, very useful for debugging.
So how exactly do we pass display lists to the tool? Well it seems to use a macro defined in u64gio.h
called DEV_U64_DATA
for this purpose and is set to the path: /dev/u64_data
.
Notice that this is a UNIX device (in /dev
folder) so it is used to communicate with the N64 development board that was inside the workstation.
It calls a function called uhOpenGame
which is defined in the LIBULTRAHOST
project in the file OPENGAME.C
. It returns a file descriptor if it succeeds.
This folder contains the source code for a program called driverd
which is used to setup the N64 emulation hardware. This program is a daemon so it runs in the background and should only ever be running one instance at any given time.
It provides functionality to send commands to running games and read responses. You can use this functionality by using the IRIX device driver for u64. See the dlprint
source code above for example code utilising this driver daemon.
This folder contains the source code for the emulate
executable and the library libem.a
. The emulate tool takes in a rom image and a bunch of parameters whether to enable lighting and openGL.
This tool is used as a High Level emulator running on the IRIX workstation and forks a process of each of the RSP and RDP simulators to handle the additional chips.
This folder contains the source code for the command gload
which is use for loading a ROM into the N64 development board inside the IRIX workstation. Unlike the emulate tool this actually runs the game on real N64 hardware.
The source code for the gperf
tool is in this folder, the tool is used to help game developers optimise their code by profiling how much time is spent in each function.
This folder contains the source code for the makerom
utility which converts a specfile
into a ROM image that can be run on the hardware and also an ELF executable that can be run in the debugger (GVD).
This folder contains the source code for the Kernel Debugger known as kdebug
, this tool was used to send debugging information to and from the N64 development kit hardware inside the IRIX workstation. It used the /dev/u64_kdebug
device driver for the communication.
This folder contains source code for two versions of a tool called gcord
, which is similar to the Unix command cord
. The purpose is to optimise the game code to fit into the machines cache more efficiently.
These 2 folders are just extracted versions from the INSTD.tar file at the root of the project, please see the section on that topic for more information.
There are a few terms used in the Oman archive that you may not be familiar with, here we try to list the most common ones.
MSP or Media Display Processor is a term thought up by SGI for their co-processor that purely handles graphic data. You probably know this for its later name as it became the Reality Display Processor when it became part of Project Reality (i.e the N64).
The Media Binary interface is just a term that refers to the software interface for interacting with the Reality Co-Processor.
Used in some of the hardware documentation to discuss the Chips created to excel at a single purpose.