It, however, does have a Vector Unit (VU) available as COP2. It also does not have a floating point unit available on COP1. Instead, the COP0 registers are used to communicate with the DMA engine, RDP, and various other things. The RSP has no COP0 in the same way the CPU does. Note that this is different than the main CPU, which has 64-bit registers! As in the CPU, the first register, r0 or $zero, is hardwired to 0 at all times. It is effectively a stripped-down version of the MIPS chip used for the main CPU, missing some instructions and running at a slightly slower speed. These instructions perform the same operation on multiple values at once. While it runs at 2/3rds the speed of the main CPU, it has powerful Single Instruction Multiple Data (SIMD) instructions that make it extremely suited for the type of math required by 3D graphics. The RSP is a secondary CPU mostly used for 3D and audio calculations. It supports a variety of floating point operations on its 32 floating-point registers.
There are 32 32-bit registers, most of which have special uses.Ĭoprocessor one, or COP1, is a floating-point unit, or FPU. Each one is numbered, and there are special opcodes for interacting with them, including MTCx/MFCx (move to/from coprocessor x), which are used to move data between the main CPU registers and the coprocessor’s registers.Ĭoprocessor zero, or COP0, is the “system control coprocessor.” It is through COP0 that virtual memory is set up, exceptions and interrupts are controlled, the CPU status is accessed, among other things. MIPS has the concept of “coprocessors” built directly into the instruction set. There are segments of the address space that use fixed translation, and segments that are configurable.
All memory accesses must be aligned, and loads/stores with unaligned addresses will throw exceptions.Īll memory accesses, including instruction fetches, use virtual memory.
It can load and store 8, 16, 32, and 64 bit values.
It has a 64 bit program counter and can be configured to use 32 bit or 64 bit addresses to access memory, though in practice the vast majority of software uses 32 bit addressing. There are also special-purpose registers for things like multiplication. The first register, r0 or $zero, is hardwired to a value of 0, at all times. The CPU is a fairly standard 64 bit MIPS r4300i chip. The 9th bits are usually implemented in emulators as an entirely separate structure from the main RDRAM array. The RDP uses it for depth buffering and anti-aliasing, usually. In other computer systems with RDRAM, this 9th bit is normally used as a parity bit for data integrity checking, but it has been repurposed in the N64 as extra storage for the RDP. Interestingly, each byte in RDRAM is actually 9 bits. Thus, this RAM acts as both normal system RAM and VRAM at the same time. The system is designed in such a way that all 3 processors (CPU, RSP, RDP) can access the same memory.
The system has 4MiB of RDRAM, expandable with an add-on (Expansion Pak) to 8MiB. The system is often thought of as having two main components - the CPU, and the Reality Coprocessor (RCP), with the RCP again being divided into two components, the Reality Signal Processor (RSP) and the Reality Display Processor (RDP.) It seems to be apparent in Banjo Tooie, too.The Nintendo 64 is an early 3D console with some interesting quirks. To update, the issue is also present in the 1.1 rom, it's just less frequent and less noticable but still apparent during the title song. It does not appear to be an issue when using Project 64 however, maybe a separate build for Mupen is required using the zilmar spec but having some sort of fix? This issue may be present in other roms too. Turning off "emulate frame buffer" removes this issue, but then of course the game doesn't look right and the jigsaw transitions no longer work. I ran the 1.1 rom and the issue wasn't present. There's a weird sort of flickering going on, it's almost as if it's rendering the frames out of order, eg. When running the early release build of GLideN64, I've noticed an issue that is immediately apparent on Banjo-Kazooie (U) (1.0). I do not have MupenPlus working, so this report has been worked out using Mupen + the Zlimar spec plugin.