Difference between revisions of "RO services"

From Nintendo Switch Brew
Jump to navigation Jump to search
(Fixed capitalisation)
 
Line 54: Line 54:
  
 
== LoadNrr ==
 
== LoadNrr ==
[7.0.0+] A new 8-bit field at NRR + 0x33C (previously padding) must be 0 for this function to succeed.
 
 
 
{| class="wikitable" border="1"
 
{| class="wikitable" border="1"
 
|-
 
|-
Line 79: Line 77:
 
| 4 || Nrr size
 
| 4 || Nrr size
 
|}
 
|}
 +
 +
[7.0.0+] [[NRR|NrrKind]] must be 0 (User) for this function to succeed.
  
 
== Initialize ==
 
== Initialize ==
Line 105: Line 105:
 
Takes in a u64 nrr_address, a u64 nrr_size, a pid descriptor, and a process handle.  
 
Takes in a u64 nrr_address, a u64 nrr_size, a pid descriptor, and a process handle.  
  
First, this validates that the pid descriptor matches the pid for the process handle sent to this->Initialize() earlier.
+
First, this validates that the pid descriptor matches the pid for the process handle sent to this->Initialize() earlier. Then, this calls the same function as LoadNrr, except using the passed process handle instead of the one sent to Initialize.  
 
 
Then, this calls the same function as LoadNrr, except using the passed process handle instead of the one sent to Initialize.  
 
  
When called from an ro:1 session, the field at NRR header + 0x33C must be 0x1. When called from ldr:ro session, the field at NRR header + 0x33C must be 0x0.
+
When called from an ro:1 session, [[NRR|NrrKind]] must be 1 (JitPlugin). When called from ldr:ro session, [[NRR|NrrKind]] must be 0 (User).
  
 
[[Category:Services]]
 
[[Category:Services]]

Revision as of 18:24, 22 February 2020

Prior to 3.0.0, ro was included as part of Loader services. Despite the separation, the service name ldr:ro is retained to maintain compatibility with old games.

ldr:ro, ro:1

[1.0.0-2.3.0] This is "nn::ldr::detail::IRoInterface"

[3.0.0+] This is "nn::ro::detail::IRoInterface".

[7.0.0+] ro:1 was added, and also creates nn::ro::detail::IRoInterface objects.

Cmd Name
0 #LoadNro
1 UnloadNro
2 #LoadNrr
3 UnloadNrr
4 #Initialize
10 [7.0.0+] #LoadNrrEx

LoadNro

Word Value
0 0x00000004
1 0x80000012
2 0x00000001
0-1 Pid
0 "SCFI"
1 0x00000000
2 Always 0.
3 Nro heap address
4 Nro size
5 Bss backing heap address
6 Bss size

LoadNrr

Word Value
0 0x00000004
1 0x8000000E
2 0x00000001
0-1 Pid
0 "SFCI"
1 0x00000002
2 Always 0.
3 Nrr address
4 Nrr size

[7.0.0+] NrrKind must be 0 (User) for this function to succeed.

Initialize

Word Value
0 0x00000004
1 0x8000000A
2 0x00000003
0-1 Pid
2 Process handle (0xFFFF8001)
0 "SFCI"
1 0x00000004
2 Always 0.

LoadNrrEx

Takes in a u64 nrr_address, a u64 nrr_size, a pid descriptor, and a process handle.

First, this validates that the pid descriptor matches the pid for the process handle sent to this->Initialize() earlier. Then, this calls the same function as LoadNrr, except using the passed process handle instead of the one sent to Initialize.

When called from an ro:1 session, NrrKind must be 1 (JitPlugin). When called from ldr:ro session, NrrKind must be 0 (User).