What's new

Textures in the N64

TinySquirrel

New member
Hi people. I have seen there is a lot of n64 'gurus' here, so probably some of you will be able to help me.

Right now, I'm translating the game Conker's Bad Fur Day to spanish. I have successfully decompressed almost all texts in game, but I came across a problem: how to add the character 'ñ' (the game has some dummy chars, I'm going to replace one of them)
Acording to Nemu64, the characters are stored in the format '8-bit I', so I decided to do a reverse search and first find the uncompressed texture, and then search its origin in ROM. I think I found some textures in the RDRAM, but some values doesn't have sense for me.
My questions are:
1) ¿Where are phisically located the textures inside the N64 to be procesed by the RDP? As far I understood, they should be stored onto a buffer in RDRAM, and the address is set by the VI_DRAM_ADDR_REG register. ¿Am I right?
2) ¿How are phisically stored? Thanks to this page, I know how they should look. But, ¿how knows the RDP what kind of texture is dealing with? ¿They have a header or something?
 

CHR15x94

Local nut
Well, I'm far from an expert on the N64, but I've always found it an interesting system. I'll give it a go, but take my answer with a few grains of salt...

As far as I know, textures are stored in RDRAM. The RDP is sent a command from the microcode running on the RSP to fetch a texture from RDRAM ($F4 is Load Tile). It does that and copies the texture from RDRAM into it's own private 4K of TMEM (texture memory), 2K at a time. The data in TMEM can also be split into multiple parts, allowing the RDP to use it as multiple textures (only a handful of games actually do this, like Mortal Kombat).

On a side note, VI_DRAM_ADDR_REG is the pointer to the screen's frame buffer. It's not used for texture loading.

As far as the format of textures, that's microcode specific. That's something I don't know much about. I only like the nitty-gritty stuff I guess. :p You'd probably have to find some more info on the specifics of CBFD's microcode, which I'm sure will be fun since it's made by RARE, isn't one of Nintendo's default microcodes, so info might be a bit harder to come by. Might have to look through the sources of some emulator plugins.

Could try contacting some people more in the know here as well, like Hackatrux. He made Mupen64, so he knows the N64 in and out.

Might also find some of these useful. A lot of them are what my info was obtained from:
- Animal Forest/Crossing translation here on EmuTalk. Might get some clues or ideas
- Reality Co-Processor PDF. One of the better ones I've come across. Simple and detailed. Covers the registers used to setup the RCP, like the VI_* registers, etc.
- RDP and RSP docs on EmuTalk. Rather low-level stuff, commands and what not. Try looking at some of the other docs in that section too, some good ones.


Good luck with your project. Hope it turns out good!

- CHR15x94
 

SubDrag

New member
The way it was done for GoldenEye was to replace an unused character's image in font, such as { or so, and then use { whenever you intend to mean the special character. You would replace it in the ROM, knowledge of RDP, etc, unnecessary.
 
Last edited:

Top