I haven't actually written any code for MESS before, so I have no idea how I should determine the difference between a cold boot and a warm boot. Do I add a new variable? Is similar functionality already present? Is there another driver that I should use as reference?
If you hop into #messdev or something I can give you a quick overview. The structure is pretty straightforward, overall:
src/emu/cpu/rsp/*: RSP-related files
src/mess/drivers/n64.c: The core N64 driver file. Defines the memory maps, input, and the main machine definition.
src/mame/video/rdp*.c and n64.c: RDP emulation. Here be dragons.
src/mame/machine/n64.c: Non-RDP-related emulation code. This is where most of the stuff you want is located, as it handles stuff like PIF, cold/warm boot, and things like the RDRAM regs. mi_reg_r/mi_reg_w handle MI, vi_reg_r/vi_reg_w handle VI, and so on for AI, PI, RI and SI. There's also rdram_reg_r and rdram_reg_w, which is what you want. As you can see, the RDRAM register handling is completely a stub at the moment, so it should be pretty straightforward if you want to try adding support for those registers.
As for cold boot versus warm boot, I don't believe the PIF RAM is ever initialized to anything in the first place in the current MESS code. For all I know this may well be why some games don't want to boot in MESS for inexplicable reasons. This could be easily taken care of by initializing the PIF RAM in n64_state::machine_start. To flag a warm boot, you would want to poke the relevant value into PIF RAM in either reset_tick (if the value appears when the reset button is released) or in poll_reset_button (if the value appears as soon as the reset button is depressed).