diff options
Diffstat (limited to 'src/core/hle')
| -rw-r--r-- | src/core/hle/service/apt_u.cpp | 367 |
1 files changed, 276 insertions, 91 deletions
diff --git a/src/core/hle/service/apt_u.cpp b/src/core/hle/service/apt_u.cpp index d318de3d2..001b0d183 100644 --- a/src/core/hle/service/apt_u.cpp +++ b/src/core/hle/service/apt_u.cpp | |||
| @@ -41,6 +41,29 @@ enum class SignalType : u32 { | |||
| 41 | ExitingApp = 0xC, | 41 | ExitingApp = 0xC, |
| 42 | }; | 42 | }; |
| 43 | 43 | ||
| 44 | /// App Id's used by APT functions | ||
| 45 | enum class AppID : u32 { | ||
| 46 | HomeMenu = 0x101, | ||
| 47 | AlternateMenu = 0x103, | ||
| 48 | Camera = 0x110, | ||
| 49 | FriendsList = 0x112, | ||
| 50 | GameNotes = 0x113, | ||
| 51 | InternetBrowser = 0x114, | ||
| 52 | InstructionManual = 0x115, | ||
| 53 | Notifications = 0x116, | ||
| 54 | Miiverse = 0x117, | ||
| 55 | SoftwareKeyboard1 = 0x201, | ||
| 56 | Ed = 0x202, | ||
| 57 | PnoteApp = 0x204, | ||
| 58 | SnoteApp = 0x205, | ||
| 59 | Error = 0x206, | ||
| 60 | Mint = 0x207, | ||
| 61 | Extrapad = 0x208, | ||
| 62 | Memolib = 0x209, | ||
| 63 | Application = 0x300, | ||
| 64 | SoftwareKeyboard2 = 0x401, | ||
| 65 | }; | ||
| 66 | |||
| 44 | void Initialize(Service::Interface* self) { | 67 | void Initialize(Service::Interface* self) { |
| 45 | u32* cmd_buff = Kernel::GetCommandBuffer(); | 68 | u32* cmd_buff = Kernel::GetCommandBuffer(); |
| 46 | 69 | ||
| @@ -56,16 +79,24 @@ void Initialize(Service::Interface* self) { | |||
| 56 | _assert_msg_(KERNEL, (0 != lock_handle), "Cannot initialize without lock"); | 79 | _assert_msg_(KERNEL, (0 != lock_handle), "Cannot initialize without lock"); |
| 57 | Kernel::ReleaseMutex(lock_handle); | 80 | Kernel::ReleaseMutex(lock_handle); |
| 58 | 81 | ||
| 59 | cmd_buff[1] = 0; // No error | 82 | cmd_buff[1] = RESULT_SUCCESS.raw; // No error |
| 60 | } | 83 | } |
| 61 | 84 | ||
| 85 | /** | ||
| 86 | * APT_U::NotifyToWait service function | ||
| 87 | * Inputs: | ||
| 88 | * 1 : AppID | ||
| 89 | * Outputs: | ||
| 90 | * 1 : Result of function, 0 on success, otherwise error code | ||
| 91 | */ | ||
| 62 | void NotifyToWait(Service::Interface* self) { | 92 | void NotifyToWait(Service::Interface* self) { |
| 63 | u32* cmd_buff = Kernel::GetCommandBuffer(); | 93 | u32* cmd_buff = Kernel::GetCommandBuffer(); |
| 64 | u32 app_id = cmd_buff[1]; | 94 | u32 app_id = cmd_buff[1]; |
| 65 | // TODO(Subv): Verify this, it seems to get SWKBD and Home Menu further. | 95 | // TODO(Subv): Verify this, it seems to get SWKBD and Home Menu further. |
| 66 | Kernel::SignalEvent(pause_event_handle); | 96 | Kernel::SignalEvent(pause_event_handle); |
| 97 | |||
| 98 | cmd_buff[1] = RESULT_SUCCESS.raw; // No error | ||
| 67 | LOG_WARNING(Service_APT, "(STUBBED) app_id=%u", app_id); | 99 | LOG_WARNING(Service_APT, "(STUBBED) app_id=%u", app_id); |
| 68 | cmd_buff[1] = 0; | ||
| 69 | } | 100 | } |
| 70 | 101 | ||
| 71 | void GetLockHandle(Service::Interface* self) { | 102 | void GetLockHandle(Service::Interface* self) { |
| @@ -77,7 +108,7 @@ void GetLockHandle(Service::Interface* self) { | |||
| 77 | lock_handle = Kernel::CreateMutex(false, "APT_U:Lock"); | 108 | lock_handle = Kernel::CreateMutex(false, "APT_U:Lock"); |
| 78 | Kernel::ReleaseMutex(lock_handle); | 109 | Kernel::ReleaseMutex(lock_handle); |
| 79 | } | 110 | } |
| 80 | cmd_buff[1] = 0; // No error | 111 | cmd_buff[1] = RESULT_SUCCESS.raw; // No error |
| 81 | 112 | ||
| 82 | // Not sure what these parameters are used for, but retail apps check that they are 0 after | 113 | // Not sure what these parameters are used for, but retail apps check that they are 0 after |
| 83 | // GetLockHandle has been called. | 114 | // GetLockHandle has been called. |
| @@ -92,19 +123,95 @@ void GetLockHandle(Service::Interface* self) { | |||
| 92 | void Enable(Service::Interface* self) { | 123 | void Enable(Service::Interface* self) { |
| 93 | u32* cmd_buff = Kernel::GetCommandBuffer(); | 124 | u32* cmd_buff = Kernel::GetCommandBuffer(); |
| 94 | u32 unk = cmd_buff[1]; // TODO(bunnei): What is this field used for? | 125 | u32 unk = cmd_buff[1]; // TODO(bunnei): What is this field used for? |
| 95 | cmd_buff[1] = 0; // No error | 126 | cmd_buff[1] = RESULT_SUCCESS.raw; // No error |
| 96 | LOG_WARNING(Service_APT, "(STUBBED) called unk=0x%08X", unk); | 127 | LOG_WARNING(Service_APT, "(STUBBED) called unk=0x%08X", unk); |
| 97 | } | 128 | } |
| 98 | 129 | ||
| 130 | /** | ||
| 131 | * APT_U::GetAppletManInfo service function. | ||
| 132 | * Inputs: | ||
| 133 | * 1 : Unknown | ||
| 134 | * Outputs: | ||
| 135 | * 1 : Result of function, 0 on success, otherwise error code | ||
| 136 | * 2 : Unknown u32 value | ||
| 137 | * 3 : Unknown u8 value | ||
| 138 | * 4 : Home Menu AppId | ||
| 139 | * 5 : AppID of currently active app | ||
| 140 | */ | ||
| 141 | void GetAppletManInfo(Service::Interface* self) { | ||
| 142 | u32* cmd_buff = Kernel::GetCommandBuffer(); | ||
| 143 | u32 unk = cmd_buff[1]; | ||
| 144 | cmd_buff[1] = RESULT_SUCCESS.raw; // No error | ||
| 145 | cmd_buff[2] = 0; | ||
| 146 | cmd_buff[3] = 0; | ||
| 147 | cmd_buff[4] = static_cast<u32>(AppID::HomeMenu); // Home menu AppID | ||
| 148 | cmd_buff[5] = static_cast<u32>(AppID::Application); // TODO(purpasmart96): Do this correctly | ||
| 149 | |||
| 150 | LOG_WARNING(Service_APT, "(STUBBED) called unk=0x%08X", unk); | ||
| 151 | } | ||
| 152 | |||
| 153 | /** | ||
| 154 | * APT_U::IsRegistered service function. This returns whether the specified AppID is registered with NS yet. | ||
| 155 | * An AppID is "registered" once the process associated with the AppID uses APT:Enable. Home Menu uses this | ||
| 156 | * command to determine when the launched process is running and to determine when to stop using GSP etc, | ||
| 157 | * while displaying the "Nintendo 3DS" loading screen. | ||
| 158 | * Inputs: | ||
| 159 | * 1 : AppID | ||
| 160 | * Outputs: | ||
| 161 | * 0 : Return header | ||
| 162 | * 1 : Result of function, 0 on success, otherwise error code | ||
| 163 | * 2 : Output, 0 = not registered, 1 = registered. | ||
| 164 | */ | ||
| 165 | void IsRegistered(Service::Interface* self) { | ||
| 166 | u32* cmd_buff = Kernel::GetCommandBuffer(); | ||
| 167 | u32 app_id = cmd_buff[1]; | ||
| 168 | cmd_buff[1] = RESULT_SUCCESS.raw; // No error | ||
| 169 | cmd_buff[2] = 1; // Set to registered | ||
| 170 | LOG_WARNING(Service_APT, "(STUBBED) called app_id=0x%08X", app_id); | ||
| 171 | } | ||
| 172 | |||
| 99 | void InquireNotification(Service::Interface* self) { | 173 | void InquireNotification(Service::Interface* self) { |
| 100 | u32* cmd_buff = Kernel::GetCommandBuffer(); | 174 | u32* cmd_buff = Kernel::GetCommandBuffer(); |
| 101 | u32 app_id = cmd_buff[1]; | 175 | u32 app_id = cmd_buff[1]; |
| 102 | cmd_buff[1] = 0; // No error | 176 | cmd_buff[1] = RESULT_SUCCESS.raw; // No error |
| 103 | cmd_buff[2] = static_cast<u32>(SignalType::None); // Signal type | 177 | cmd_buff[2] = static_cast<u32>(SignalType::None); // Signal type |
| 104 | LOG_WARNING(Service_APT, "(STUBBED) called app_id=0x%08X", app_id); | 178 | LOG_WARNING(Service_APT, "(STUBBED) called app_id=0x%08X", app_id); |
| 105 | } | 179 | } |
| 106 | 180 | ||
| 107 | /** | 181 | /** |
| 182 | * APT_U::SendParameter service function. This sets the parameter data state. | ||
| 183 | * Inputs: | ||
| 184 | * 1 : Source AppID | ||
| 185 | * 2 : Destination AppID | ||
| 186 | * 3 : Signal type | ||
| 187 | * 4 : Parameter buffer size, max size is 0x1000 (this can be zero) | ||
| 188 | * 5 : Value | ||
| 189 | * 6 : Handle to the destination process, likely used for shared memory (this can be zero) | ||
| 190 | * 7 : (Size<<14) | 2 | ||
| 191 | * 8 : Input parameter buffer ptr | ||
| 192 | * Outputs: | ||
| 193 | * 0 : Return Header | ||
| 194 | * 1 : Result of function, 0 on success, otherwise error code | ||
| 195 | */ | ||
| 196 | void SendParameter(Service::Interface* self) { | ||
| 197 | u32* cmd_buff = Kernel::GetCommandBuffer(); | ||
| 198 | u32 src_app_id = cmd_buff[1]; | ||
| 199 | u32 dst_app_id = cmd_buff[2]; | ||
| 200 | u32 signal_type = cmd_buff[3]; | ||
| 201 | u32 buffer_size = cmd_buff[4]; | ||
| 202 | u32 value = cmd_buff[5]; | ||
| 203 | u32 handle = cmd_buff[6]; | ||
| 204 | u32 size = cmd_buff[7]; | ||
| 205 | u32 in_param_buffer_ptr = cmd_buff[8]; | ||
| 206 | |||
| 207 | cmd_buff[1] = RESULT_SUCCESS.raw; // No error | ||
| 208 | |||
| 209 | LOG_WARNING(Service_APT, "(STUBBED) called src_app_id=0x%08X, dst_app_id=0x%08X, signal_type=0x%08X," | ||
| 210 | "buffer_size=0x%08X, value=0x%08X, handle=0x%08X, size=0x%08X, in_param_buffer_ptr=0x%08X", | ||
| 211 | src_app_id, dst_app_id, signal_type, buffer_size, value, handle, size, in_param_buffer_ptr); | ||
| 212 | } | ||
| 213 | |||
| 214 | /** | ||
| 108 | * APT_U::ReceiveParameter service function. This returns the current parameter data from NS state, | 215 | * APT_U::ReceiveParameter service function. This returns the current parameter data from NS state, |
| 109 | * from the source process which set the parameters. Once finished, NS will clear a flag in the NS | 216 | * from the source process which set the parameters. Once finished, NS will clear a flag in the NS |
| 110 | * state so that this command will return an error if this command is used again if parameters were | 217 | * state so that this command will return an error if this command is used again if parameters were |
| @@ -115,8 +222,8 @@ void InquireNotification(Service::Interface* self) { | |||
| 115 | * 2 : Parameter buffer size, max size is 0x1000 | 222 | * 2 : Parameter buffer size, max size is 0x1000 |
| 116 | * Outputs: | 223 | * Outputs: |
| 117 | * 1 : Result of function, 0 on success, otherwise error code | 224 | * 1 : Result of function, 0 on success, otherwise error code |
| 118 | * 2 : Unknown, for now assume AppID of the process which sent these parameters | 225 | * 2 : AppID of the process which sent these parameters |
| 119 | * 3 : Unknown, for now assume Signal type | 226 | * 3 : Signal type |
| 120 | * 4 : Actual parameter buffer size, this is <= to the the input size | 227 | * 4 : Actual parameter buffer size, this is <= to the the input size |
| 121 | * 5 : Value | 228 | * 5 : Value |
| 122 | * 6 : Handle from the source process which set the parameters, likely used for shared memory | 229 | * 6 : Handle from the source process which set the parameters, likely used for shared memory |
| @@ -127,7 +234,7 @@ void ReceiveParameter(Service::Interface* self) { | |||
| 127 | u32* cmd_buff = Kernel::GetCommandBuffer(); | 234 | u32* cmd_buff = Kernel::GetCommandBuffer(); |
| 128 | u32 app_id = cmd_buff[1]; | 235 | u32 app_id = cmd_buff[1]; |
| 129 | u32 buffer_size = cmd_buff[2]; | 236 | u32 buffer_size = cmd_buff[2]; |
| 130 | cmd_buff[1] = 0; // No error | 237 | cmd_buff[1] = RESULT_SUCCESS.raw; // No error |
| 131 | cmd_buff[2] = 0; | 238 | cmd_buff[2] = 0; |
| 132 | cmd_buff[3] = static_cast<u32>(SignalType::AppJustStarted); // Signal type | 239 | cmd_buff[3] = static_cast<u32>(SignalType::AppJustStarted); // Signal type |
| 133 | cmd_buff[4] = 0x10; // Parameter buffer size (16) | 240 | cmd_buff[4] = 0x10; // Parameter buffer size (16) |
| @@ -159,7 +266,7 @@ void GlanceParameter(Service::Interface* self) { | |||
| 159 | u32 app_id = cmd_buff[1]; | 266 | u32 app_id = cmd_buff[1]; |
| 160 | u32 buffer_size = cmd_buff[2]; | 267 | u32 buffer_size = cmd_buff[2]; |
| 161 | 268 | ||
| 162 | cmd_buff[1] = 0; // No error | 269 | cmd_buff[1] = RESULT_SUCCESS.raw; // No error |
| 163 | cmd_buff[2] = 0; | 270 | cmd_buff[2] = 0; |
| 164 | cmd_buff[3] = static_cast<u32>(SignalType::AppJustStarted); // Signal type | 271 | cmd_buff[3] = static_cast<u32>(SignalType::AppJustStarted); // Signal type |
| 165 | cmd_buff[4] = 0x10; // Parameter buffer size (16) | 272 | cmd_buff[4] = 0x10; // Parameter buffer size (16) |
| @@ -171,6 +278,36 @@ void GlanceParameter(Service::Interface* self) { | |||
| 171 | } | 278 | } |
| 172 | 279 | ||
| 173 | /** | 280 | /** |
| 281 | * APT_U::CancelParameter service function. When the parameter data is available, and when the above | ||
| 282 | * specified fields match the ones in NS state(for the ones where the checks are enabled), this | ||
| 283 | * clears the flag which indicates that parameter data is available | ||
| 284 | * (same flag cleared by APT:ReceiveParameter). | ||
| 285 | * Inputs: | ||
| 286 | * 1 : Flag, when non-zero NS will compare the word after this one with a field in the NS state. | ||
| 287 | * 2 : Unknown, this is the same as the first unknown field returned by APT:ReceiveParameter. | ||
| 288 | * 3 : Flag, when non-zero NS will compare the word after this one with a field in the NS state. | ||
| 289 | * 4 : AppID | ||
| 290 | * Outputs: | ||
| 291 | * 0 : Return header | ||
| 292 | * 1 : Result of function, 0 on success, otherwise error code | ||
| 293 | * 2 : Status flag, 0 = failure due to no parameter data being available, or the above enabled | ||
| 294 | * fields don't match the fields in NS state. 1 = success. | ||
| 295 | */ | ||
| 296 | void CancelParameter(Service::Interface* self) { | ||
| 297 | u32* cmd_buff = Kernel::GetCommandBuffer(); | ||
| 298 | u32 flag1 = cmd_buff[1]; | ||
| 299 | u32 unk = cmd_buff[2]; | ||
| 300 | u32 flag2 = cmd_buff[3]; | ||
| 301 | u32 app_id = cmd_buff[4]; | ||
| 302 | |||
| 303 | cmd_buff[1] = RESULT_SUCCESS.raw; // No error | ||
| 304 | cmd_buff[2] = 1; // Set to Success | ||
| 305 | |||
| 306 | LOG_WARNING(Service_APT, "(STUBBED) called flag1=0x%08X, unk=0x%08X, flag2=0x%08X, app_id=0x%08X", | ||
| 307 | flag1, unk, flag2, app_id); | ||
| 308 | } | ||
| 309 | |||
| 310 | /** | ||
| 174 | * APT_U::AppletUtility service function | 311 | * APT_U::AppletUtility service function |
| 175 | * Inputs: | 312 | * Inputs: |
| 176 | * 1 : Unknown, but clearly used for something | 313 | * 1 : Unknown, but clearly used for something |
| @@ -191,7 +328,7 @@ void AppletUtility(Service::Interface* self) { | |||
| 191 | u32 buffer1_addr = cmd_buff[5]; | 328 | u32 buffer1_addr = cmd_buff[5]; |
| 192 | u32 buffer2_addr = cmd_buff[65]; | 329 | u32 buffer2_addr = cmd_buff[65]; |
| 193 | 330 | ||
| 194 | cmd_buff[1] = 0; // No error | 331 | cmd_buff[1] = RESULT_SUCCESS.raw; // No error |
| 195 | 332 | ||
| 196 | LOG_WARNING(Service_APT, "(STUBBED) called unk=0x%08X, buffer1_size=0x%08x, buffer2_size=0x%08x, " | 333 | LOG_WARNING(Service_APT, "(STUBBED) called unk=0x%08X, buffer1_size=0x%08x, buffer2_size=0x%08x, " |
| 197 | "buffer1_addr=0x%08x, buffer2_addr=0x%08x", unk, buffer1_size, buffer2_size, | 334 | "buffer1_addr=0x%08x, buffer2_addr=0x%08x", unk, buffer1_size, buffer2_size, |
| @@ -215,7 +352,7 @@ void GetSharedFont(Service::Interface* self) { | |||
| 215 | memcpy(Memory::GetPointer(SHARED_FONT_VADDR), shared_font.data(), shared_font.size()); | 352 | memcpy(Memory::GetPointer(SHARED_FONT_VADDR), shared_font.data(), shared_font.size()); |
| 216 | 353 | ||
| 217 | cmd_buff[0] = 0x00440082; | 354 | cmd_buff[0] = 0x00440082; |
| 218 | cmd_buff[1] = 0; // No error | 355 | cmd_buff[1] = RESULT_SUCCESS.raw; // No error |
| 219 | cmd_buff[2] = SHARED_FONT_VADDR; | 356 | cmd_buff[2] = SHARED_FONT_VADDR; |
| 220 | cmd_buff[4] = shared_font_mem; | 357 | cmd_buff[4] = shared_font_mem; |
| 221 | } else { | 358 | } else { |
| @@ -224,87 +361,135 @@ void GetSharedFont(Service::Interface* self) { | |||
| 224 | } | 361 | } |
| 225 | } | 362 | } |
| 226 | 363 | ||
| 364 | /** | ||
| 365 | * APT_U::SetAppCpuTimeLimit service function | ||
| 366 | * Inputs: | ||
| 367 | * 1 : Value, must be one | ||
| 368 | * 2 : Percentage of CPU time from 5 to 80 | ||
| 369 | * Outputs: | ||
| 370 | * 1 : Result of function, 0 on success, otherwise error code | ||
| 371 | */ | ||
| 372 | void SetAppCpuTimeLimit(Service::Interface* self) { | ||
| 373 | u32* cmd_buff = Kernel::GetCommandBuffer(); | ||
| 374 | u32 value = cmd_buff[1]; | ||
| 375 | u32 percent = cmd_buff[2]; | ||
| 376 | |||
| 377 | if (value != 1) { | ||
| 378 | LOG_ERROR(Service_APT, "This value must be one!", value); | ||
| 379 | } | ||
| 380 | |||
| 381 | cmd_buff[1] = RESULT_SUCCESS.raw; // No error | ||
| 382 | |||
| 383 | LOG_WARNING(Service_APT, "(STUBBED) called percent=0x%08X, value=0x%08x", percent, value); | ||
| 384 | } | ||
| 385 | |||
| 386 | /** | ||
| 387 | * APT_U::GetAppCpuTimeLimit service function | ||
| 388 | * Inputs: | ||
| 389 | * 1 : Value, must be one | ||
| 390 | * Outputs: | ||
| 391 | * 0 : Return header | ||
| 392 | * 1 : Result of function, 0 on success, otherwise error code | ||
| 393 | * 2 : System core CPU time percentage | ||
| 394 | */ | ||
| 395 | void GetAppCpuTimeLimit(Service::Interface* self) { | ||
| 396 | u32* cmd_buff = Kernel::GetCommandBuffer(); | ||
| 397 | u32 value = cmd_buff[1]; | ||
| 398 | |||
| 399 | if (value != 1) { | ||
| 400 | LOG_ERROR(Service_APT, "This value must be one!", value); | ||
| 401 | } | ||
| 402 | |||
| 403 | // TODO(purpasmart96): This is incorrect, I'm pretty sure the percentage should | ||
| 404 | // be set by the application. | ||
| 405 | |||
| 406 | cmd_buff[1] = RESULT_SUCCESS.raw; // No error | ||
| 407 | cmd_buff[2] = 0x80; // Set to 80% | ||
| 408 | |||
| 409 | LOG_WARNING(Service_APT, "(STUBBED) called value=0x%08x", value); | ||
| 410 | } | ||
| 411 | |||
| 227 | const Interface::FunctionInfo FunctionTable[] = { | 412 | const Interface::FunctionInfo FunctionTable[] = { |
| 228 | {0x00010040, GetLockHandle, "GetLockHandle"}, | 413 | {0x00010040, GetLockHandle, "GetLockHandle"}, |
| 229 | {0x00020080, Initialize, "Initialize"}, | 414 | {0x00020080, Initialize, "Initialize"}, |
| 230 | {0x00030040, Enable, "Enable"}, | 415 | {0x00030040, Enable, "Enable"}, |
| 231 | {0x00040040, nullptr, "Finalize"}, | 416 | {0x00040040, nullptr, "Finalize"}, |
| 232 | {0x00050040, nullptr, "GetAppletManInfo"}, | 417 | {0x00050040, GetAppletManInfo, "GetAppletManInfo"}, |
| 233 | {0x00060040, nullptr, "GetAppletInfo"}, | 418 | {0x00060040, nullptr, "GetAppletInfo"}, |
| 234 | {0x00070000, nullptr, "GetLastSignaledAppletId"}, | 419 | {0x00070000, nullptr, "GetLastSignaledAppletId"}, |
| 235 | {0x00080000, nullptr, "CountRegisteredApplet"}, | 420 | {0x00080000, nullptr, "CountRegisteredApplet"}, |
| 236 | {0x00090040, nullptr, "IsRegistered"}, | 421 | {0x00090040, IsRegistered, "IsRegistered"}, |
| 237 | {0x000A0040, nullptr, "GetAttribute"}, | 422 | {0x000A0040, nullptr, "GetAttribute"}, |
| 238 | {0x000B0040, InquireNotification, "InquireNotification"}, | 423 | {0x000B0040, InquireNotification, "InquireNotification"}, |
| 239 | {0x000C0104, nullptr, "SendParameter"}, | 424 | {0x000C0104, SendParameter, "SendParameter"}, |
| 240 | {0x000D0080, ReceiveParameter, "ReceiveParameter"}, | 425 | {0x000D0080, ReceiveParameter, "ReceiveParameter"}, |
| 241 | {0x000E0080, GlanceParameter, "GlanceParameter"}, | 426 | {0x000E0080, GlanceParameter, "GlanceParameter"}, |
| 242 | {0x000F0100, nullptr, "CancelParameter"}, | 427 | {0x000F0100, CancelParameter, "CancelParameter"}, |
| 243 | {0x001000C2, nullptr, "DebugFunc"}, | 428 | {0x001000C2, nullptr, "DebugFunc"}, |
| 244 | {0x001100C0, nullptr, "MapProgramIdForDebug"}, | 429 | {0x001100C0, nullptr, "MapProgramIdForDebug"}, |
| 245 | {0x00120040, nullptr, "SetHomeMenuAppletIdForDebug"}, | 430 | {0x00120040, nullptr, "SetHomeMenuAppletIdForDebug"}, |
| 246 | {0x00130000, nullptr, "GetPreparationState"}, | 431 | {0x00130000, nullptr, "GetPreparationState"}, |
| 247 | {0x00140040, nullptr, "SetPreparationState"}, | 432 | {0x00140040, nullptr, "SetPreparationState"}, |
| 248 | {0x00150140, nullptr, "PrepareToStartApplication"}, | 433 | {0x00150140, nullptr, "PrepareToStartApplication"}, |
| 249 | {0x00160040, nullptr, "PreloadLibraryApplet"}, | 434 | {0x00160040, nullptr, "PreloadLibraryApplet"}, |
| 250 | {0x00170040, nullptr, "FinishPreloadingLibraryApplet"}, | 435 | {0x00170040, nullptr, "FinishPreloadingLibraryApplet"}, |
| 251 | {0x00180040, nullptr, "PrepareToStartLibraryApplet"}, | 436 | {0x00180040, nullptr, "PrepareToStartLibraryApplet"}, |
| 252 | {0x00190040, nullptr, "PrepareToStartSystemApplet"}, | 437 | {0x00190040, nullptr, "PrepareToStartSystemApplet"}, |
| 253 | {0x001A0000, nullptr, "PrepareToStartNewestHomeMenu"}, | 438 | {0x001A0000, nullptr, "PrepareToStartNewestHomeMenu"}, |
| 254 | {0x001B00C4, nullptr, "StartApplication"}, | 439 | {0x001B00C4, nullptr, "StartApplication"}, |
| 255 | {0x001C0000, nullptr, "WakeupApplication"}, | 440 | {0x001C0000, nullptr, "WakeupApplication"}, |
| 256 | {0x001D0000, nullptr, "CancelApplication"}, | 441 | {0x001D0000, nullptr, "CancelApplication"}, |
| 257 | {0x001E0084, nullptr, "StartLibraryApplet"}, | 442 | {0x001E0084, nullptr, "StartLibraryApplet"}, |
| 258 | {0x001F0084, nullptr, "StartSystemApplet"}, | 443 | {0x001F0084, nullptr, "StartSystemApplet"}, |
| 259 | {0x00200044, nullptr, "StartNewestHomeMenu"}, | 444 | {0x00200044, nullptr, "StartNewestHomeMenu"}, |
| 260 | {0x00210000, nullptr, "OrderToCloseApplication"}, | 445 | {0x00210000, nullptr, "OrderToCloseApplication"}, |
| 261 | {0x00220040, nullptr, "PrepareToCloseApplication"}, | 446 | {0x00220040, nullptr, "PrepareToCloseApplication"}, |
| 262 | {0x00230040, nullptr, "PrepareToJumpToApplication"}, | 447 | {0x00230040, nullptr, "PrepareToJumpToApplication"}, |
| 263 | {0x00240044, nullptr, "JumpToApplication"}, | 448 | {0x00240044, nullptr, "JumpToApplication"}, |
| 264 | {0x002500C0, nullptr, "PrepareToCloseLibraryApplet"}, | 449 | {0x002500C0, nullptr, "PrepareToCloseLibraryApplet"}, |
| 265 | {0x00260000, nullptr, "PrepareToCloseSystemApplet"}, | 450 | {0x00260000, nullptr, "PrepareToCloseSystemApplet"}, |
| 266 | {0x00270044, nullptr, "CloseApplication"}, | 451 | {0x00270044, nullptr, "CloseApplication"}, |
| 267 | {0x00280044, nullptr, "CloseLibraryApplet"}, | 452 | {0x00280044, nullptr, "CloseLibraryApplet"}, |
| 268 | {0x00290044, nullptr, "CloseSystemApplet"}, | 453 | {0x00290044, nullptr, "CloseSystemApplet"}, |
| 269 | {0x002A0000, nullptr, "OrderToCloseSystemApplet"}, | 454 | {0x002A0000, nullptr, "OrderToCloseSystemApplet"}, |
| 270 | {0x002B0000, nullptr, "PrepareToJumpToHomeMenu"}, | 455 | {0x002B0000, nullptr, "PrepareToJumpToHomeMenu"}, |
| 271 | {0x002C0044, nullptr, "JumpToHomeMenu"}, | 456 | {0x002C0044, nullptr, "JumpToHomeMenu"}, |
| 272 | {0x002D0000, nullptr, "PrepareToLeaveHomeMenu"}, | 457 | {0x002D0000, nullptr, "PrepareToLeaveHomeMenu"}, |
| 273 | {0x002E0044, nullptr, "LeaveHomeMenu"}, | 458 | {0x002E0044, nullptr, "LeaveHomeMenu"}, |
| 274 | {0x002F0040, nullptr, "PrepareToLeaveResidentApplet"}, | 459 | {0x002F0040, nullptr, "PrepareToLeaveResidentApplet"}, |
| 275 | {0x00300044, nullptr, "LeaveResidentApplet"}, | 460 | {0x00300044, nullptr, "LeaveResidentApplet"}, |
| 276 | {0x00310100, nullptr, "PrepareToDoApplicationJump"}, | 461 | {0x00310100, nullptr, "PrepareToDoApplicationJump"}, |
| 277 | {0x00320084, nullptr, "DoApplicationJump"}, | 462 | {0x00320084, nullptr, "DoApplicationJump"}, |
| 278 | {0x00330000, nullptr, "GetProgramIdOnApplicationJump"}, | 463 | {0x00330000, nullptr, "GetProgramIdOnApplicationJump"}, |
| 279 | {0x00340084, nullptr, "SendDeliverArg"}, | 464 | {0x00340084, nullptr, "SendDeliverArg"}, |
| 280 | {0x00350080, nullptr, "ReceiveDeliverArg"}, | 465 | {0x00350080, nullptr, "ReceiveDeliverArg"}, |
| 281 | {0x00360040, nullptr, "LoadSysMenuArg"}, | 466 | {0x00360040, nullptr, "LoadSysMenuArg"}, |
| 282 | {0x00370042, nullptr, "StoreSysMenuArg"}, | 467 | {0x00370042, nullptr, "StoreSysMenuArg"}, |
| 283 | {0x00380040, nullptr, "PreloadResidentApplet"}, | 468 | {0x00380040, nullptr, "PreloadResidentApplet"}, |
| 284 | {0x00390040, nullptr, "PrepareToStartResidentApplet"}, | 469 | {0x00390040, nullptr, "PrepareToStartResidentApplet"}, |
| 285 | {0x003A0044, nullptr, "StartResidentApplet"}, | 470 | {0x003A0044, nullptr, "StartResidentApplet"}, |
| 286 | {0x003B0040, nullptr, "CancelLibraryApplet"}, | 471 | {0x003B0040, nullptr, "CancelLibraryApplet"}, |
| 287 | {0x003C0042, nullptr, "SendDspSleep"}, | 472 | {0x003C0042, nullptr, "SendDspSleep"}, |
| 288 | {0x003D0042, nullptr, "SendDspWakeUp"}, | 473 | {0x003D0042, nullptr, "SendDspWakeUp"}, |
| 289 | {0x003E0080, nullptr, "ReplySleepQuery"}, | 474 | {0x003E0080, nullptr, "ReplySleepQuery"}, |
| 290 | {0x003F0040, nullptr, "ReplySleepNotificationComplete"}, | 475 | {0x003F0040, nullptr, "ReplySleepNotificationComplete"}, |
| 291 | {0x00400042, nullptr, "SendCaptureBufferInfo"}, | 476 | {0x00400042, nullptr, "SendCaptureBufferInfo"}, |
| 292 | {0x00410040, nullptr, "ReceiveCaptureBufferInfo"}, | 477 | {0x00410040, nullptr, "ReceiveCaptureBufferInfo"}, |
| 293 | {0x00420080, nullptr, "SleepSystem"}, | 478 | {0x00420080, nullptr, "SleepSystem"}, |
| 294 | {0x00430040, NotifyToWait, "NotifyToWait"}, | 479 | {0x00430040, NotifyToWait, "NotifyToWait"}, |
| 295 | {0x00440000, GetSharedFont, "GetSharedFont"}, | 480 | {0x00440000, GetSharedFont, "GetSharedFont"}, |
| 296 | {0x00450040, nullptr, "GetWirelessRebootInfo"}, | 481 | {0x00450040, nullptr, "GetWirelessRebootInfo"}, |
| 297 | {0x00460104, nullptr, "Wrap"}, | 482 | {0x00460104, nullptr, "Wrap"}, |
| 298 | {0x00470104, nullptr, "Unwrap"}, | 483 | {0x00470104, nullptr, "Unwrap"}, |
| 299 | {0x00480100, nullptr, "GetProgramInfo"}, | 484 | {0x00480100, nullptr, "GetProgramInfo"}, |
| 300 | {0x00490180, nullptr, "Reboot"}, | 485 | {0x00490180, nullptr, "Reboot"}, |
| 301 | {0x004A0040, nullptr, "GetCaptureInfo"}, | 486 | {0x004A0040, nullptr, "GetCaptureInfo"}, |
| 302 | {0x004B00C2, AppletUtility, "AppletUtility"}, | 487 | {0x004B00C2, AppletUtility, "AppletUtility"}, |
| 303 | {0x004C0000, nullptr, "SetFatalErrDispMode"}, | 488 | {0x004C0000, nullptr, "SetFatalErrDispMode"}, |
| 304 | {0x004D0080, nullptr, "GetAppletProgramInfo"}, | 489 | {0x004D0080, nullptr, "GetAppletProgramInfo"}, |
| 305 | {0x004E0000, nullptr, "HardwareResetAsync"}, | 490 | {0x004E0000, nullptr, "HardwareResetAsync"}, |
| 306 | {0x004F0080, nullptr, "SetApplicationCpuTimeLimit"}, | 491 | {0x004F0080, SetAppCpuTimeLimit, "SetAppCpuTimeLimit"}, |
| 307 | {0x00500040, nullptr, "GetApplicationCpuTimeLimit"}, | 492 | {0x00500040, GetAppCpuTimeLimit, "GetAppCpuTimeLimit"}, |
| 308 | }; | 493 | }; |
| 309 | 494 | ||
| 310 | //////////////////////////////////////////////////////////////////////////////////////////////////// | 495 | //////////////////////////////////////////////////////////////////////////////////////////////////// |