FAQ: Difference between revisions

Jump to navigation Jump to search
Content added Content deleted
Line 19: Line 19:
The RDRAM chips are connected to the RCP via a bus called RAMBUS. This bus allows to connect multiple chips to a controller; the controller can then talk to each chip and configure it to reply to a certain range of addresses (that is, "map it" into a memory map).
The RDRAM chips are connected to the RCP via a bus called RAMBUS. This bus allows to connect multiple chips to a controller; the controller can then talk to each chip and configure it to reply to a certain range of addresses (that is, "map it" into a memory map).


The RDRAM initialization is performed by [[IPL3]], a piece of the Nintendo 64 secure boot code (there are a few variants to its contents but the differences are not related to RAM management). IPL3 does the RDRAM chip initialization using a process called "current calibration", and then map them into the (phyisical) address space, by giving to each chip its own address. The code in IPL3 is ready to handle 1 MiB and 2 MiB chips, but it does currently map only enough chips until 8 MiB is reached.
The RDRAM initialization is performed by [[IPL3]], a piece of the Nintendo 64 secure boot code (there are a few variants to its contents but the differences are not related to RAM management). IPL3 does the RDRAM chip initialization using a process called "current calibration", and then map them into the (phyisical) address space, by giving to each chip its own address. Nintendo's IPL3 can correctly handle up to 4 2-MiB chips (it also has buggy support for 1 MiB chips, which probably were never released by Rambus, so the code was never tested).


For a long time, it was then believed that changing IPL3 would be enough to allow more chips to be mapped, assuming somebody built an expansion pak card with more chips in it. This is made difficult because IPL3 contents are verified through a hash and are part of the secure boot chain, so even if the hash can now be bruteforced with GPUs (and has been done a few times as proof of concepts), nobody has still written and released an open source IPL3 boot code to tinker with.
For a long time, it was then believed that changing IPL3 would be enough to allow more chips to be mapped, assuming somebody built an expansion pak card with more chips in it. Instead, late work on [Libdragon's open source IPL3](https://github.com/DragonMinded/libdragon/tree/preview/boot) brought more reverse engineering of the RI chip, which eventually proven that RI *internally* runs a state machine that tracks RDRAM bank status, and only has enough room for 8 1-MiB banks (each 2-MiB chip is logically made of 2 1-MiB bank). More details can be found in the [RI bank status tracking]([[RDRAM Interface#Bank Status Tracking]]) wiki section.


On top of this, Rasky (who authored Libdragon's IPL3) also got the chance to test a custom made expansion pak with 8 MiB of RAM in it, designed by LambBraink. This pak uses donor chips from official expansion paks, and is correctly recognized by Nintendo IPL3, though just as a 4 MiB pak. Anyway, by hacking Libdragon's open source IPL3, it can be seen that the extra banks were indeed present on the bus, but it turned out to be inaccessible after bus mapping. This is further proof that RI is not actually able to handle more than 8 MiB of RAM.
This notwithstanding, Mazamars312 has done investigations while implementing his N64-on-FPGA system, and has reported that, even if the chips are mapped to more than 8 MiB, it seems like the RCP chip itself (specifically, the RI subsystem which is in charge of converting VR4300 memory accesses to RAMBUS packets) is physically limited to managing requests in the first 8 MiB range. That is, even if the VR4300 generates accesses beyond 8 MiB, the RI refuses to generate the corresponding RAMBUS packets to talk to the chips that have been mapped there. In other words, the 8 MiB limit seems hardcoded in the RCP chip. If there is a way to unlock this limit via RI hardware registers, it is not known at this time.


The tests Mazamars312 conducted are currently not reproducible with open source source and tools. Libdragon is planning to eventually release an open source IPL3, at which point it would be easier for others to experiment with the RDRAM initialization sequence.


=== Is it true that the RSP has hardware MPEG-1 acceleration? Is it used by full motion videos in Resident Evil 2? ===
=== Is it true that the RSP has hardware MPEG-1 acceleration? Is it used by full motion videos in Resident Evil 2? ===