implement more APIs

This commit is contained in:
InoriRus
2022-04-08 20:41:59 +10:00
parent d4c640462f
commit 1d43b81773
42 changed files with 2146 additions and 109 deletions
+30
View File
@@ -0,0 +1,30 @@
#include "Emulator/Audio.h"
#include "Emulator/Common.h"
#include "Emulator/Libs/Libs.h"
#include "Emulator/SymbolDatabase.h"
#ifdef KYTY_EMU_ENABLED
namespace Kyty::Libs {
namespace LibVoiceQoS {
LIB_VERSION("VoiceQoS", 1, "VoiceQoS", 0, 0);
namespace VoiceQoS = Audio::VoiceQoS;
LIB_DEFINE(InitAudio_1_VoiceQoS)
{
LIB_FUNC("U8IfNl6-Css", VoiceQoS::VoiceQoSInit);
}
} // namespace LibVoiceQoS
LIB_DEFINE(InitAudio_1)
{
LibVoiceQoS::InitAudio_1_VoiceQoS(s);
}
} // namespace Kyty::Libs
#endif // KYTY_EMU_ENABLED
+30
View File
@@ -0,0 +1,30 @@
#include "Emulator/Common.h"
#include "Emulator/Dialog.h"
#include "Emulator/Libs/Libs.h"
#include "Emulator/SymbolDatabase.h"
#ifdef KYTY_EMU_ENABLED
namespace Kyty::Libs {
namespace LibCommonDialog {
LIB_VERSION("CommonDialog", 1, "CommonDialog", 1, 1);
namespace CommonDialog = Dialog::CommonDialog;
LIB_DEFINE(InitDialog_1_CommonDialog)
{
LIB_FUNC("uoUpLGNkygk", CommonDialog::CommonDialogInitialize);
}
} // namespace LibCommonDialog
LIB_DEFINE(InitDialog_1)
{
LibCommonDialog::InitDialog_1_CommonDialog(s);
}
} // namespace Kyty::Libs
#endif // KYTY_EMU_ENABLED
+15
View File
@@ -122,6 +122,17 @@ static KYTY_SYSV_ABI void stack_chk_fail()
EXIT("stack fail!!!");
}
static KYTY_SYSV_ABI int sigprocmask(int /*how*/, const void* /*set*/, void* /*oset*/)
{
// PRINT_NAME();
// printf("\t how = %d\n", how);
// printf("\t set = %016" PRIx64 "\n", reinterpret_cast<uint64_t>(set));
// printf("\t oset = %016" PRIx64 "\n", reinterpret_cast<uint64_t>(oset));
return 0;
}
static KYTY_SYSV_ABI KernelModule KernelLoadStartModule(const char* module_file_name, size_t args, const void* argp, uint32_t flags,
const KernelLoadModuleOpt* opt, int* res)
{
@@ -511,6 +522,9 @@ LIB_DEFINE(InitLibKernel_1_Pthread)
LIB_FUNC("8+s5BzZjxSg", LibKernel::PthreadAttrGetaffinity);
LIB_FUNC("nsYoNRywwNg", LibKernel::PthreadAttrInit);
LIB_FUNC("JaRMy+QcpeU", LibKernel::PthreadAttrGetdetachstate);
LIB_FUNC("Ru36fiTtJzA", LibKernel::PthreadAttrGetstackaddr);
LIB_FUNC("-fA+7ZlGDQs", LibKernel::PthreadAttrGetstacksize);
LIB_FUNC("txHtngJ+eyc", LibKernel::PthreadAttrGetguardsize);
LIB_FUNC("UTXzJbWhhTE", LibKernel::PthreadAttrSetstacksize);
LIB_FUNC("-Wreprtu0Qs", LibKernel::PthreadAttrSetdetachstate);
LIB_FUNC("eXbUSpEaTsA", LibKernel::PthreadAttrSetinheritsched);
@@ -573,6 +587,7 @@ LIB_DEFINE(InitLibKernel_1)
LIB_FUNC("Xjoosiw+XPI", LibKernel::KernelUuidCreate);
LIB_FUNC("WslcK1FQcGI", LibKernel::KernelIsNeoMode);
LIB_FUNC("9BcDykPmo1I", LibKernel::get_error_addr);
LIB_FUNC("6xVpy0Fdq+I", LibKernel::sigprocmask);
LIB_FUNC("1jfXLRVzisc", LibKernel::KernelUsleep);
LIB_FUNC("rNhWz+lvOMU", LibKernel::KernelSetThreadDtors);
+179
View File
@@ -0,0 +1,179 @@
#include "Kyty/Core/Common.h"
#include "Emulator/Common.h"
#include "Emulator/Libs/Libs.h"
#include "Emulator/Network.h"
#include "Emulator/SymbolDatabase.h"
#ifdef KYTY_EMU_ENABLED
// NOLINTNEXTLINE(cppcoreguidelines-macro-usage)
#define NET_CALL(func) \
[&]() \
{ \
auto result = func; \
if (result < 0) \
{ \
*GetNetErrorAddr() = result; \
} \
return result; \
}()
namespace Kyty::Libs {
namespace Network::Net {
struct NetEtherAddr;
} // namespace Network::Net
namespace LibNet {
LIB_VERSION("Net", 1, "Net", 1, 1);
static thread_local int g_net_errno = 0;
namespace Net = Network::Net;
KYTY_SYSV_ABI int* GetNetErrorAddr()
{
return &g_net_errno;
}
static int KYTY_SYSV_ABI NetInit()
{
return NET_CALL(Net::NetInit());
}
int KYTY_SYSV_ABI NetPoolCreate(const char* name, int size, int flags)
{
return NET_CALL(Net::NetPoolCreate(name, size, flags));
}
int KYTY_SYSV_ABI NetInetPton(int af, const char* src, void* dst)
{
return NET_CALL(Net::NetInetPton(af, src, dst));
}
int KYTY_SYSV_ABI NetEtherNtostr(const Net::NetEtherAddr* n, char* str, size_t len)
{
return NET_CALL(Net::NetEtherNtostr(n, str, len));
}
int KYTY_SYSV_ABI NetGetMacAddress(Net::NetEtherAddr* addr, int flags)
{
return NET_CALL(Net::NetGetMacAddress(addr, flags));
}
LIB_DEFINE(InitNet_1_Net)
{
LIB_FUNC("Nlev7Lg8k3A", LibNet::NetInit);
LIB_FUNC("dgJBaeJnGpo", LibNet::NetPoolCreate);
LIB_FUNC("8Kcp5d-q1Uo", LibNet::NetInetPton);
LIB_FUNC("v6M4txecCuo", LibNet::NetEtherNtostr);
LIB_FUNC("6Oc0bLsIYe0", LibNet::NetGetMacAddress);
}
} // namespace LibNet
namespace LibSsl {
LIB_VERSION("Ssl", 1, "Ssl", 1, 1);
namespace Ssl = Network::Ssl;
LIB_DEFINE(InitNet_1_Ssl)
{
LIB_FUNC("hdpVEUDFW3s", Ssl::SslInit);
}
} // namespace LibSsl
namespace LibHttp {
LIB_VERSION("Http", 1, "Http", 1, 1);
namespace Http = Network::Http;
LIB_DEFINE(InitNet_1_Http)
{
LIB_FUNC("A9cVMUtEp4Y", Http::HttpInit);
LIB_FUNC("0gYjPTR-6cY", Http::HttpCreateTemplate);
}
} // namespace LibHttp
namespace LibNetCtl {
LIB_VERSION("NetCtl", 1, "NetCtl", 1, 1);
namespace NetCtl = Network::NetCtl;
LIB_DEFINE(InitNet_1_NetCtl)
{
LIB_FUNC("gky0+oaNM4k", NetCtl::NetCtlInit);
LIB_FUNC("JO4yuTuMoKI", NetCtl::NetCtlGetNatInfo);
LIB_FUNC("iQw3iQPhvUQ", NetCtl::NetCtlCheckCallback);
LIB_FUNC("uBPlr0lbuiI", NetCtl::NetCtlGetState);
LIB_FUNC("UJ+Z7Q+4ck0", NetCtl::NetCtlRegisterCallback);
LIB_FUNC("obuxdTiwkF8", NetCtl::NetCtlGetInfo);
}
} // namespace LibNetCtl
namespace LibNpManager {
LIB_VERSION("NpManager", 1, "NpManager", 1, 1);
namespace NpManager = Network::NpManager;
LIB_DEFINE(InitNet_1_NpManager)
{
LIB_FUNC("3Zl8BePTh9Y", NpManager::NpCheckCallback);
LIB_FUNC("Ec63y59l9tw", NpManager::NpSetNpTitleId);
LIB_FUNC("A2CQ3kgSopQ", NpManager::NpSetContentRestriction);
LIB_FUNC("VfRSmPmj8Q8", NpManager::NpRegisterStateCallback);
LIB_FUNC("uFJpaKNBAj4", NpManager::NpRegisterGamePresenceCallback);
LIB_FUNC("GImICnh+boA", NpManager::NpRegisterPlusEventCallback);
}
} // namespace LibNpManager
namespace LibNpTrophy {
LIB_VERSION("NpTrophy", 1, "NpTrophy", 1, 1);
namespace NpTrophy = Network::NpTrophy;
LIB_DEFINE(InitNet_1_NpTrophy)
{
LIB_FUNC("q7U6tEAQf7c", NpTrophy::NpTrophyCreateHandle);
}
} // namespace LibNpTrophy
namespace LibNpWebApi {
LIB_VERSION("NpWebApi", 1, "NpWebApi", 1, 1);
namespace NpWebApi = Network::NpWebApi;
LIB_DEFINE(InitNet_1_NpWebApi)
{
LIB_FUNC("G3AnLNdRBjE", NpWebApi::NpWebApiInitialize);
}
} // namespace LibNpWebApi
LIB_DEFINE(InitNet_1)
{
LibNet::InitNet_1_Net(s);
LibSsl::InitNet_1_Ssl(s);
LibHttp::InitNet_1_Http(s);
LibNetCtl::InitNet_1_NetCtl(s);
LibNpManager::InitNet_1_NpManager(s);
LibNpTrophy::InitNet_1_NpTrophy(s);
LibNpWebApi::InitNet_1_NpWebApi(s);
}
} // namespace Kyty::Libs
#endif // KYTY_EMU_ENABLED
+88
View File
@@ -0,0 +1,88 @@
#include "Kyty/Core/Common.h"
#include "Kyty/Core/DbgAssert.h"
#include "Kyty/Core/String.h"
#include "Emulator/Common.h"
#include "Emulator/Libs/Errno.h"
#include "Emulator/Libs/Libs.h"
#include "Emulator/SymbolDatabase.h"
#ifdef KYTY_EMU_ENABLED
namespace Kyty::Libs {
LIB_VERSION("PlayGo", 1, "PlayGo", 1, 0);
namespace PlayGo {
struct PlayGoInitParams
{
const void* buf_addr;
uint32_t buf_size;
uint32_t reserved;
};
int KYTY_SYSV_ABI PlayGoInitialize(const PlayGoInitParams* init)
{
PRINT_NAME();
EXIT_NOT_IMPLEMENTED(init == nullptr);
printf("\t buf_addr = %016" PRIx64 "\n", reinterpret_cast<uint64_t>(init->buf_addr));
printf("\t buf_size = %" PRIu32 "\n", init->buf_size);
printf("\t reserved = %" PRId32 "\n", init->reserved);
return OK;
}
int KYTY_SYSV_ABI PlayGoOpen(int* out_handle, const void* param)
{
PRINT_NAME();
EXIT_NOT_IMPLEMENTED(out_handle == nullptr);
EXIT_NOT_IMPLEMENTED(param != nullptr);
*out_handle = 1;
return OK;
}
int KYTY_SYSV_ABI PlayGoGetLocus(int handle, const uint16_t* chunk_ids, uint32_t number_of_entries, int8_t* out_loci)
{
PRINT_NAME();
printf("\t handle = %d\n", handle);
EXIT_NOT_IMPLEMENTED(handle != 1);
EXIT_NOT_IMPLEMENTED(chunk_ids == nullptr);
EXIT_NOT_IMPLEMENTED(out_loci == nullptr);
EXIT_NOT_IMPLEMENTED(number_of_entries != 1);
for (uint32_t i = 0; i < number_of_entries; i++)
{
printf("\t chunk_ids[%u] = %" PRIu16 "\n", i, chunk_ids[i]);
if (chunk_ids[i] == 0)
{
out_loci[i] = 3;
} else
{
return PLAYGO_ERROR_BAD_CHUNK_ID;
}
}
return OK;
}
} // namespace PlayGo
LIB_DEFINE(InitPlayGo_1)
{
LIB_FUNC("ts6GlZOKRrE", PlayGo::PlayGoInitialize);
LIB_FUNC("M1Gma1ocrGE", PlayGo::PlayGoOpen);
LIB_FUNC("uWIYLFkkwqk", PlayGo::PlayGoGetLocus);
}
} // namespace Kyty::Libs
#endif // KYTY_EMU_ENABLED
+54
View File
@@ -0,0 +1,54 @@
#include "Kyty/Core/String.h"
#include "Emulator/Common.h"
#include "Emulator/Libs/Errno.h"
#include "Emulator/Libs/Libs.h"
#include "Emulator/SymbolDatabase.h"
#ifdef KYTY_EMU_ENABLED
namespace Kyty::Libs {
LIB_VERSION("SaveData", 1, "SaveData", 1, 1);
namespace SaveData {
int KYTY_SYSV_ABI SaveDataInitialize(const void* /*init*/)
{
PRINT_NAME();
// EXIT_NOT_IMPLEMENTED(init != nullptr);
return OK;
}
int KYTY_SYSV_ABI SaveDataInitialize2(const void* /*init*/)
{
PRINT_NAME();
// EXIT_NOT_IMPLEMENTED(init != nullptr);
return OK;
}
int KYTY_SYSV_ABI SaveDataInitialize3(const void* /*init*/)
{
PRINT_NAME();
// EXIT_NOT_IMPLEMENTED(init != nullptr);
return OK;
}
} // namespace SaveData
LIB_DEFINE(InitSaveData_1)
{
LIB_FUNC("ZkZhskCPXFw", SaveData::SaveDataInitialize);
LIB_FUNC("l1NmDeDpNGU", SaveData::SaveDataInitialize2);
LIB_FUNC("TywrFKCoLGY", SaveData::SaveDataInitialize3);
}
} // namespace Kyty::Libs
#endif // KYTY_EMU_ENABLED
@@ -1,3 +1,4 @@
#include "Kyty/Core/Common.h"
#include "Kyty/Core/DbgAssert.h"
#include "Kyty/Core/String.h"
@@ -79,6 +80,16 @@ namespace SystemService {
[[maybe_unused]] constexpr int PARAM_ENTER_BUTTON_ASSIGN_CIRCLE = 0;
[[maybe_unused]] constexpr int PARAM_ENTER_BUTTON_ASSIGN_CROSS = 1;
struct SystemServiceStatus
{
int32_t event_num = 0;
bool is_system_ui_overlaid = false;
bool is_in_background_execution = false;
bool is_cpu_mode_7cpu_normal = true;
bool is_game_live_streaming_on_air = false;
bool is_out_of_vr_play_area = false;
};
static int KYTY_SYSV_ABI SystemServiceHideSplashScreen()
{
PRINT_NAME();
@@ -116,12 +127,27 @@ static int KYTY_SYSV_ABI SystemServiceParamGetInt(int param_id, int* value)
return OK;
}
static int KYTY_SYSV_ABI SystemServiceGetStatus(SystemServiceStatus* status)
{
PRINT_NAME();
if (status == nullptr)
{
return SYSTEM_SERVICE_ERROR_PARAMETER;
}
*status = SystemServiceStatus();
return OK;
}
} // namespace SystemService
LIB_DEFINE(InitSystemService_1)
{
LIB_FUNC("Vo5V8KAwCmk", SystemService::SystemServiceHideSplashScreen);
LIB_FUNC("fZo48un7LK4", SystemService::SystemServiceParamGetInt);
LIB_FUNC("rPo6tV8D9bM", SystemService::SystemServiceGetStatus);
}
} // namespace Kyty::Libs
+13 -2
View File
@@ -2,6 +2,7 @@
#include "Kyty/Core/String.h"
#include "Emulator/Common.h"
#include "Emulator/Libs/Errno.h"
#include "Emulator/Libs/Libs.h"
#include "Emulator/SymbolDatabase.h"
@@ -17,7 +18,7 @@ static KYTY_SYSV_ABI int UserServiceInitialize(const void* /*params*/)
{
PRINT_NAME();
return 0;
return OK;
}
static KYTY_SYSV_ABI int UserServiceGetInitialUser(int* user_id)
@@ -28,7 +29,16 @@ static KYTY_SYSV_ABI int UserServiceGetInitialUser(int* user_id)
*user_id = 1;
return 0;
return OK;
}
static KYTY_SYSV_ABI int UserServiceGetEvent(void* event)
{
PRINT_NAME();
EXIT_NOT_IMPLEMENTED(event == nullptr);
return USER_SERVICE_ERROR_NO_EVENT;
}
} // namespace UserService
@@ -37,6 +47,7 @@ LIB_DEFINE(InitUserService_1)
{
LIB_FUNC("j3YMu1MVNNo", UserService::UserServiceInitialize);
LIB_FUNC("CdWp0oHWGr0", UserService::UserServiceGetInitialUser);
LIB_FUNC("yH17Q6NWtVg", UserService::UserServiceGetEvent);
}
} // namespace Kyty::Libs
+21 -11
View File
@@ -8,30 +8,40 @@ namespace LibcInternal {
LIB_DEFINE(InitLibcInternal_1);
} // namespace LibcInternal
LIB_DEFINE(InitAudio_1);
LIB_DEFINE(InitDebug_1);
LIB_DEFINE(InitDialog_1);
LIB_DEFINE(InitDiscMap_1);
LIB_DEFINE(InitGraphicsDriver_1);
LIB_DEFINE(InitLibC_1);
LIB_DEFINE(InitLibKernel_1);
LIB_DEFINE(InitVideoOut_1);
LIB_DEFINE(InitNet_1);
LIB_DEFINE(InitPad_1);
LIB_DEFINE(InitPlayGo_1);
LIB_DEFINE(InitSaveData_1);
LIB_DEFINE(InitSysmodule_1);
LIB_DEFINE(InitDiscMap_1);
LIB_DEFINE(InitDebug_1);
LIB_DEFINE(InitGraphicsDriver_1);
LIB_DEFINE(InitSystemService_1);
LIB_DEFINE(InitUserService_1);
LIB_DEFINE(InitPad_1);
LIB_DEFINE(InitVideoOut_1);
bool Init(const String& id, Loader::SymbolDatabase* s)
{
LIB_CHECK(U"libAudio_1", InitAudio_1);
LIB_CHECK(U"libc_1", InitLibC_1);
LIB_CHECK(U"libc_internal_1", LibcInternal::InitLibcInternal_1);
LIB_CHECK(U"libkernel_1", InitLibKernel_1);
LIB_CHECK(U"libVideoOut_1", InitVideoOut_1);
LIB_CHECK(U"libSysmodule_1", InitSysmodule_1);
LIB_CHECK(U"libDiscMap_1", InitDiscMap_1);
LIB_CHECK(U"libDebug_1", InitDebug_1);
LIB_CHECK(U"libDialog_1", InitDialog_1);
LIB_CHECK(U"libDiscMap_1", InitDiscMap_1);
LIB_CHECK(U"libGraphicsDriver_1", InitGraphicsDriver_1);
LIB_CHECK(U"libUserService_1", InitUserService_1);
LIB_CHECK(U"libSystemService_1", InitSystemService_1);
LIB_CHECK(U"libkernel_1", InitLibKernel_1);
LIB_CHECK(U"libNet_1", InitNet_1);
LIB_CHECK(U"libPad_1", InitPad_1);
LIB_CHECK(U"libPlayGo_1", InitPlayGo_1);
LIB_CHECK(U"libSaveData_1", InitSaveData_1);
LIB_CHECK(U"libSysmodule_1", InitSysmodule_1);
LIB_CHECK(U"libSystemService_1", InitSystemService_1);
LIB_CHECK(U"libUserService_1", InitUserService_1);
LIB_CHECK(U"libVideoOut_1", InitVideoOut_1);
return false;
}