2014-09-21 03:30:00 -07:00

606 lines
22 KiB
C++

// Copyright 2014 Citra Emulator Project
// Licensed under GPLv2
// Refer to the license.txt file included.
#include "common/common.h"
#include "core/hle/hle.h"
#include "core/hle/kernel/event.h"
#include "core/hle/kernel/mutex.h"
#include "core/hle/service/apt.h"
////////////////////////////////////////////////////////////////////////////////////////////////////
// Namespace APT_U
namespace APT_U {
/// Signals used by APT functions
enum class SignalType : u32 {
None = 0x0,
AppJustStarted = 0x1,
ReturningToApp = 0xB,
ExitingApp = 0xC,
};
void Initialize(Service::Interface* self) {
u32* cmd_buff = Service::GetCommandBuffer();
cmd_buff[3] = Kernel::CreateEvent(RESETTYPE_ONESHOT, "APT_U:Menu"); // APT menu event handle
cmd_buff[4] = Kernel::CreateEvent(RESETTYPE_ONESHOT, "APT_U:Pause"); // APT pause event handle
Kernel::SetEventLocked(cmd_buff[3], true);
Kernel::SetEventLocked(cmd_buff[4], false); // Fire start event
cmd_buff[1] = 0; // No error
DEBUG_LOG(KERNEL, "called");
}
void GetLockHandle(Service::Interface* self) {
u32* cmd_buff = Service::GetCommandBuffer();
u32 flags = cmd_buff[1]; // TODO(bunnei): Figure out the purpose of the flag field
cmd_buff[1] = 0; // No error
cmd_buff[5] = Kernel::CreateMutex(false, "APT_U:Lock");
DEBUG_LOG(KERNEL, "called handle=0x%08X", cmd_buff[5]);
}
void Enable(Service::Interface* self) {
u32* cmd_buff = Service::GetCommandBuffer();
u32 unk = cmd_buff[1]; // TODO(bunnei): What is this field used for?
cmd_buff[1] = 0; // No error
WARN_LOG(KERNEL, "(STUBBED) called unk=0x%08X", unk);
}
void Finalize(Service::Interface* self) {
u32* cmd_buff = Service::GetCommandBuffer();
ERROR_LOG(KERNEL, "Unimplemented function");
cmd_buff[1] = 0; // No error
}
void GetAppletManInfo(Service::Interface* self) {
u32* cmd_buff = Service::GetCommandBuffer();
ERROR_LOG(KERNEL, "Unimplemented function");
cmd_buff[1] = 0; // No error
}
void GetAppletInfo(Service::Interface* self) {
u32* cmd_buff = Service::GetCommandBuffer();
ERROR_LOG(KERNEL, "Unimplemented function");
cmd_buff[1] = 0; // No error
}
void GetLastSignaledAppletId(Service::Interface* self) {
u32* cmd_buff = Service::GetCommandBuffer();
ERROR_LOG(KERNEL, "Unimplemented function");
cmd_buff[1] = 0; // No error
}
void CountRegisteredApplet(Service::Interface* self) {
u32* cmd_buff = Service::GetCommandBuffer();
ERROR_LOG(KERNEL, "Unimplemented function");
cmd_buff[1] = 0; // No error
}
void IsRegistered(Service::Interface* self) {
u32* cmd_buff = Service::GetCommandBuffer();
ERROR_LOG(KERNEL, "Unimplemented function");
cmd_buff[1] = 0; // No error
}
void GetAttribute(Service::Interface* self) {
u32* cmd_buff = Service::GetCommandBuffer();
ERROR_LOG(KERNEL, "Unimplemented function");
cmd_buff[1] = 0; // No error
}
void InquireNotification(Service::Interface* self) {
u32* cmd_buff = Service::GetCommandBuffer();
u32 app_id = cmd_buff[2];
cmd_buff[1] = 0; // No error
cmd_buff[2] = static_cast<u32>(SignalType::None); // Signal type
WARN_LOG(KERNEL, "(STUBBED) called app_id=0x%08X", app_id);
}
void SendParameter(Service::Interface* self) {
u32* cmd_buff = Service::GetCommandBuffer();
ERROR_LOG(KERNEL, "Unimplemented function");
cmd_buff[1] = 0; // No error
}
void ReceiveParameter(Service::Interface* self) {
u32* cmd_buff = Service::GetCommandBuffer();
u32 app_id = cmd_buff[1];
u32 buffer_size = cmd_buff[2];
cmd_buff[1] = 0; // No error
cmd_buff[2] = 0;
cmd_buff[3] = static_cast<u32>(SignalType::AppJustStarted); // Signal type
cmd_buff[4] = 0x10;
cmd_buff[5] = 0;
cmd_buff[6] = 0;
cmd_buff[7] = 0;
WARN_LOG(KERNEL, "(STUBBED) called app_id=0x%08X, buffer_size=0x%08X", app_id, buffer_size);
}
void GlanceParameter(Service::Interface* self) {
u32* cmd_buff = Service::GetCommandBuffer();
ERROR_LOG(KERNEL, "Unimplemented function");
cmd_buff[1] = 0; // No error
}
void CancelParameter(Service::Interface* self) {
u32* cmd_buff = Service::GetCommandBuffer();
ERROR_LOG(KERNEL, "Unimplemented function");
cmd_buff[1] = 0; // No error
}
void DebugFunc(Service::Interface* self) {
u32* cmd_buff = Service::GetCommandBuffer();
ERROR_LOG(KERNEL, "Unimplemented function");
cmd_buff[1] = 0; // No error
}
void MapProgramIdForDebug(Service::Interface* self) {
u32* cmd_buff = Service::GetCommandBuffer();
ERROR_LOG(KERNEL, "Unimplemented function");
cmd_buff[1] = 0; // No error
}
void SetHomeMenuAppletIdForDebug(Service::Interface* self) {
u32* cmd_buff = Service::GetCommandBuffer();
ERROR_LOG(KERNEL, "Unimplemented function");
cmd_buff[1] = 0; // No error
}
void GetPreparationState(Service::Interface* self) {
u32* cmd_buff = Service::GetCommandBuffer();
ERROR_LOG(KERNEL, "Unimplemented function");
cmd_buff[1] = 0; // No error
}
void SetPreparationState(Service::Interface* self) {
u32* cmd_buff = Service::GetCommandBuffer();
ERROR_LOG(KERNEL, "Unimplemented function");
cmd_buff[1] = 0; // No error
}
void PrepareToStartApplication(Service::Interface* self) {
u32* cmd_buff = Service::GetCommandBuffer();
ERROR_LOG(KERNEL, "Unimplemented function");
cmd_buff[1] = 0; // No error
}
void PreloadLibraryApplet(Service::Interface* self) {
u32* cmd_buff = Service::GetCommandBuffer();
ERROR_LOG(KERNEL, "Unimplemented function");
cmd_buff[1] = 0; // No error
}
void FinishPreloadingLibraryApplet(Service::Interface* self) {
u32* cmd_buff = Service::GetCommandBuffer();
ERROR_LOG(KERNEL, "Unimplemented function");
cmd_buff[1] = 0; // No error
}
void PrepareToStartLibraryApplet(Service::Interface* self) {
u32* cmd_buff = Service::GetCommandBuffer();
ERROR_LOG(KERNEL, "Unimplemented function");
cmd_buff[1] = 0; // No error
}
void PrepareToStartSystemApplet(Service::Interface* self) {
u32* cmd_buff = Service::GetCommandBuffer();
ERROR_LOG(KERNEL, "Unimplemented function");
cmd_buff[1] = 0; // No error
}
void PrepareToStartNewestHomeMenu(Service::Interface* self) {
u32* cmd_buff = Service::GetCommandBuffer();
ERROR_LOG(KERNEL, "Unimplemented function");
cmd_buff[1] = 0; // No error
}
void StartApplication(Service::Interface* self) {
u32* cmd_buff = Service::GetCommandBuffer();
ERROR_LOG(KERNEL, "Unimplemented function");
cmd_buff[1] = 0; // No error
}
void WakeupApplication(Service::Interface* self) {
u32* cmd_buff = Service::GetCommandBuffer();
ERROR_LOG(KERNEL, "Unimplemented function");
cmd_buff[1] = 0; // No error
}
void CancelApplication(Service::Interface* self) {
u32* cmd_buff = Service::GetCommandBuffer();
ERROR_LOG(KERNEL, "Unimplemented function");
cmd_buff[1] = 0; // No error
}
void StartLibraryApplet(Service::Interface* self) {
u32* cmd_buff = Service::GetCommandBuffer();
ERROR_LOG(KERNEL, "Unimplemented function");
cmd_buff[1] = 0; // No error
}
void StartSystemApplet(Service::Interface* self) {
u32* cmd_buff = Service::GetCommandBuffer();
ERROR_LOG(KERNEL, "Unimplemented function");
cmd_buff[1] = 0; // No error
}
void StartNewestHomeMenu(Service::Interface* self) {
u32* cmd_buff = Service::GetCommandBuffer();
ERROR_LOG(KERNEL, "Unimplemented function");
cmd_buff[1] = 0; // No error
}
void OrderToCloseApplication(Service::Interface* self) {
u32* cmd_buff = Service::GetCommandBuffer();
ERROR_LOG(KERNEL, "Unimplemented function");
cmd_buff[1] = 0; // No error
}
void PrepareToCloseApplication(Service::Interface* self) {
u32* cmd_buff = Service::GetCommandBuffer();
ERROR_LOG(KERNEL, "Unimplemented function");
cmd_buff[1] = 0; // No error
}
void PrepareToJumpToApplication(Service::Interface* self) {
u32* cmd_buff = Service::GetCommandBuffer();
ERROR_LOG(KERNEL, "Unimplemented function");
cmd_buff[1] = 0; // No error
}
void JumpToApplication(Service::Interface* self) {
u32* cmd_buff = Service::GetCommandBuffer();
ERROR_LOG(KERNEL, "Unimplemented function");
cmd_buff[1] = 0; // No error
}
void PrepareToCloseLibraryApplet(Service::Interface* self) {
u32* cmd_buff = Service::GetCommandBuffer();
ERROR_LOG(KERNEL, "Unimplemented function");
cmd_buff[1] = 0; // No error
}
void PrepareToCloseSystemApplet(Service::Interface* self) {
u32* cmd_buff = Service::GetCommandBuffer();
ERROR_LOG(KERNEL, "Unimplemented function");
cmd_buff[1] = 0; // No error
}
void CloseApplication(Service::Interface* self) {
u32* cmd_buff = Service::GetCommandBuffer();
ERROR_LOG(KERNEL, "Unimplemented function");
cmd_buff[1] = 0; // No error
}
void CloseLibraryApplet(Service::Interface* self) {
u32* cmd_buff = Service::GetCommandBuffer();
ERROR_LOG(KERNEL, "Unimplemented function");
cmd_buff[1] = 0; // No error
}
void CloseSystemApplet(Service::Interface* self) {
u32* cmd_buff = Service::GetCommandBuffer();
ERROR_LOG(KERNEL, "Unimplemented function");
cmd_buff[1] = 0; // No error
}
void OrderToCloseSystemApplet(Service::Interface* self) {
u32* cmd_buff = Service::GetCommandBuffer();
ERROR_LOG(KERNEL, "Unimplemented function");
cmd_buff[1] = 0; // No error
}
void PrepareToJumpToHomeMenu(Service::Interface* self) {
u32* cmd_buff = Service::GetCommandBuffer();
ERROR_LOG(KERNEL, "Unimplemented function");
cmd_buff[1] = 0; // No error
}
void JumpToHomeMenu(Service::Interface* self) {
u32* cmd_buff = Service::GetCommandBuffer();
ERROR_LOG(KERNEL, "Unimplemented function");
cmd_buff[1] = 0; // No error
}
void PrepareToLeaveHomeMenu(Service::Interface* self) {
u32* cmd_buff = Service::GetCommandBuffer();
ERROR_LOG(KERNEL, "Unimplemented function");
cmd_buff[1] = 0; // No error
}
void LeaveHomeMenu(Service::Interface* self) {
u32* cmd_buff = Service::GetCommandBuffer();
ERROR_LOG(KERNEL, "Unimplemented function");
cmd_buff[1] = 0; // No error
}
void PrepareToLeaveResidentApplet(Service::Interface* self) {
u32* cmd_buff = Service::GetCommandBuffer();
ERROR_LOG(KERNEL, "Unimplemented function");
cmd_buff[1] = 0; // No error
}
void LeaveResidentApplet(Service::Interface* self) {
u32* cmd_buff = Service::GetCommandBuffer();
ERROR_LOG(KERNEL, "Unimplemented function");
cmd_buff[1] = 0; // No error
}
void PrepareToDoApplicationJump(Service::Interface* self) {
u32* cmd_buff = Service::GetCommandBuffer();
ERROR_LOG(KERNEL, "Unimplemented function");
cmd_buff[1] = 0; // No error
}
void DoApplicationJump(Service::Interface* self) {
u32* cmd_buff = Service::GetCommandBuffer();
ERROR_LOG(KERNEL, "Unimplemented function");
cmd_buff[1] = 0; // No error
}
void GetProgramIdOnApplicationJump(Service::Interface* self) {
u32* cmd_buff = Service::GetCommandBuffer();
ERROR_LOG(KERNEL, "Unimplemented function");
cmd_buff[1] = 0; // No error
}
void SendDeliverArg(Service::Interface* self) {
u32* cmd_buff = Service::GetCommandBuffer();
ERROR_LOG(KERNEL, "Unimplemented function");
cmd_buff[1] = 0; // No error
}
void ReceiveDeliverArg(Service::Interface* self) {
u32* cmd_buff = Service::GetCommandBuffer();
ERROR_LOG(KERNEL, "Unimplemented function");
cmd_buff[1] = 0; // No error
}
void LoadSysMenuArg(Service::Interface* self) {
u32* cmd_buff = Service::GetCommandBuffer();
ERROR_LOG(KERNEL, "Unimplemented function");
cmd_buff[1] = 0; // No error
}
void StoreSysMenuArg(Service::Interface* self) {
u32* cmd_buff = Service::GetCommandBuffer();
ERROR_LOG(KERNEL, "Unimplemented function");
cmd_buff[1] = 0; // No error
}
void PreloadResidentApplet(Service::Interface* self) {
u32* cmd_buff = Service::GetCommandBuffer();
ERROR_LOG(KERNEL, "Unimplemented function");
cmd_buff[1] = 0; // No error
}
void PrepareToStartResidentApplet(Service::Interface* self) {
u32* cmd_buff = Service::GetCommandBuffer();
ERROR_LOG(KERNEL, "Unimplemented function");
cmd_buff[1] = 0; // No error
}
void StartResidentApplet(Service::Interface* self) {
u32* cmd_buff = Service::GetCommandBuffer();
ERROR_LOG(KERNEL, "Unimplemented function");
cmd_buff[1] = 0; // No error
}
void CancelLibraryApplet(Service::Interface* self) {
u32* cmd_buff = Service::GetCommandBuffer();
ERROR_LOG(KERNEL, "Unimplemented function");
cmd_buff[1] = 0; // No error
}
void SendDspSleep(Service::Interface* self) {
u32* cmd_buff = Service::GetCommandBuffer();
ERROR_LOG(KERNEL, "Unimplemented function");
cmd_buff[1] = 0; // No error
}
void SendDspWakeUp(Service::Interface* self) {
u32* cmd_buff = Service::GetCommandBuffer();
ERROR_LOG(KERNEL, "Unimplemented function");
cmd_buff[1] = 0; // No error
}
void ReplySleepQuery(Service::Interface* self) {
u32* cmd_buff = Service::GetCommandBuffer();
ERROR_LOG(KERNEL, "Unimplemented function");
cmd_buff[1] = 0; // No error
}
void ReplySleepNotificationComplete(Service::Interface* self) {
u32* cmd_buff = Service::GetCommandBuffer();
ERROR_LOG(KERNEL, "Unimplemented function");
cmd_buff[1] = 0; // No error
}
void SendCaptureBufferInfo(Service::Interface* self) {
u32* cmd_buff = Service::GetCommandBuffer();
ERROR_LOG(KERNEL, "Unimplemented function");
cmd_buff[1] = 0; // No error
}
void ReceiveCaptureBufferInfo(Service::Interface* self) {
u32* cmd_buff = Service::GetCommandBuffer();
ERROR_LOG(KERNEL, "Unimplemented function");
cmd_buff[1] = 0; // No error
}
void SleepSystem(Service::Interface* self) {
u32* cmd_buff = Service::GetCommandBuffer();
ERROR_LOG(KERNEL, "Unimplemented function");
cmd_buff[1] = 0; // No error
}
void NotifyToWait(Service::Interface* self) {
u32* cmd_buff = Service::GetCommandBuffer();
ERROR_LOG(KERNEL, "Unimplemented function");
cmd_buff[1] = 0; // No error
}
void GetSharedFont(Service::Interface* self) {
u32* cmd_buff = Service::GetCommandBuffer();
ERROR_LOG(KERNEL, "Unimplemented function");
cmd_buff[1] = 0; // No error
}
void GetWirelessRebootInfo(Service::Interface* self) {
u32* cmd_buff = Service::GetCommandBuffer();
ERROR_LOG(KERNEL, "Unimplemented function");
cmd_buff[1] = 0; // No error
}
void Wrap(Service::Interface* self) {
u32* cmd_buff = Service::GetCommandBuffer();
ERROR_LOG(KERNEL, "Unimplemented function");
cmd_buff[1] = 0; // No error
}
void Unwrap(Service::Interface* self) {
u32* cmd_buff = Service::GetCommandBuffer();
ERROR_LOG(KERNEL, "Unimplemented function");
cmd_buff[1] = 0; // No error
}
void GetProgramInfo(Service::Interface* self) {
u32* cmd_buff = Service::GetCommandBuffer();
ERROR_LOG(KERNEL, "Unimplemented function");
cmd_buff[1] = 0; // No error
}
void Reboot(Service::Interface* self) {
u32* cmd_buff = Service::GetCommandBuffer();
ERROR_LOG(KERNEL, "Unimplemented function");
cmd_buff[1] = 0; // No error
}
void GetCaptureInfo(Service::Interface* self) {
u32* cmd_buff = Service::GetCommandBuffer();
ERROR_LOG(KERNEL, "Unimplemented function");
cmd_buff[1] = 0; // No error
}
void AppletUtility(Service::Interface* self) {
u32* cmd_buff = Service::GetCommandBuffer();
ERROR_LOG(KERNEL, "Unimplemented function");
cmd_buff[1] = 0; // No error
}
void SetFatalErrDispMode(Service::Interface* self) {
u32* cmd_buff = Service::GetCommandBuffer();
ERROR_LOG(KERNEL, "Unimplemented function");
cmd_buff[1] = 0; // No error
}
void GetAppletProgramInfo(Service::Interface* self) {
u32* cmd_buff = Service::GetCommandBuffer();
ERROR_LOG(KERNEL, "Unimplemented function");
cmd_buff[1] = 0; // No error
}
void HardwareResetAsync(Service::Interface* self) {
u32* cmd_buff = Service::GetCommandBuffer();
ERROR_LOG(KERNEL, "Unimplemented function");
cmd_buff[1] = 0; // No error
}
const Interface::FunctionInfo FunctionTable[] = {
{0x00010040, GetLockHandle, "GetLockHandle"},
{0x00020080, Initialize, "Initialize"},
{0x00030040, Enable, "Enable"},
{0x00040040, Finalize, "Finalize"},
{0x00050040, GetAppletManInfo, "GetAppletManInfo"},
{0x00060040, GetAppletInfo, "GetAppletInfo"},
{0x00070000, GetLastSignaledAppletId, "GetLastSignaledAppletId"},
{0x00080000, CountRegisteredApplet, "CountRegisteredApplet"},
{0x00090040, IsRegistered, "IsRegistered"},
{0x000A0040, GetAttribute, "GetAttribute"},
{0x000B0040, InquireNotification, "InquireNotification"},
{0x000C0104, SendParameter, "SendParameter"},
{0x000D0080, ReceiveParameter, "ReceiveParameter"},
{0x000E0080, GlanceParameter, "GlanceParameter"},
{0x000F0100, CancelParameter, "CancelParameter"},
{0x001000C2, DebugFunc, "DebugFunc"},
{0x001100C0, MapProgramIdForDebug, "MapProgramIdForDebug"},
{0x00120040, SetHomeMenuAppletIdForDebug, "SetHomeMenuAppletIdForDebug"},
{0x00130000, GetPreparationState, "GetPreparationState"},
{0x00140040, SetPreparationState, "SetPreparationState"},
{0x00150140, PrepareToStartApplication, "PrepareToStartApplication"},
{0x00160040, PreloadLibraryApplet, "PreloadLibraryApplet"},
{0x00170040, FinishPreloadingLibraryApplet, "FinishPreloadingLibraryApplet"},
{0x00180040, PrepareToStartLibraryApplet, "PrepareToStartLibraryApplet"},
{0x00190040, PrepareToStartSystemApplet, "PrepareToStartSystemApplet"},
{0x001A0000, PrepareToStartNewestHomeMenu, "PrepareToStartNewestHomeMenu"},
{0x001B00C4, StartApplication, "StartApplication"},
{0x001C0000, WakeupApplication, "WakeupApplication"},
{0x001D0000, CancelApplication, "CancelApplication"},
{0x001E0084, StartLibraryApplet, "StartLibraryApplet"},
{0x001F0084, StartSystemApplet, "StartSystemApplet"},
{0x00200044, StartNewestHomeMenu, "StartNewestHomeMenu"},
{0x00210000, OrderToCloseApplication, "OrderToCloseApplication"},
{0x00220040, PrepareToCloseApplication, "PrepareToCloseApplication"},
{0x00230040, PrepareToJumpToApplication, "PrepareToJumpToApplication"},
{0x00240044, JumpToApplication, "JumpToApplication"},
{0x002500C0, PrepareToCloseLibraryApplet, "PrepareToCloseLibraryApplet"},
{0x00260000, PrepareToCloseSystemApplet, "PrepareToCloseSystemApplet"},
{0x00270044, CloseApplication, "CloseApplication"},
{0x00280044, CloseLibraryApplet, "CloseLibraryApplet"},
{0x00290044, CloseSystemApplet, "CloseSystemApplet"},
{0x002A0000, OrderToCloseSystemApplet, "OrderToCloseSystemApplet"},
{0x002B0000, PrepareToJumpToHomeMenu, "PrepareToJumpToHomeMenu"},
{0x002C0044, JumpToHomeMenu, "JumpToHomeMenu"},
{0x002D0000, PrepareToLeaveHomeMenu, "PrepareToLeaveHomeMenu"},
{0x002E0044, LeaveHomeMenu, "LeaveHomeMenu"},
{0x002F0040, PrepareToLeaveResidentApplet, "PrepareToLeaveResidentApplet"},
{0x00300044, LeaveResidentApplet, "LeaveResidentApplet"},
{0x00310100, PrepareToDoApplicationJump, "PrepareToDoApplicationJump"},
{0x00320084, DoApplicationJump, "DoApplicationJump"},
{0x00330000, GetProgramIdOnApplicationJump, "GetProgramIdOnApplicationJump"},
{0x00340084, SendDeliverArg, "SendDeliverArg"},
{0x00350080, ReceiveDeliverArg, "ReceiveDeliverArg"},
{0x00360040, LoadSysMenuArg, "LoadSysMenuArg"},
{0x00370042, StoreSysMenuArg, "StoreSysMenuArg"},
{0x00380040, PreloadResidentApplet, "PreloadResidentApplet"},
{0x00390040, PrepareToStartResidentApplet, "PrepareToStartResidentApplet"},
{0x003A0044, StartResidentApplet, "StartResidentApplet"},
{0x003B0040, CancelLibraryApplet, "CancelLibraryApplet"},
{0x003C0042, SendDspSleep, "SendDspSleep"},
{0x003D0042, SendDspWakeUp, "SendDspWakeUp"},
{0x003E0080, ReplySleepQuery, "ReplySleepQuery"},
{0x003F0040, ReplySleepNotificationComplete, "ReplySleepNotificationComplete"},
{0x00400042, SendCaptureBufferInfo, "SendCaptureBufferInfo"},
{0x00410040, ReceiveCaptureBufferInfo, "ReceiveCaptureBufferInfo"},
{0x00420080, SleepSystem, "SleepSystem"},
{0x00430040, NotifyToWait, "NotifyToWait"},
{0x00440000, GetSharedFont, "GetSharedFont"},
{0x00450040, GetWirelessRebootInfo, "GetWirelessRebootInfo"},
{0x00460104, Wrap, "Wrap"},
{0x00470104, Unwrap, "Unwrap"},
{0x00480100, GetProgramInfo, "GetProgramInfo"},
{0x00490180, Reboot, "Reboot"},
{0x004A0040, GetCaptureInfo, "GetCaptureInfo"},
{0x004B00C2, AppletUtility, "AppletUtility"},
{0x004C0000, SetFatalErrDispMode, "SetFatalErrDispMode"},
{0x004D0080, GetAppletProgramInfo, "GetAppletProgramInfo"},
{0x004E0000, HardwareResetAsync, "HardwareResetAsync"},
};
////////////////////////////////////////////////////////////////////////////////////////////////////
// Interface class
Interface::Interface() {
Register(FunctionTable, ARRAY_SIZE(FunctionTable));
}
Interface::~Interface() {
}
} // namespace