mirror of
https://github.com/InoriRus/Kyty.git
synced 2026-08-28 05:06:40 +00:00
release 0.1.0
This commit is contained in:
@@ -0,0 +1,79 @@
|
||||
#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("AppContent", 1, "AppContentUtil", 1, 1);
|
||||
|
||||
namespace AppContent {
|
||||
|
||||
struct AppContentInitParam
|
||||
{
|
||||
char reserved[32];
|
||||
};
|
||||
|
||||
struct AppContentBootParam
|
||||
{
|
||||
char reserved1[4];
|
||||
uint32_t attr;
|
||||
char reserved2[32];
|
||||
};
|
||||
|
||||
struct NpUnifiedEntitlementLabel
|
||||
{
|
||||
char data[17];
|
||||
char padding[3];
|
||||
};
|
||||
|
||||
struct AppContentAddcontInfo
|
||||
{
|
||||
NpUnifiedEntitlementLabel entitlement_label;
|
||||
uint32_t status;
|
||||
};
|
||||
|
||||
int KYTY_SYSV_ABI AppContentInitialize(const AppContentInitParam* init_param, AppContentBootParam* boot_param)
|
||||
{
|
||||
PRINT_NAME();
|
||||
|
||||
EXIT_NOT_IMPLEMENTED(init_param == nullptr);
|
||||
EXIT_NOT_IMPLEMENTED(boot_param == nullptr);
|
||||
|
||||
boot_param->attr = 0;
|
||||
|
||||
return OK;
|
||||
}
|
||||
|
||||
int KYTY_SYSV_ABI AppContentGetAddcontInfoList(uint32_t service_label, AppContentAddcontInfo* /*list*/, uint32_t list_num,
|
||||
uint32_t* hit_num)
|
||||
{
|
||||
PRINT_NAME();
|
||||
|
||||
EXIT_NOT_IMPLEMENTED(hit_num == nullptr);
|
||||
|
||||
printf("\t service_label = %u\n", service_label);
|
||||
printf("\t list_num = %u\n", list_num);
|
||||
|
||||
*hit_num = 0;
|
||||
|
||||
return OK;
|
||||
}
|
||||
|
||||
} // namespace AppContent
|
||||
|
||||
LIB_DEFINE(InitAppContent_1)
|
||||
{
|
||||
LIB_FUNC("R9lA82OraNs", AppContent::AppContentInitialize);
|
||||
LIB_FUNC("xnd8BJzAxmk", AppContent::AppContentGetAddcontInfoList);
|
||||
}
|
||||
|
||||
} // namespace Kyty::Libs
|
||||
|
||||
#endif // KYTY_EMU_ENABLED
|
||||
@@ -19,6 +19,8 @@ LIB_DEFINE(InitAudio_1_AudioOut)
|
||||
LIB_FUNC("ekNvsT22rsY", AudioOut::AudioOutOpen);
|
||||
LIB_FUNC("b+uAV89IlxE", AudioOut::AudioOutSetVolume);
|
||||
LIB_FUNC("w3PdaSTSwGE", AudioOut::AudioOutOutputs);
|
||||
LIB_FUNC("QOQtbeDqsT4", AudioOut::AudioOutOutput);
|
||||
LIB_FUNC("s1--uE9mBFw", AudioOut::AudioOutClose);
|
||||
}
|
||||
|
||||
} // namespace LibAudioOut
|
||||
@@ -59,16 +61,37 @@ namespace Ajm = Audio::Ajm;
|
||||
LIB_DEFINE(InitAudio_1_Ajm)
|
||||
{
|
||||
LIB_FUNC("dl+4eHSzUu4", Ajm::AjmInitialize);
|
||||
LIB_FUNC("Q3dyFuwGn64", Ajm::AjmModuleRegister);
|
||||
}
|
||||
|
||||
} // namespace LibAjm
|
||||
|
||||
namespace LibAvPlayer {
|
||||
|
||||
LIB_VERSION("AvPlayer", 1, "AvPlayer", 1, 0);
|
||||
|
||||
namespace AvPlayer = Audio::AvPlayer;
|
||||
|
||||
LIB_DEFINE(InitAudio_1_AvPlayer)
|
||||
{
|
||||
LIB_FUNC("aS66RI0gGgo", AvPlayer::AvPlayerInit);
|
||||
LIB_FUNC("KMcEa+rHsIo", AvPlayer::AvPlayerAddSource);
|
||||
LIB_FUNC("OVths0xGfho", AvPlayer::AvPlayerSetLooping);
|
||||
LIB_FUNC("JdksQu8pNdQ", AvPlayer::AvPlayerGetVideoDataEx);
|
||||
LIB_FUNC("Wnp1OVcrZgk", AvPlayer::AvPlayerGetAudioData);
|
||||
LIB_FUNC("UbQoYawOsfY", AvPlayer::AvPlayerIsActive);
|
||||
LIB_FUNC("NkJwDzKmIlw", AvPlayer::AvPlayerClose);
|
||||
}
|
||||
|
||||
} // namespace LibAvPlayer
|
||||
|
||||
LIB_DEFINE(InitAudio_1)
|
||||
{
|
||||
LibAudioOut::InitAudio_1_AudioOut(s);
|
||||
LibAudioIn::InitAudio_1_AudioIn(s);
|
||||
LibVoiceQoS::InitAudio_1_VoiceQoS(s);
|
||||
LibAjm::InitAudio_1_Ajm(s);
|
||||
LibAvPlayer::InitAudio_1_AvPlayer(s);
|
||||
}
|
||||
|
||||
} // namespace Kyty::Libs
|
||||
|
||||
@@ -224,7 +224,7 @@ static void* KYTY_SYSV_ABI KernelGetProcParam()
|
||||
{
|
||||
PRINT_NAME();
|
||||
|
||||
auto* rt = Core::Singleton<Loader::RuntimeLinker>::Instance();
|
||||
auto* rt = Core::Singleton<Loader::RuntimeLinker>::Instance(); // NOLINT
|
||||
|
||||
return reinterpret_cast<void*>(rt->GetProcParam());
|
||||
}
|
||||
@@ -461,6 +461,7 @@ LIB_DEFINE(InitLibKernel_1_Posix)
|
||||
LIB_FUNC("mqULNdimTn0", Posix::pthread_key_create);
|
||||
LIB_FUNC("6BpEZuDT7YI", Posix::pthread_key_delete);
|
||||
LIB_FUNC("WrOLvHU0yQM", Posix::pthread_setspecific);
|
||||
LIB_FUNC("0-KXaS70xy4", Posix::pthread_getspecific);
|
||||
}
|
||||
|
||||
} // namespace Posix
|
||||
|
||||
@@ -183,6 +183,7 @@ LIB_DEFINE(InitNet_1_NpTrophy)
|
||||
LIB_FUNC("XbkjbobZlCY", NpTrophy::NpTrophyCreateContext);
|
||||
LIB_FUNC("TJCAxto9SEU", NpTrophy::NpTrophyRegisterContext);
|
||||
LIB_FUNC("GNcF4oidY0Y", NpTrophy::NpTrophyDestroyHandle);
|
||||
LIB_FUNC("LHuSmO3SLd8", NpTrophy::NpTrophyGetTrophyUnlockState);
|
||||
}
|
||||
|
||||
} // namespace LibNpTrophy
|
||||
|
||||
@@ -20,6 +20,8 @@ LIB_DEFINE(InitPad_1)
|
||||
LIB_FUNC("YndgXqQVV7c", Controller::PadReadState);
|
||||
LIB_FUNC("q1cHNfGycLI", Controller::PadRead);
|
||||
LIB_FUNC("yFVnOdGxvZY", Controller::PadSetVibration);
|
||||
LIB_FUNC("DscD1i9HX1w", Controller::PadResetLightBar);
|
||||
LIB_FUNC("RR4novUEENY", Controller::PadSetLightBar);
|
||||
}
|
||||
|
||||
} // namespace Kyty::Libs
|
||||
|
||||
@@ -31,6 +31,18 @@ struct SaveDataMountPoint
|
||||
char data[16];
|
||||
};
|
||||
|
||||
struct SaveDataMount
|
||||
{
|
||||
int user_id;
|
||||
int pad;
|
||||
const char* title_id;
|
||||
const char* dir_name;
|
||||
const char* fingerprint;
|
||||
uint64_t blocks;
|
||||
uint32_t mount_mode;
|
||||
uint8_t reserved[32];
|
||||
};
|
||||
|
||||
struct SaveDataMount2
|
||||
{
|
||||
int user_id;
|
||||
@@ -63,6 +75,21 @@ struct SaveDataParam
|
||||
uint8_t reserved[32];
|
||||
};
|
||||
|
||||
struct SaveDataMountInfo
|
||||
{
|
||||
uint64_t blocks;
|
||||
uint64_t free_blocks;
|
||||
uint8_t reserved[32];
|
||||
};
|
||||
|
||||
struct SaveDataIcon
|
||||
{
|
||||
void* buf;
|
||||
size_t buf_size;
|
||||
size_t data_size;
|
||||
uint8_t reserved[32];
|
||||
};
|
||||
|
||||
int KYTY_SYSV_ABI SaveDataInitialize(const void* /*init*/)
|
||||
{
|
||||
PRINT_NAME();
|
||||
@@ -90,6 +117,69 @@ int KYTY_SYSV_ABI SaveDataInitialize3(const void* /*init*/)
|
||||
return OK;
|
||||
}
|
||||
|
||||
int KYTY_SYSV_ABI SaveDataMount(const SaveDataMount* mount, SaveDataMountResult* mount_result)
|
||||
{
|
||||
PRINT_NAME();
|
||||
|
||||
EXIT_NOT_IMPLEMENTED(mount == nullptr);
|
||||
EXIT_NOT_IMPLEMENTED(mount_result == nullptr);
|
||||
|
||||
printf("\t user_id = %d\n", mount->user_id);
|
||||
printf("\t title_id = %s\n", mount->title_id);
|
||||
printf("\t dir_name = %s\n", mount->dir_name);
|
||||
printf("\t fingerprint = %s\n", mount->fingerprint);
|
||||
printf("\t blocks = %" PRIu64 "\n", mount->blocks);
|
||||
printf("\t mount_mode = %" PRIu32 "\n", mount->mount_mode);
|
||||
|
||||
String mount_dir = String(SAVE_DATA_DIR) + U"/" + String::FromUtf8(mount->dir_name);
|
||||
String mount_point = SAVE_DATA_POINT;
|
||||
bool create = (mount->mount_mode == 6 || mount->mount_mode == 22);
|
||||
bool open = (mount->mount_mode == 1 || mount->mount_mode == 2);
|
||||
|
||||
if (!create && !open)
|
||||
{
|
||||
EXIT("unknown mount mode: %u", mount->mount_mode);
|
||||
}
|
||||
|
||||
if (open)
|
||||
{
|
||||
EXIT_NOT_IMPLEMENTED(create);
|
||||
|
||||
if (!Core::File::IsDirectoryExisting(mount_dir))
|
||||
{
|
||||
return SAVE_DATA_ERROR_NOT_FOUND;
|
||||
}
|
||||
|
||||
LibKernel::FileSystem::Mount(mount_dir, mount_point);
|
||||
|
||||
mount_result->mount_status = 0;
|
||||
}
|
||||
|
||||
if (create)
|
||||
{
|
||||
EXIT_NOT_IMPLEMENTED(open);
|
||||
|
||||
if (Core::File::IsDirectoryExisting(mount_dir))
|
||||
{
|
||||
return SAVE_DATA_ERROR_EXISTS;
|
||||
}
|
||||
|
||||
Core::File::CreateDirectories(mount_dir);
|
||||
|
||||
EXIT_NOT_IMPLEMENTED((!Core::File::IsDirectoryExisting(mount_dir)));
|
||||
|
||||
LibKernel::FileSystem::Mount(mount_dir, mount_point);
|
||||
|
||||
mount_result->mount_status = 1;
|
||||
}
|
||||
|
||||
snprintf(mount_result->mount_point.data, 16, "%s", mount_point.C_Str());
|
||||
|
||||
mount_result->required_blocks = 0;
|
||||
|
||||
return OK;
|
||||
}
|
||||
|
||||
int KYTY_SYSV_ABI SaveDataMount2(const SaveDataMount2* mount, SaveDataMountResult* mount_result)
|
||||
{
|
||||
PRINT_NAME();
|
||||
@@ -104,7 +194,7 @@ int KYTY_SYSV_ABI SaveDataMount2(const SaveDataMount2* mount, SaveDataMountResul
|
||||
|
||||
String mount_dir = String(SAVE_DATA_DIR) + U"/" + String::FromUtf8(mount->dir_name->data);
|
||||
String mount_point = SAVE_DATA_POINT;
|
||||
bool create = (mount->mount_mode == 22);
|
||||
bool create = (mount->mount_mode == 6 || mount->mount_mode == 22);
|
||||
bool open = (mount->mount_mode == 1 || mount->mount_mode == 2);
|
||||
|
||||
if (!create && !open)
|
||||
@@ -190,6 +280,31 @@ int KYTY_SYSV_ABI SaveDataSetParam(const SaveDataMountPoint* mount_point, uint32
|
||||
return OK;
|
||||
}
|
||||
|
||||
int KYTY_SYSV_ABI SaveDataGetMountInfo(const SaveDataMountPoint* mount_point, SaveDataMountInfo* info)
|
||||
{
|
||||
PRINT_NAME();
|
||||
|
||||
EXIT_NOT_IMPLEMENTED(mount_point == nullptr);
|
||||
EXIT_NOT_IMPLEMENTED(info == nullptr);
|
||||
|
||||
info->blocks = 100000;
|
||||
info->free_blocks = 100000;
|
||||
|
||||
return OK;
|
||||
}
|
||||
|
||||
int KYTY_SYSV_ABI SaveDataSaveIcon(const SaveDataMountPoint* mount_point, const SaveDataIcon* icon)
|
||||
{
|
||||
EXIT_NOT_IMPLEMENTED(mount_point == nullptr);
|
||||
EXIT_NOT_IMPLEMENTED(icon == nullptr);
|
||||
|
||||
printf("\t buf = %016" PRIx64 "\n", reinterpret_cast<uint64_t>(icon->buf));
|
||||
printf("\t buf_size = %" PRIu64 "\n", icon->buf_size);
|
||||
printf("\t data_size = %" PRIu64 "\n", icon->data_size);
|
||||
|
||||
return OK;
|
||||
}
|
||||
|
||||
} // namespace SaveData
|
||||
|
||||
LIB_DEFINE(InitSaveData_1)
|
||||
@@ -197,9 +312,12 @@ LIB_DEFINE(InitSaveData_1)
|
||||
LIB_FUNC("ZkZhskCPXFw", SaveData::SaveDataInitialize);
|
||||
LIB_FUNC("l1NmDeDpNGU", SaveData::SaveDataInitialize2);
|
||||
LIB_FUNC("TywrFKCoLGY", SaveData::SaveDataInitialize3);
|
||||
LIB_FUNC("32HQAQdwM2o", SaveData::SaveDataMount);
|
||||
LIB_FUNC("0z45PIH+SNI", SaveData::SaveDataMount2);
|
||||
LIB_FUNC("BMR4F-Uek3E", SaveData::SaveDataUmount);
|
||||
LIB_FUNC("85zul--eGXs", SaveData::SaveDataSetParam);
|
||||
LIB_FUNC("65VH0Qaaz6s", SaveData::SaveDataGetMountInfo);
|
||||
LIB_FUNC("c88Yy54Mx0w", SaveData::SaveDataSaveIcon);
|
||||
}
|
||||
|
||||
} // namespace Kyty::Libs
|
||||
|
||||
@@ -116,7 +116,7 @@ static int KYTY_SYSV_ABI SystemServiceParamGetInt(int param_id, int* value)
|
||||
|
||||
switch (param_id)
|
||||
{
|
||||
case PARAM_ID_LANG: v = PARAM_LANG_RUSSIAN; break;
|
||||
case PARAM_ID_LANG: v = PARAM_LANG_ENGLISH_US; break;
|
||||
case PARAM_ID_DATE_FORMAT: v = PARAM_DATE_FORMAT_DDMMYYYY; break;
|
||||
case PARAM_ID_TIME_FORMAT: v = PARAM_TIME_FORMAT_24HOUR; break;
|
||||
case PARAM_ID_TIME_ZONE: v = +180; break;
|
||||
|
||||
@@ -21,6 +21,18 @@ struct UserServiceLoginUserIdList
|
||||
int user_id[4];
|
||||
};
|
||||
|
||||
enum UserServiceEventType
|
||||
{
|
||||
UserServiceEventTypeLogin,
|
||||
UserServiceEventTypeLogout
|
||||
};
|
||||
|
||||
struct SceUserServiceEvent
|
||||
{
|
||||
UserServiceEventType event_type;
|
||||
int user_id;
|
||||
};
|
||||
|
||||
static KYTY_SYSV_ABI int UserServiceInitialize(const void* /*params*/)
|
||||
{
|
||||
PRINT_NAME();
|
||||
@@ -39,12 +51,22 @@ static KYTY_SYSV_ABI int UserServiceGetInitialUser(int* user_id)
|
||||
return OK;
|
||||
}
|
||||
|
||||
static KYTY_SYSV_ABI int UserServiceGetEvent(void* event)
|
||||
static KYTY_SYSV_ABI int UserServiceGetEvent(SceUserServiceEvent* event)
|
||||
{
|
||||
PRINT_NAME();
|
||||
|
||||
EXIT_NOT_IMPLEMENTED(event == nullptr);
|
||||
|
||||
static bool logged_in = false;
|
||||
|
||||
if (!logged_in)
|
||||
{
|
||||
logged_in = true;
|
||||
event->event_type = UserServiceEventTypeLogin;
|
||||
event->user_id = 1;
|
||||
return OK;
|
||||
}
|
||||
|
||||
return USER_SERVICE_ERROR_NO_EVENT;
|
||||
}
|
||||
|
||||
|
||||
@@ -8,12 +8,12 @@ namespace LibcInternal {
|
||||
LIB_DEFINE(InitLibcInternal_1);
|
||||
} // namespace LibcInternal
|
||||
|
||||
LIB_DEFINE(InitAppContent_1);
|
||||
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(InitNet_1);
|
||||
LIB_DEFINE(InitPad_1);
|
||||
@@ -27,7 +27,7 @@ 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"libAppContent_1", InitAppContent_1);
|
||||
LIB_CHECK(U"libc_internal_1", LibcInternal::InitLibcInternal_1);
|
||||
LIB_CHECK(U"libDebug_1", InitDebug_1);
|
||||
LIB_CHECK(U"libDialog_1", InitDialog_1);
|
||||
|
||||
Reference in New Issue
Block a user