The N64 begins by setting the Program Counter (PC) to 0x1FC0 0000.
At this address is something called the PIF ROM. This is a program that prepares the N64 to run the program stored on the cartridge.
The PIF ROM sets the following General Purpose Registers to the shown values:

General Purpose Registers
Register Number Register Name Set to value
0 r0 0
1 at 0
2 v0 0
3 v1 0
4 a0 0
5 a1 0
6 a2 0
7 a3 0
8 t0 0
9 t1 0
10 t2 0
11 t3 0
12 t4 0
13 t5 0
14 t6 0
15 t7 0
16 s0 0
17 s1 0
18 s2 0
19 s3 0
20 s4 0x1
21 s5 0
22 s6 0x3F
23 s7 0
24 t8 0
25 t9 0
26 k0 0
27 k1 0
28 gp 0
29 sp 0xA4001FF0
30 s8 0
31 ra 0

The registers of Coprocessor 0 are set to the following values:

CP0 Registers
Register Number Register Name Set to value
0 Index 0
1 Random 0x0000001F
2 EntryLo0 0
3 EntryLo1 0
4 Context 0
5 PageMask 0
6 Wired 0
7 7 0
8 BadVAddr 0
9 Count 0
10 EntryHi 0
11 Compare 0
12 Status 0x70400004
13 Cause 0
14 EPC 0
15 PRId 0x00000B00
16 Config 0x0006E463
17 LLAddr 0
18 WatchLo 0
19 WatchHi 0
20 XContext 0
21 21 0
22 22 0
23 23 0
24 24 0
25 25 0
26 Parity Error 0
27 Cache Error 0
28 TagLo 0
29 TagHi 0
30 ErrorEPC 0
31 31 0

The PIF ROM also writes the value 0x01010101 to memory address 0x0430 0004.
The PIF ROM then copies the first 0x1000 bytes from the cartridge (located at 0xb000 0000)
to memory address 0xA400 0000.
Next the PIF ROM sets the PC to 0xA400 0040. Note that this skips the first 0x40 bytes of the program because that is where the cartridge header is stored.

ROM Header
Address What's stored there
0x0000 0x80 (first byte of ROM validation)
0x0001 0x37 (second byte of ROM validation)
0x0002 0x12 (I don't know what this is for)
0x0003 0x40 (I don't know what this is for)
0x0004 - 0x0007 ClockRate
0x0008 - 0x000B Program Counter (PC)
0x000C - 0x000F Release
0x0010 - 0x0013 CRC1
0x0014 - 0x0017 CRC2
0x0018 - 0x001F Unknown (0)
0x0020 - 0x0033 Image name
0x0034 - 0x0037 Unknown (0)
0x0038 - 0x003B Manufacturer ID
0x003C - 0x003D Cartridge ID
0x003E - 0x003F Country code

You don't actually need to have a copy of the PIF ROM in your emulator,
you can just simulate the effects of it and it will work the same.

The values I have shown here for the CPU registers have been copied from Breakpoint's Project Unreality and they are what I use for Ultra 64. If something here is wrong please notify me by email: tim@aisp.net.

Next up: Memory mapping