diff --git a/Core/HLE/sceUtility.cpp b/Core/HLE/sceUtility.cpp index 80ab1e7251..c1d6c9f276 100644 --- a/Core/HLE/sceUtility.cpp +++ b/Core/HLE/sceUtility.cpp @@ -376,34 +376,129 @@ void sceUtilityNetconfGetStatus() RETURN(__UtilityGetStatus()); } +#define PSP_SYSTEMPARAM_ID_STRING_NICKNAME 1 +#define PSP_SYSTEMPARAM_ID_INT_ADHOC_CHANNEL 2 +#define PSP_SYSTEMPARAM_ID_INT_WLAN_POWERSAVE 3 +#define PSP_SYSTEMPARAM_ID_INT_DATE_FORMAT 4 +#define PSP_SYSTEMPARAM_ID_INT_TIME_FORMAT 5 +//Timezone offset from UTC in minutes, (EST = -300 = -5 * 60) +#define PSP_SYSTEMPARAM_ID_INT_TIMEZONE 6 +#define PSP_SYSTEMPARAM_ID_INT_DAYLIGHTSAVINGS 7 +#define PSP_SYSTEMPARAM_ID_INT_LANGUAGE 8 +/** + * #9 seems to be Region or maybe X/O button swap. + * It doesn't exist on JAP v1.0 + * is 1 on NA v1.5s + * is 0 on JAP v1.5s + * is read-only + */ +#define PSP_SYSTEMPARAM_ID_INT_UNKNOWN 9 -void sceUtilityGetSystemParamString() +/** + * Return values for the SystemParam functions + */ +#define PSP_SYSTEMPARAM_RETVAL_OK 0 +#define PSP_SYSTEMPARAM_RETVAL_FAIL 0x80110103 + +/** + * Valid values for PSP_SYSTEMPARAM_ID_INT_ADHOC_CHANNEL + */ +#define PSP_SYSTEMPARAM_ADHOC_CHANNEL_AUTOMATIC 0 +#define PSP_SYSTEMPARAM_ADHOC_CHANNEL_1 1 +#define PSP_SYSTEMPARAM_ADHOC_CHANNEL_6 6 +#define PSP_SYSTEMPARAM_ADHOC_CHANNEL_11 11 + +/** + * Valid values for PSP_SYSTEMPARAM_ID_INT_WLAN_POWERSAVE + */ +#define PSP_SYSTEMPARAM_WLAN_POWERSAVE_OFF 0 +#define PSP_SYSTEMPARAM_WLAN_POWERSAVE_ON 1 + +/** + * Valid values for PSP_SYSTEMPARAM_ID_INT_DATE_FORMAT + */ +#define PSP_SYSTEMPARAM_DATE_FORMAT_YYYYMMDD 0 +#define PSP_SYSTEMPARAM_DATE_FORMAT_MMDDYYYY 1 +#define PSP_SYSTEMPARAM_DATE_FORMAT_DDMMYYYY 2 + +/** + * Valid values for PSP_SYSTEMPARAM_ID_INT_TIME_FORMAT + */ +#define PSP_SYSTEMPARAM_TIME_FORMAT_24HR 0 +#define PSP_SYSTEMPARAM_TIME_FORMAT_12HR 1 + +/** + * Valid values for PSP_SYSTEMPARAM_ID_INT_DAYLIGHTSAVINGS + */ +#define PSP_SYSTEMPARAM_DAYLIGHTSAVINGS_STD 0 +#define PSP_SYSTEMPARAM_DAYLIGHTSAVINGS_SAVING 1 + +/** + * Valid values for PSP_SYSTEMPARAM_ID_INT_LANGUAGE + */ +#define PSP_SYSTEMPARAM_LANGUAGE_JAPANESE 0 +#define PSP_SYSTEMPARAM_LANGUAGE_ENGLISH 1 +#define PSP_SYSTEMPARAM_LANGUAGE_FRENCH 2 +#define PSP_SYSTEMPARAM_LANGUAGE_SPANISH 3 +#define PSP_SYSTEMPARAM_LANGUAGE_GERMAN 4 +#define PSP_SYSTEMPARAM_LANGUAGE_ITALIAN 5 +#define PSP_SYSTEMPARAM_LANGUAGE_DUTCH 6 +#define PSP_SYSTEMPARAM_LANGUAGE_PORTUGUESE 7 +#define PSP_SYSTEMPARAM_LANGUAGE_KOREAN 8 + + + + +u32 sceUtilityGetSystemParamString(u32 id, u32 destaddr, u32 unknownparam) { - int id = PARAM(0); - DEBUG_LOG(HLE,"sceUtilityGetSystemParamString(%i, %08x, %i)", id, PARAM(1), PARAM(2)); - char *buf = (char *)Memory::GetPointer(PARAM(1)); - strcpy(buf, "FAKE"); - RETURN(0); + //DEBUG_LOG(HLE,"sceUtilityGetSystemParamString(%i, %08x, %i)", id,destaddr,unknownparam); + char *buf = (char *)Memory::GetPointer(destaddr); + switch (id) { + case PSP_SYSTEMPARAM_ID_STRING_NICKNAME: + strcpy(buf, "shadow"); + break; + + default: + return PSP_SYSTEMPARAM_RETVAL_FAIL; + } + + return 0; } -void sceUtilityGetSystemParamInt() +u32 sceUtilityGetSystemParamInt(u32 id, u32 destaddr) { - DEBUG_LOG(HLE,"sceUtilityGetSystemParamInt(%i, %08x)", PARAM(0), PARAM(1)); - u32 *outPtr = (u32*)Memory::GetPointer(PARAM(1)); - const int defaultValues[16] = - { - 0, - 0, - 0, - 0,//date notation - 0,//time notation - 0,//timezone offset in minutes - 0,//daylight savings - 1,//language (0=jap 1=eng) - 0, - }; - *outPtr = defaultValues[PARAM(0)]; - RETURN(0); + DEBUG_LOG(HLE,"sceUtilityGetSystemParamInt(%i, %08x)", id,destaddr); + u32 *outPtr = (u32*)Memory::GetPointer(destaddr); + switch (id) { + case PSP_SYSTEMPARAM_ID_INT_ADHOC_CHANNEL: + *outPtr = PSP_SYSTEMPARAM_ADHOC_CHANNEL_AUTOMATIC; + break; + case PSP_SYSTEMPARAM_ID_INT_WLAN_POWERSAVE: + *outPtr = PSP_SYSTEMPARAM_WLAN_POWERSAVE_OFF; + break; + case PSP_SYSTEMPARAM_ID_INT_DATE_FORMAT: + *outPtr = PSP_SYSTEMPARAM_DATE_FORMAT_DDMMYYYY; + break; + case PSP_SYSTEMPARAM_ID_INT_TIME_FORMAT: + *outPtr = PSP_SYSTEMPARAM_TIME_FORMAT_24HR; + break; + case PSP_SYSTEMPARAM_ID_INT_TIMEZONE: + *outPtr = 60; + break; + case PSP_SYSTEMPARAM_ID_INT_DAYLIGHTSAVINGS: + *outPtr = PSP_SYSTEMPARAM_TIME_FORMAT_24HR; + break; + case PSP_SYSTEMPARAM_ID_INT_LANGUAGE: + *outPtr = PSP_SYSTEMPARAM_LANGUAGE_ENGLISH; + break; + case PSP_SYSTEMPARAM_ID_INT_UNKNOWN: + *outPtr = 1; + break; + default: + return PSP_SYSTEMPARAM_RETVAL_FAIL; + } + + return 0; } u32 sceUtilityLoadNetModule(u32 module) @@ -436,8 +531,8 @@ const HLEFunction sceUtility[] = {0xf3f76017, sceUtilityOskGetStatus, "sceUtilityOskGetStatus"}, {0x41e30674, 0, "sceUtilitySetSystemParamString"}, - {0x34b78343, sceUtilityGetSystemParamString, "sceUtilityGetSystemParamString"}, - {0xA5DA2406, sceUtilityGetSystemParamInt, "sceUtilityGetSystemParamInt"}, + {0x34b78343, &WrapU_UUU, "sceUtilityGetSystemParamString"}, + {0xA5DA2406, &WrapU_UU, "sceUtilityGetSystemParamInt"}, {0xc492f751, 0, "sceUtilityGameSharingInitStart"}, {0xefc6f80f, 0, "sceUtilityGameSharingShutdownStart"}, {0x7853182d, 0, "sceUtilityGameSharingUpdate"},