Unifying kernel modules and user modules to XModule. XexLoadImage/etc.

This commit is contained in:
Ben Vanik
2014-01-11 17:24:09 -08:00
parent 7d6db5a6b6
commit dc496e8102
20 changed files with 510 additions and 397 deletions

View File

@@ -10,10 +10,13 @@
#include <xenia/kernel/kernel_state.h>
#include <xenia/emulator.h>
#include <xenia/kernel/xam_module.h>
#include <xenia/kernel/xboxkrnl_module.h>
#include <xenia/kernel/xboxkrnl_private.h>
#include <xenia/kernel/xobject.h>
#include <xenia/kernel/objects/xmodule.h>
#include <xenia/kernel/objects/xthread.h>
#include <xenia/kernel/objects/xuser_module.h>
using namespace xe;
@@ -55,12 +58,22 @@ KernelState* KernelState::shared() {
}
XModule* KernelState::GetModule(const char* name) {
// TODO(benvanik): implement lookup. Most games seem to look for xam.xex/etc.
XEASSERTALWAYS();
return NULL;
if (xestrcasecmpa(name, "xam.xex") == 0) {
auto module = emulator_->xam();
module->Retain();
return module;
} else if (xestrcasecmpa(name, "xboxkrnl.exe") == 0) {
auto module = emulator_->xboxkrnl();
module->Retain();
return module;
} else {
// TODO(benvanik): support user modules/loading/etc.
XEASSERTALWAYS();
return NULL;
}
}
XModule* KernelState::GetExecutableModule() {
XUserModule* KernelState::GetExecutableModule() {
if (!executable_module_) {
return NULL;
}
@@ -69,7 +82,7 @@ XModule* KernelState::GetExecutableModule() {
return executable_module_;
}
void KernelState::SetExecutableModule(XModule* module) {
void KernelState::SetExecutableModule(XUserModule* module) {
if (module == executable_module_) {
return;
}