summaryrefslogtreecommitdiff
path: root/src/core/hle
diff options
context:
space:
mode:
Diffstat (limited to 'src/core/hle')
-rw-r--r--src/core/hle/service/apt_u.cpp367
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
45enum 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
44void Initialize(Service::Interface* self) { 67void 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 */
62void NotifyToWait(Service::Interface* self) { 92void 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
71void GetLockHandle(Service::Interface* self) { 102void 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) {
92void Enable(Service::Interface* self) { 123void 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 */
141void 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 */
165void 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
99void InquireNotification(Service::Interface* self) { 173void 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*/
196void 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 */
296void 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 */
372void 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 */
395void 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
227const Interface::FunctionInfo FunctionTable[] = { 412const 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////////////////////////////////////////////////////////////////////////////////////////////////////