Merge remote-tracking branch 'randprint/XBLAfixes'
This commit is contained in:
commit
e2456f662a
|
@ -78,8 +78,11 @@ X_RESULT XgiApp::DispatchMessageSync(uint32_t message, uint32_t buffer_ptr,
|
||||||
return X_STATUS_SUCCESS;
|
return X_STATUS_SUCCESS;
|
||||||
}
|
}
|
||||||
case 0x000B0011: {
|
case 0x000B0011: {
|
||||||
// TODO(DrChat): Figure out what this is again
|
// TODO(PermaNull): reverse buffer contents.
|
||||||
} break;
|
//TEST
|
||||||
|
XELOGD("XGISessionDelete");
|
||||||
|
return X_STATUS_SUCCESS;
|
||||||
|
}
|
||||||
case 0x000B0012: {
|
case 0x000B0012: {
|
||||||
assert_true(buffer_length == 0x14);
|
assert_true(buffer_length == 0x14);
|
||||||
uint32_t session_ptr = xe::load_and_swap<uint32_t>(buffer + 0x0);
|
uint32_t session_ptr = xe::load_and_swap<uint32_t>(buffer + 0x0);
|
||||||
|
@ -93,6 +96,16 @@ X_RESULT XgiApp::DispatchMessageSync(uint32_t message, uint32_t buffer_ptr,
|
||||||
user_count, unk_0, user_index_array, private_slots_array);
|
user_count, unk_0, user_index_array, private_slots_array);
|
||||||
return X_STATUS_SUCCESS;
|
return X_STATUS_SUCCESS;
|
||||||
}
|
}
|
||||||
|
case 0x000B0014: {
|
||||||
|
//TEST Gets Jetpac XBLA in game
|
||||||
|
XELOGD("XGI_unknown");
|
||||||
|
return X_STATUS_SUCCESS;
|
||||||
|
}
|
||||||
|
case 0x000B0015: {
|
||||||
|
//TEST Gets Jetpac XBLA in game
|
||||||
|
XELOGD("XGI_unknown");
|
||||||
|
return X_STATUS_SUCCESS;
|
||||||
|
}
|
||||||
case 0x000B0041: {
|
case 0x000B0041: {
|
||||||
assert_true(!buffer_length || buffer_length == 32);
|
assert_true(!buffer_length || buffer_length == 32);
|
||||||
// 00000000 2789fecc 00000000 00000000 200491e0 00000000 200491f0 20049340
|
// 00000000 2789fecc 00000000 00000000 200491e0 00000000 200491f0 20049340
|
||||||
|
|
|
@ -41,20 +41,37 @@ X_RESULT XLiveBaseApp::DispatchMessageSync(uint32_t message,
|
||||||
xe::store_and_swap<uint32_t>(buffer + 0, 1); // XONLINE_NAT_OPEN
|
xe::store_and_swap<uint32_t>(buffer + 0, 1); // XONLINE_NAT_OPEN
|
||||||
return X_ERROR_SUCCESS;
|
return X_ERROR_SUCCESS;
|
||||||
}
|
}
|
||||||
|
case 0x00058007: {
|
||||||
|
/*
|
||||||
|
Occurs if title calls XOnlineGetServiceInfo, expects dwServiceId
|
||||||
|
and pServiceInfo. pServiceInfo should contain pointer to
|
||||||
|
XONLINE_SERVICE_INFO structure.
|
||||||
|
*/
|
||||||
|
XELOGD("CXLiveLogon::GetServiceInfo(%.8X, %.8X)", buffer_ptr,
|
||||||
|
buffer_length);
|
||||||
|
return 1229; // ERROR_CONNECTION_INVALID
|
||||||
|
}
|
||||||
case 0x00058020: {
|
case 0x00058020: {
|
||||||
// 0x00058004 is called right before this.
|
// 0x00058004 is called right before this.
|
||||||
// We should create a XamEnumerate-able empty list here, but I'm not
|
// We should create a XamEnumerate-able empty list here, but I'm not
|
||||||
// sure of the format.
|
// sure of the format.
|
||||||
// buffer_length seems to be the same ptr sent to 0x00058004.
|
// buffer_length seems to be the same ptr sent to 0x00058004.
|
||||||
XELOGD("XLiveBaseFriendsCreateEnumerator(%.8X, %.8X) unimplemented",
|
XELOGD("CXLiveFriends::Enumerate(%.8X, %.8X) unimplemented", buffer_ptr,
|
||||||
buffer_ptr, buffer_length);
|
buffer_length);
|
||||||
return X_STATUS_UNSUCCESSFUL;
|
return X_STATUS_UNSUCCESSFUL;
|
||||||
}
|
}
|
||||||
case 0x00058023: {
|
case 0x00058023: {
|
||||||
XELOGD("XliveBaseUnk58023(%.8X, %.8X) unimplemented", buffer_ptr,
|
XELOGD(
|
||||||
buffer_length);
|
"CXLiveMessaging::XMessageGameInviteGetAcceptedInfo(%.8X, %.8X) "
|
||||||
|
"unimplemented",
|
||||||
|
buffer_ptr, buffer_length);
|
||||||
return X_STATUS_UNSUCCESSFUL;
|
return X_STATUS_UNSUCCESSFUL;
|
||||||
}
|
}
|
||||||
|
case 0x00058046: {
|
||||||
|
XELOGD("CXLivePresence::InitializeTitle(%.8X,%.8X)", buffer_ptr,
|
||||||
|
buffer_length);
|
||||||
|
return X_ERROR_SUCCESS;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
XELOGE(
|
XELOGE(
|
||||||
"Unimplemented XLIVEBASE message app=%.8X, msg=%.8X, arg1=%.8X, "
|
"Unimplemented XLIVEBASE message app=%.8X, msg=%.8X, arg1=%.8X, "
|
||||||
|
|
|
@ -18,8 +18,8 @@ namespace kernel {
|
||||||
namespace xam {
|
namespace xam {
|
||||||
|
|
||||||
UserProfile::UserProfile() {
|
UserProfile::UserProfile() {
|
||||||
xuid_ = 0xBABEBABEBABEBABE;
|
xuid_ = 0xE000BABEBABEBABE;
|
||||||
name_ = "User";
|
name_ = "XeniaUser";
|
||||||
|
|
||||||
// https://cs.rin.ru/forum/viewtopic.php?f=38&t=60668&hilit=gfwl+live&start=195
|
// https://cs.rin.ru/forum/viewtopic.php?f=38&t=60668&hilit=gfwl+live&start=195
|
||||||
// https://github.com/arkem/py360/blob/master/py360/constants.py
|
// https://github.com/arkem/py360/blob/master/py360/constants.py
|
||||||
|
|
|
@ -12,6 +12,7 @@
|
||||||
#include "xenia/kernel/util/shim_utils.h"
|
#include "xenia/kernel/util/shim_utils.h"
|
||||||
#include "xenia/kernel/xam/xam_private.h"
|
#include "xenia/kernel/xam/xam_private.h"
|
||||||
#include "xenia/kernel/xevent.h"
|
#include "xenia/kernel/xevent.h"
|
||||||
|
#include "xenia/kernel/xthread.h"
|
||||||
#include "xenia/xbox.h"
|
#include "xenia/xbox.h"
|
||||||
|
|
||||||
namespace xe {
|
namespace xe {
|
||||||
|
@ -47,11 +48,15 @@ dword_result_t XMsgStartIORequest(dword_t app, dword_t message,
|
||||||
app, message, buffer, buffer_length);
|
app, message, buffer, buffer_length);
|
||||||
if (result == X_ERROR_NOT_FOUND) {
|
if (result == X_ERROR_NOT_FOUND) {
|
||||||
XELOGE("XMsgStartIORequest: app %.8X undefined", (uint32_t)app);
|
XELOGE("XMsgStartIORequest: app %.8X undefined", (uint32_t)app);
|
||||||
|
XThread::SetLastError(X_ERROR_NOT_FOUND);
|
||||||
}
|
}
|
||||||
if (overlapped_ptr) {
|
if (overlapped_ptr) {
|
||||||
kernel_state()->CompleteOverlappedImmediate(overlapped_ptr, result);
|
kernel_state()->CompleteOverlappedImmediate(overlapped_ptr, result);
|
||||||
result = X_ERROR_IO_PENDING;
|
result = X_ERROR_IO_PENDING;
|
||||||
}
|
}
|
||||||
|
if (result == X_ERROR_SUCCESS || X_ERROR_IO_PENDING) {
|
||||||
|
XThread::SetLastError(0);
|
||||||
|
}
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
DECLARE_XAM_EXPORT1(XMsgStartIORequest, kNone, kImplemented);
|
DECLARE_XAM_EXPORT1(XMsgStartIORequest, kNone, kImplemented);
|
||||||
|
|
|
@ -515,8 +515,10 @@ DECLARE_XAM_EXPORT1(XamSessionCreateHandle, kUserProfiles, kStub);
|
||||||
|
|
||||||
dword_result_t XamSessionRefObjByHandle(dword_t handle, lpdword_t obj_ptr) {
|
dword_result_t XamSessionRefObjByHandle(dword_t handle, lpdword_t obj_ptr) {
|
||||||
assert_true(handle == 0xCAFEDEAD);
|
assert_true(handle == 0xCAFEDEAD);
|
||||||
*obj_ptr = 0;
|
// TODO(PermaNull): Implement this properly,
|
||||||
return X_ERROR_FUNCTION_FAILED;
|
// For the time being returning 0xDEADF00D will prevent crashing.
|
||||||
|
*obj_ptr = 0xDEADF00D;
|
||||||
|
return X_ERROR_SUCCESS;
|
||||||
}
|
}
|
||||||
DECLARE_XAM_EXPORT1(XamSessionRefObjByHandle, kUserProfiles, kStub);
|
DECLARE_XAM_EXPORT1(XamSessionRefObjByHandle, kUserProfiles, kStub);
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue