summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorgibbed <rick@gibbed.us>2018-11-26 10:21:09 -0600
committergibbed <rick@gibbed.us>2018-11-26 10:21:09 -0600
commit28b494dadc5cbcc74ba47784872b0b58ca89d7a3 (patch)
tree311628f2f10374c3a6a94c18e506ec052bb9ca6a
parent5b2b2a3cc12ed9a87e40d4d0b8545d049775ef1d (diff)
[Kernel] Stub XMsg app 0x000000FE/msg 0x00020021.
-rw-r--r--src/xenia/kernel/xam/app_manager.cc4
-rw-r--r--src/xenia/kernel/xam/apps/unknown_fe_app.cc55
-rw-r--r--src/xenia/kernel/xam/apps/unknown_fe_app.h34
3 files changed, 92 insertions, 1 deletions
diff --git a/src/xenia/kernel/xam/app_manager.cc b/src/xenia/kernel/xam/app_manager.cc
index e83740776..fc18ca729 100644
--- a/src/xenia/kernel/xam/app_manager.cc
+++ b/src/xenia/kernel/xam/app_manager.cc
@@ -10,6 +10,7 @@
#include "xenia/kernel/xam/app_manager.h"
#include "xenia/kernel/kernel_state.h"
+#include "xenia/kernel/xam/apps/unknown_fe_app.h"
#include "xenia/kernel/xam/apps/xgi_app.h"
#include "xenia/kernel/xam/apps/xlivebase_app.h"
#include "xenia/kernel/xam/apps/xmp_app.h"
@@ -24,9 +25,10 @@ App::App(KernelState* kernel_state, uint32_t app_id)
app_id_(app_id) {}
void AppManager::RegisterApps(KernelState* kernel_state, AppManager* manager) {
+ manager->RegisterApp(std::make_unique<apps::XmpApp>(kernel_state));
manager->RegisterApp(std::make_unique<apps::XgiApp>(kernel_state));
manager->RegisterApp(std::make_unique<apps::XLiveBaseApp>(kernel_state));
- manager->RegisterApp(std::make_unique<apps::XmpApp>(kernel_state));
+ manager->RegisterApp(std::make_unique<apps::UnknownFEApp>(kernel_state));
}
void AppManager::RegisterApp(std::unique_ptr<App> app) {
diff --git a/src/xenia/kernel/xam/apps/unknown_fe_app.cc b/src/xenia/kernel/xam/apps/unknown_fe_app.cc
new file mode 100644
index 000000000..cb05a339e
--- /dev/null
+++ b/src/xenia/kernel/xam/apps/unknown_fe_app.cc
@@ -0,0 +1,55 @@
+/**
+ ******************************************************************************
+ * Xenia : Xbox 360 Emulator Research Project *
+ ******************************************************************************
+ * Copyright 2015 Ben Vanik. All rights reserved. *
+ * Released under the BSD license - see LICENSE in the root for more details. *
+ ******************************************************************************
+ */
+
+#include "xenia/kernel/xam/apps/unknown_fe_app.h"
+
+#include "xenia/base/logging.h"
+#include "xenia/base/threading.h"
+
+namespace xe {
+namespace kernel {
+namespace xam {
+namespace apps {
+
+UnknownFEApp::UnknownFEApp(KernelState* kernel_state)
+ : App(kernel_state, 0xFE) {}
+
+X_RESULT UnknownFEApp::DispatchMessageSync(uint32_t message,
+ uint32_t buffer_ptr,
+ uint32_t buffer_length) {
+ // NOTE: buffer_length may be zero or valid.
+ auto buffer = memory_->TranslateVirtual(buffer_ptr);
+ switch (message) {
+ case 0x00020021: {
+ struct message_data {
+ char unk_00[64];
+ xe::be<uint32_t> unk_40; // KeGetCurrentProcessType() < 1 ? 1 : 0
+ xe::be<uint32_t> unk_44; // ? output_ptr ?
+ xe::be<uint32_t> unk_48; // ? overlapped_ptr ?
+ }* data = reinterpret_cast<message_data*>(buffer);
+ assert_true(buffer_length == sizeof(message_data));
+ auto unk = memory_->TranslateVirtual<xe::be<uint32_t>*>(data->unk_44);
+ *unk = 0;
+ XELOGD("UnknownFEApp(0x00020021)('%s', %.8X, %.8X, %.8X)", data->unk_00,
+ (uint32_t)data->unk_40, (uint32_t)data->unk_44,
+ (uint32_t)data->unk_48);
+ return X_ERROR_SUCCESS;
+ }
+ }
+ XELOGE(
+ "Unimplemented 0xFE message app=%.8X, msg=%.8X, arg1=%.8X, "
+ "arg2=%.8X",
+ app_id(), message, buffer_ptr, buffer_length);
+ return X_STATUS_UNSUCCESSFUL;
+}
+
+} // namespace apps
+} // namespace xam
+} // namespace kernel
+} // namespace xe
diff --git a/src/xenia/kernel/xam/apps/unknown_fe_app.h b/src/xenia/kernel/xam/apps/unknown_fe_app.h
new file mode 100644
index 000000000..f2d764f17
--- /dev/null
+++ b/src/xenia/kernel/xam/apps/unknown_fe_app.h
@@ -0,0 +1,34 @@
+/**
+ ******************************************************************************
+ * Xenia : Xbox 360 Emulator Research Project *
+ ******************************************************************************
+ * Copyright 2015 Ben Vanik. All rights reserved. *
+ * Released under the BSD license - see LICENSE in the root for more details. *
+ ******************************************************************************
+ */
+
+#ifndef XENIA_KERNEL_XAM_APPS_UNKNOWN_FE_APP_H_
+#define XENIA_KERNEL_XAM_APPS_UNKNOWN_FE_APP_H_
+
+#include "xenia/kernel/kernel_state.h"
+#include "xenia/kernel/xam/app_manager.h"
+
+namespace xe {
+namespace kernel {
+namespace xam {
+namespace apps {
+
+class UnknownFEApp : public App {
+ public:
+ explicit UnknownFEApp(KernelState* kernel_state);
+
+ X_RESULT DispatchMessageSync(uint32_t message, uint32_t buffer_ptr,
+ uint32_t buffer_length) override;
+};
+
+} // namespace apps
+} // namespace xam
+} // namespace kernel
+} // namespace xe
+
+#endif // XENIA_KERNEL_XAM_APPS_UNKNOWN_FE_APP_H_