Massive refactoring of all code + audio skeleton.
This should make it easier to find files and (in the future) split things up into separate libraries. It also changes around emulator initialization to make it a little more difficult to do things out of order and a little more sensible as to when real init work happens. Also adding a skeleton audio system/driver and reworking CPU register access to be more extensible.
This commit is contained in:
24
src/xenia/kernel/xam/sources.gypi
Normal file
24
src/xenia/kernel/xam/sources.gypi
Normal file
@@ -0,0 +1,24 @@
|
||||
# Copyright 2013 Ben Vanik. All Rights Reserved.
|
||||
{
|
||||
'sources': [
|
||||
'xam_content.cc',
|
||||
'xam_content.h',
|
||||
'xam_info.cc',
|
||||
'xam_info.h',
|
||||
'xam_input.cc',
|
||||
'xam_input.h',
|
||||
'xam_module.cc',
|
||||
'xam_module.h',
|
||||
'xam_net.cc',
|
||||
'xam_net.h',
|
||||
'xam_ordinals.h',
|
||||
'xam_private.h',
|
||||
'xam_state.cc',
|
||||
'xam_state.h',
|
||||
'xam_table.inc',
|
||||
'xam_user.cc',
|
||||
'xam_user.h',
|
||||
'xam_video.cc',
|
||||
'xam_video.h',
|
||||
],
|
||||
}
|
||||
49
src/xenia/kernel/xam/xam_content.cc
Normal file
49
src/xenia/kernel/xam/xam_content.cc
Normal file
@@ -0,0 +1,49 @@
|
||||
/**
|
||||
******************************************************************************
|
||||
* Xenia : Xbox 360 Emulator Research Project *
|
||||
******************************************************************************
|
||||
* Copyright 2013 Ben Vanik. All rights reserved. *
|
||||
* Released under the BSD license - see LICENSE in the root for more details. *
|
||||
******************************************************************************
|
||||
*/
|
||||
|
||||
#include <xenia/kernel/xam/xam_content.h>
|
||||
|
||||
#include <xenia/kernel/shim_utils.h>
|
||||
#include <xenia/kernel/xam/xam_private.h>
|
||||
#include <xenia/kernel/xam/xam_state.h>
|
||||
|
||||
|
||||
using namespace xe;
|
||||
using namespace xe::kernel;
|
||||
using namespace xe::kernel::xam;
|
||||
|
||||
|
||||
namespace xe {
|
||||
namespace kernel {
|
||||
namespace xam {
|
||||
|
||||
|
||||
SHIM_CALL XamContentGetLicenseMask_shim(
|
||||
xe_ppc_state_t* ppc_state, XamState* state) {
|
||||
uint32_t unk0_ptr = SHIM_GET_ARG_32(0);
|
||||
uint32_t unk1_ptr = SHIM_GET_ARG_32(1);
|
||||
|
||||
XELOGD(
|
||||
"XamContentGetLicenseMask(%.8X, %.8X)",
|
||||
unk0_ptr,
|
||||
unk1_ptr);
|
||||
|
||||
SHIM_SET_RETURN(X_STATUS_NOT_IMPLEMENTED);
|
||||
}
|
||||
|
||||
|
||||
} // namespace xam
|
||||
} // namespace kernel
|
||||
} // namespace xe
|
||||
|
||||
|
||||
void xe::kernel::xam::RegisterContentExports(
|
||||
ExportResolver* export_resolver, XamState* state) {
|
||||
SHIM_SET_MAPPING("xam.xex", XamContentGetLicenseMask, state);
|
||||
}
|
||||
31
src/xenia/kernel/xam/xam_content.h
Normal file
31
src/xenia/kernel/xam/xam_content.h
Normal file
@@ -0,0 +1,31 @@
|
||||
/**
|
||||
******************************************************************************
|
||||
* Xenia : Xbox 360 Emulator Research Project *
|
||||
******************************************************************************
|
||||
* Copyright 2013 Ben Vanik. All rights reserved. *
|
||||
* Released under the BSD license - see LICENSE in the root for more details. *
|
||||
******************************************************************************
|
||||
*/
|
||||
|
||||
#ifndef XENIA_KERNEL_XAM_CONTENT_H_
|
||||
#define XENIA_KERNEL_XAM_CONTENT_H_
|
||||
|
||||
#include <xenia/common.h>
|
||||
#include <xenia/core.h>
|
||||
|
||||
#include <xenia/xbox.h>
|
||||
|
||||
|
||||
namespace xe {
|
||||
namespace kernel {
|
||||
namespace xam {
|
||||
|
||||
|
||||
|
||||
|
||||
} // namespace xam
|
||||
} // namespace kernel
|
||||
} // namespace xe
|
||||
|
||||
|
||||
#endif // XENIA_KERNEL_XAM_CONTENT_H_
|
||||
77
src/xenia/kernel/xam/xam_info.cc
Normal file
77
src/xenia/kernel/xam/xam_info.cc
Normal file
@@ -0,0 +1,77 @@
|
||||
/**
|
||||
******************************************************************************
|
||||
* Xenia : Xbox 360 Emulator Research Project *
|
||||
******************************************************************************
|
||||
* Copyright 2013 Ben Vanik. All rights reserved. *
|
||||
* Released under the BSD license - see LICENSE in the root for more details. *
|
||||
******************************************************************************
|
||||
*/
|
||||
|
||||
#include <xenia/kernel/xam/xam_info.h>
|
||||
|
||||
#include <xenia/kernel/shim_utils.h>
|
||||
#include <xenia/kernel/xex2.h>
|
||||
#include <xenia/kernel/xam/xam_private.h>
|
||||
#include <xenia/kernel/xam/xam_state.h>
|
||||
|
||||
|
||||
using namespace xe;
|
||||
using namespace xe::kernel;
|
||||
using namespace xe::kernel::xam;
|
||||
|
||||
|
||||
namespace xe {
|
||||
namespace kernel {
|
||||
namespace xam {
|
||||
|
||||
|
||||
SHIM_CALL XGetAVPack_shim(
|
||||
xe_ppc_state_t* ppc_state, XamState* state) {
|
||||
// DWORD
|
||||
// Not sure what the values are for this, but 6 is VGA.
|
||||
// Other likely values are 3/4/8 for HDMI or something.
|
||||
// Games seem to use this as a PAL check - if the result is not 3/4/6/8
|
||||
// they explode with errors if not in PAL mode.
|
||||
SHIM_SET_RETURN(6);
|
||||
}
|
||||
|
||||
|
||||
SHIM_CALL XGetGameRegion_shim(
|
||||
xe_ppc_state_t* ppc_state, XamState* state) {
|
||||
XELOGD("XGetGameRegion()");
|
||||
|
||||
SHIM_SET_RETURN(XEX_REGION_ALL);
|
||||
}
|
||||
|
||||
|
||||
SHIM_CALL XGetLanguage_shim(
|
||||
xe_ppc_state_t* ppc_state, XamState* state) {
|
||||
XELOGD("XGetLanguage()");
|
||||
|
||||
uint32_t desired_language = X_LANGUAGE_ENGLISH;
|
||||
|
||||
// Switch the language based on game region.
|
||||
// TODO(benvanik): pull from xex header.
|
||||
uint32_t game_region = XEX_REGION_NTSCU;
|
||||
if (game_region & XEX_REGION_NTSCU) {
|
||||
desired_language = X_LANGUAGE_ENGLISH;
|
||||
} else if (game_region & XEX_REGION_NTSCJ) {
|
||||
desired_language = X_LANGUAGE_JAPANESE;
|
||||
}
|
||||
// Add more overrides?
|
||||
|
||||
SHIM_SET_RETURN(desired_language);
|
||||
}
|
||||
|
||||
|
||||
} // namespace xam
|
||||
} // namespace kernel
|
||||
} // namespace xe
|
||||
|
||||
|
||||
void xe::kernel::xam::RegisterInfoExports(
|
||||
ExportResolver* export_resolver, XamState* state) {
|
||||
SHIM_SET_MAPPING("xam.xex", XGetAVPack, state);
|
||||
SHIM_SET_MAPPING("xam.xex", XGetGameRegion, state);
|
||||
SHIM_SET_MAPPING("xam.xex", XGetLanguage, state);
|
||||
}
|
||||
31
src/xenia/kernel/xam/xam_info.h
Normal file
31
src/xenia/kernel/xam/xam_info.h
Normal file
@@ -0,0 +1,31 @@
|
||||
/**
|
||||
******************************************************************************
|
||||
* Xenia : Xbox 360 Emulator Research Project *
|
||||
******************************************************************************
|
||||
* Copyright 2013 Ben Vanik. All rights reserved. *
|
||||
* Released under the BSD license - see LICENSE in the root for more details. *
|
||||
******************************************************************************
|
||||
*/
|
||||
|
||||
#ifndef XENIA_KERNEL_XAM_INFO_H_
|
||||
#define XENIA_KERNEL_XAM_INFO_H_
|
||||
|
||||
#include <xenia/common.h>
|
||||
#include <xenia/core.h>
|
||||
|
||||
#include <xenia/xbox.h>
|
||||
|
||||
|
||||
namespace xe {
|
||||
namespace kernel {
|
||||
namespace xam {
|
||||
|
||||
|
||||
|
||||
|
||||
} // namespace xam
|
||||
} // namespace kernel
|
||||
} // namespace xe
|
||||
|
||||
|
||||
#endif // XENIA_KERNEL_XAM_INFO_H_
|
||||
49
src/xenia/kernel/xam/xam_input.cc
Normal file
49
src/xenia/kernel/xam/xam_input.cc
Normal file
@@ -0,0 +1,49 @@
|
||||
/**
|
||||
******************************************************************************
|
||||
* Xenia : Xbox 360 Emulator Research Project *
|
||||
******************************************************************************
|
||||
* Copyright 2013 Ben Vanik. All rights reserved. *
|
||||
* Released under the BSD license - see LICENSE in the root for more details. *
|
||||
******************************************************************************
|
||||
*/
|
||||
|
||||
#include <xenia/kernel/xam/xam_input.h>
|
||||
|
||||
#include <xenia/kernel/shim_utils.h>
|
||||
#include <xenia/kernel/xam/xam_private.h>
|
||||
#include <xenia/kernel/xam/xam_state.h>
|
||||
|
||||
|
||||
using namespace xe;
|
||||
using namespace xe::kernel;
|
||||
using namespace xe::kernel::xam;
|
||||
|
||||
|
||||
namespace xe {
|
||||
namespace kernel {
|
||||
namespace xam {
|
||||
|
||||
|
||||
SHIM_CALL XamInputGetState_shim(
|
||||
xe_ppc_state_t* ppc_state, XamState* state) {
|
||||
uint32_t user_index = SHIM_GET_ARG_32(0);
|
||||
uint32_t state_ptr = SHIM_GET_ARG_32(1);
|
||||
|
||||
XELOGD(
|
||||
"XamInputGetState(%d, %.8X)",
|
||||
user_index,
|
||||
state_ptr);
|
||||
|
||||
SHIM_SET_RETURN(X_STATUS_NOT_IMPLEMENTED);
|
||||
}
|
||||
|
||||
|
||||
} // namespace xam
|
||||
} // namespace kernel
|
||||
} // namespace xe
|
||||
|
||||
|
||||
void xe::kernel::xam::RegisterInputExports(
|
||||
ExportResolver* export_resolver, XamState* state) {
|
||||
SHIM_SET_MAPPING("xam.xex", XamInputGetState, state);
|
||||
}
|
||||
31
src/xenia/kernel/xam/xam_input.h
Normal file
31
src/xenia/kernel/xam/xam_input.h
Normal file
@@ -0,0 +1,31 @@
|
||||
/**
|
||||
******************************************************************************
|
||||
* Xenia : Xbox 360 Emulator Research Project *
|
||||
******************************************************************************
|
||||
* Copyright 2013 Ben Vanik. All rights reserved. *
|
||||
* Released under the BSD license - see LICENSE in the root for more details. *
|
||||
******************************************************************************
|
||||
*/
|
||||
|
||||
#ifndef XENIA_KERNEL_XAM_INPUT_H_
|
||||
#define XENIA_KERNEL_XAM_INPUT_H_
|
||||
|
||||
#include <xenia/common.h>
|
||||
#include <xenia/core.h>
|
||||
|
||||
#include <xenia/xbox.h>
|
||||
|
||||
|
||||
namespace xe {
|
||||
namespace kernel {
|
||||
namespace xam {
|
||||
|
||||
|
||||
|
||||
|
||||
} // namespace xam
|
||||
} // namespace kernel
|
||||
} // namespace xe
|
||||
|
||||
|
||||
#endif // XENIA_KERNEL_XAM_INPUT_H_
|
||||
55
src/xenia/kernel/xam/xam_module.cc
Normal file
55
src/xenia/kernel/xam/xam_module.cc
Normal file
@@ -0,0 +1,55 @@
|
||||
/**
|
||||
******************************************************************************
|
||||
* Xenia : Xbox 360 Emulator Research Project *
|
||||
******************************************************************************
|
||||
* Copyright 2013 Ben Vanik. All rights reserved. *
|
||||
* Released under the BSD license - see LICENSE in the root for more details. *
|
||||
******************************************************************************
|
||||
*/
|
||||
|
||||
#include <xenia/kernel/xam/xam_module.h>
|
||||
|
||||
#include <xenia/export_resolver.h>
|
||||
#include <xenia/kernel/xam/xam_private.h>
|
||||
#include <xenia/kernel/xam/xam_state.h>
|
||||
|
||||
|
||||
using namespace xe;
|
||||
using namespace xe::kernel;
|
||||
using namespace xe::kernel::xam;
|
||||
|
||||
|
||||
XamState* xe::kernel::xam::shared_xam_state_ = NULL;
|
||||
|
||||
|
||||
XamModule::XamModule(Emulator* emulator) :
|
||||
KernelModule(emulator) {
|
||||
// Build the export table used for resolution.
|
||||
#include <xenia/kernel/util/export_table_pre.inc>
|
||||
static KernelExport xam_export_table[] = {
|
||||
#include <xenia/kernel/xam/xam_table.inc>
|
||||
};
|
||||
#include <xenia/kernel/util/export_table_post.inc>
|
||||
export_resolver_->RegisterTable(
|
||||
"xam.xex", xam_export_table, XECOUNT(xam_export_table));
|
||||
|
||||
// Setup the xam state instance.
|
||||
xam_state_ = new XamState(emulator);
|
||||
|
||||
// Setup the shared global state object.
|
||||
XEASSERTNULL(shared_xam_state_);
|
||||
shared_xam_state_ = xam_state_;
|
||||
|
||||
// Register all exported functions.
|
||||
RegisterContentExports(export_resolver_, xam_state_);
|
||||
RegisterInfoExports(export_resolver_, xam_state_);
|
||||
RegisterInputExports(export_resolver_, xam_state_);
|
||||
RegisterNetExports(export_resolver_, xam_state_);
|
||||
RegisterUserExports(export_resolver_, xam_state_);
|
||||
RegisterVideoExports(export_resolver_, xam_state_);
|
||||
}
|
||||
|
||||
XamModule::~XamModule() {
|
||||
// Clear the shared XAM state.
|
||||
shared_xam_state_ = NULL;
|
||||
}
|
||||
46
src/xenia/kernel/xam/xam_module.h
Normal file
46
src/xenia/kernel/xam/xam_module.h
Normal file
@@ -0,0 +1,46 @@
|
||||
/**
|
||||
******************************************************************************
|
||||
* Xenia : Xbox 360 Emulator Research Project *
|
||||
******************************************************************************
|
||||
* Copyright 2013 Ben Vanik. All rights reserved. *
|
||||
* Released under the BSD license - see LICENSE in the root for more details. *
|
||||
******************************************************************************
|
||||
*/
|
||||
|
||||
#ifndef XENIA_KERNEL_XAM_H_
|
||||
#define XENIA_KERNEL_XAM_H_
|
||||
|
||||
#include <xenia/common.h>
|
||||
#include <xenia/core.h>
|
||||
|
||||
#include <xenia/export_resolver.h>
|
||||
#include <xenia/kernel/kernel_module.h>
|
||||
#include <xenia/kernel/xam/xam_ordinals.h>
|
||||
|
||||
// All of the exported functions:
|
||||
#include <xenia/kernel/xam/xam_info.h>
|
||||
|
||||
|
||||
namespace xe {
|
||||
namespace kernel {
|
||||
namespace xam {
|
||||
|
||||
class XamState;
|
||||
|
||||
|
||||
class XamModule : public KernelModule {
|
||||
public:
|
||||
XamModule(Emulator* emulator);
|
||||
virtual ~XamModule();
|
||||
|
||||
private:
|
||||
XamState* xam_state_;
|
||||
};
|
||||
|
||||
|
||||
} // namespace xam
|
||||
} // namespace kernel
|
||||
} // namespace xe
|
||||
|
||||
|
||||
#endif // XENIA_KERNEL_XAM_H_
|
||||
76
src/xenia/kernel/xam/xam_net.cc
Normal file
76
src/xenia/kernel/xam/xam_net.cc
Normal file
@@ -0,0 +1,76 @@
|
||||
/**
|
||||
******************************************************************************
|
||||
* Xenia : Xbox 360 Emulator Research Project *
|
||||
******************************************************************************
|
||||
* Copyright 2013 Ben Vanik. All rights reserved. *
|
||||
* Released under the BSD license - see LICENSE in the root for more details. *
|
||||
******************************************************************************
|
||||
*/
|
||||
|
||||
#include <xenia/kernel/xam/xam_net.h>
|
||||
|
||||
#include <xenia/kernel/shim_utils.h>
|
||||
#include <xenia/kernel/xam/xam_private.h>
|
||||
#include <xenia/kernel/xam/xam_state.h>
|
||||
|
||||
|
||||
using namespace xe;
|
||||
using namespace xe::kernel;
|
||||
using namespace xe::kernel::xam;
|
||||
|
||||
|
||||
namespace xe {
|
||||
namespace kernel {
|
||||
namespace xam {
|
||||
|
||||
|
||||
SHIM_CALL NetDll_XNetStartup_shim(
|
||||
xe_ppc_state_t* ppc_state, XamState* state) {
|
||||
uint32_t one = SHIM_GET_ARG_32(0);
|
||||
uint32_t params_ptr = SHIM_GET_ARG_32(1);
|
||||
|
||||
XELOGD(
|
||||
"NetDll_XNetStartup(%d, %.8X)",
|
||||
one,
|
||||
params_ptr);
|
||||
|
||||
SHIM_SET_RETURN(0);
|
||||
}
|
||||
|
||||
|
||||
SHIM_CALL NetDll_WSAStartup_shim(
|
||||
xe_ppc_state_t* ppc_state, XamState* state) {
|
||||
uint32_t one = SHIM_GET_ARG_32(0);
|
||||
uint32_t version = SHIM_GET_ARG_16(1);
|
||||
uint32_t data_ptr = SHIM_GET_ARG_32(2);
|
||||
|
||||
XELOGD(
|
||||
"NetDll_WSAStartup(%d, %.4X, %.8X)",
|
||||
one,
|
||||
version,
|
||||
data_ptr);
|
||||
|
||||
if (data_ptr) {
|
||||
SHIM_SET_MEM_16(data_ptr + 0x000, version);
|
||||
SHIM_SET_MEM_16(data_ptr + 0x002, 0);
|
||||
SHIM_SET_MEM_32(data_ptr + 0x004, 0);
|
||||
SHIM_SET_MEM_32(data_ptr + 0x105, 0);
|
||||
SHIM_SET_MEM_16(data_ptr + 0x186, 0);
|
||||
SHIM_SET_MEM_16(data_ptr + 0x188, 0);
|
||||
SHIM_SET_MEM_32(data_ptr + 0x190, 0);
|
||||
}
|
||||
|
||||
SHIM_SET_RETURN(0);
|
||||
}
|
||||
|
||||
|
||||
} // namespace xam
|
||||
} // namespace kernel
|
||||
} // namespace xe
|
||||
|
||||
|
||||
void xe::kernel::xam::RegisterNetExports(
|
||||
ExportResolver* export_resolver, XamState* state) {
|
||||
SHIM_SET_MAPPING("xam.xex", NetDll_XNetStartup, state);
|
||||
SHIM_SET_MAPPING("xam.xex", NetDll_WSAStartup, state);
|
||||
}
|
||||
31
src/xenia/kernel/xam/xam_net.h
Normal file
31
src/xenia/kernel/xam/xam_net.h
Normal file
@@ -0,0 +1,31 @@
|
||||
/**
|
||||
******************************************************************************
|
||||
* Xenia : Xbox 360 Emulator Research Project *
|
||||
******************************************************************************
|
||||
* Copyright 2013 Ben Vanik. All rights reserved. *
|
||||
* Released under the BSD license - see LICENSE in the root for more details. *
|
||||
******************************************************************************
|
||||
*/
|
||||
|
||||
#ifndef XENIA_KERNEL_XAM_NET_H_
|
||||
#define XENIA_KERNEL_XAM_NET_H_
|
||||
|
||||
#include <xenia/common.h>
|
||||
#include <xenia/core.h>
|
||||
|
||||
#include <xenia/xbox.h>
|
||||
|
||||
|
||||
namespace xe {
|
||||
namespace kernel {
|
||||
namespace xam {
|
||||
|
||||
|
||||
|
||||
|
||||
} // namespace xam
|
||||
} // namespace kernel
|
||||
} // namespace xe
|
||||
|
||||
|
||||
#endif // XENIA_KERNEL_XAM_NET_H_
|
||||
29
src/xenia/kernel/xam/xam_ordinals.h
Normal file
29
src/xenia/kernel/xam/xam_ordinals.h
Normal file
@@ -0,0 +1,29 @@
|
||||
/**
|
||||
******************************************************************************
|
||||
* Xenia : Xbox 360 Emulator Research Project *
|
||||
******************************************************************************
|
||||
* Copyright 2013 Ben Vanik. All rights reserved. *
|
||||
* Released under the BSD license - see LICENSE in the root for more details. *
|
||||
******************************************************************************
|
||||
*/
|
||||
|
||||
#ifndef XENIA_KERNEL_XAM_ORDINALS_H_
|
||||
#define XENIA_KERNEL_XAM_ORDINALS_H_
|
||||
|
||||
#include <xenia/common.h>
|
||||
#include <xenia/core.h>
|
||||
|
||||
#include <xenia/export_resolver.h>
|
||||
|
||||
|
||||
// Build an ordinal enum to make it easy to lookup ordinals.
|
||||
#include <xenia/kernel/util/ordinal_table_pre.inc>
|
||||
namespace ordinals {
|
||||
enum {
|
||||
#include <xenia/kernel/xam/xam_table.inc>
|
||||
};
|
||||
} // namespace ordinals
|
||||
#include <xenia/kernel/util/ordinal_table_post.inc>
|
||||
|
||||
|
||||
#endif // XENIA_KERNEL_XAM_ORDINALS_H_
|
||||
46
src/xenia/kernel/xam/xam_private.h
Normal file
46
src/xenia/kernel/xam/xam_private.h
Normal file
@@ -0,0 +1,46 @@
|
||||
/**
|
||||
******************************************************************************
|
||||
* Xenia : Xbox 360 Emulator Research Project *
|
||||
******************************************************************************
|
||||
* Copyright 2013 Ben Vanik. All rights reserved. *
|
||||
* Released under the BSD license - see LICENSE in the root for more details. *
|
||||
******************************************************************************
|
||||
*/
|
||||
|
||||
#ifndef XENIA_KERNEL_XAM_PRIVATE_H_
|
||||
#define XENIA_KERNEL_XAM_PRIVATE_H_
|
||||
|
||||
#include <xenia/common.h>
|
||||
#include <xenia/core.h>
|
||||
|
||||
#include <xenia/kernel/xam/xam_ordinals.h>
|
||||
|
||||
|
||||
namespace xe {
|
||||
namespace kernel {
|
||||
namespace xam {
|
||||
|
||||
class XamState;
|
||||
|
||||
|
||||
// This is a global object initialized with the XamModule.
|
||||
// It references the current xam state object that all xam methods should
|
||||
// be using to stash their variables.
|
||||
extern XamState* shared_xam_state_;
|
||||
|
||||
|
||||
// Registration functions, one per file.
|
||||
void RegisterContentExports(ExportResolver* export_resolver, XamState* state);
|
||||
void RegisterInfoExports(ExportResolver* export_resolver, XamState* state);
|
||||
void RegisterInputExports(ExportResolver* export_resolver, XamState* state);
|
||||
void RegisterNetExports(ExportResolver* export_resolver, XamState* state);
|
||||
void RegisterUserExports(ExportResolver* export_resolver, XamState* state);
|
||||
void RegisterVideoExports(ExportResolver* export_resolver, XamState* state);
|
||||
|
||||
|
||||
} // namespace xam
|
||||
} // namespace kernel
|
||||
} // namespace xe
|
||||
|
||||
|
||||
#endif // XENIA_KERNEL_XAM_PRIVATE_H_
|
||||
33
src/xenia/kernel/xam/xam_state.cc
Normal file
33
src/xenia/kernel/xam/xam_state.cc
Normal file
@@ -0,0 +1,33 @@
|
||||
/**
|
||||
******************************************************************************
|
||||
* Xenia : Xbox 360 Emulator Research Project *
|
||||
******************************************************************************
|
||||
* Copyright 2013 Ben Vanik. All rights reserved. *
|
||||
* Released under the BSD license - see LICENSE in the root for more details. *
|
||||
******************************************************************************
|
||||
*/
|
||||
|
||||
#include <xenia/kernel/xam/xam_state.h>
|
||||
|
||||
#include <xenia/emulator.h>
|
||||
|
||||
|
||||
using namespace xe;
|
||||
using namespace xe::kernel;
|
||||
using namespace xe::kernel::xam;
|
||||
|
||||
|
||||
namespace {
|
||||
|
||||
}
|
||||
|
||||
|
||||
XamState::XamState(Emulator* emulator) :
|
||||
emulator_(emulator) {
|
||||
memory_ = xe_memory_retain(emulator->memory());
|
||||
export_resolver_ = emulator->export_resolver();
|
||||
}
|
||||
|
||||
XamState::~XamState() {
|
||||
xe_memory_release(memory_);
|
||||
}
|
||||
44
src/xenia/kernel/xam/xam_state.h
Normal file
44
src/xenia/kernel/xam/xam_state.h
Normal file
@@ -0,0 +1,44 @@
|
||||
/**
|
||||
******************************************************************************
|
||||
* Xenia : Xbox 360 Emulator Research Project *
|
||||
******************************************************************************
|
||||
* Copyright 2013 Ben Vanik. All rights reserved. *
|
||||
* Released under the BSD license - see LICENSE in the root for more details. *
|
||||
******************************************************************************
|
||||
*/
|
||||
|
||||
#ifndef XENIA_KERNEL_XAM_XAM_STATE_H_
|
||||
#define XENIA_KERNEL_XAM_XAM_STATE_H_
|
||||
|
||||
#include <xenia/common.h>
|
||||
#include <xenia/core.h>
|
||||
|
||||
#include <xenia/export_resolver.h>
|
||||
#include <xenia/kernel/kernel_module.h>
|
||||
|
||||
|
||||
namespace xe {
|
||||
namespace kernel {
|
||||
namespace xam {
|
||||
|
||||
|
||||
class XamState {
|
||||
public:
|
||||
XamState(Emulator* emulator);
|
||||
~XamState();
|
||||
|
||||
xe_memory_ref memory() const { return memory_; }
|
||||
|
||||
private:
|
||||
Emulator* emulator_;
|
||||
xe_memory_ref memory_;
|
||||
ExportResolver* export_resolver_;
|
||||
};
|
||||
|
||||
|
||||
} // namespace xam
|
||||
} // namespace kernel
|
||||
} // namespace xe
|
||||
|
||||
|
||||
#endif // XENIA_KERNEL_XAM_XAM_STATE_H_
|
||||
1406
src/xenia/kernel/xam/xam_table.inc
Normal file
1406
src/xenia/kernel/xam/xam_table.inc
Normal file
File diff suppressed because it is too large
Load Diff
69
src/xenia/kernel/xam/xam_user.cc
Normal file
69
src/xenia/kernel/xam/xam_user.cc
Normal file
@@ -0,0 +1,69 @@
|
||||
/**
|
||||
******************************************************************************
|
||||
* Xenia : Xbox 360 Emulator Research Project *
|
||||
******************************************************************************
|
||||
* Copyright 2013 Ben Vanik. All rights reserved. *
|
||||
* Released under the BSD license - see LICENSE in the root for more details. *
|
||||
******************************************************************************
|
||||
*/
|
||||
|
||||
#include <xenia/kernel/xam/xam_user.h>
|
||||
|
||||
#include <xenia/kernel/shim_utils.h>
|
||||
#include <xenia/kernel/xam/xam_private.h>
|
||||
#include <xenia/kernel/xam/xam_state.h>
|
||||
|
||||
|
||||
using namespace xe;
|
||||
using namespace xe::kernel;
|
||||
using namespace xe::kernel::xam;
|
||||
|
||||
|
||||
namespace xe {
|
||||
namespace kernel {
|
||||
namespace xam {
|
||||
|
||||
|
||||
SHIM_CALL XamUserGetXUID_shim(
|
||||
xe_ppc_state_t* ppc_state, XamState* state) {
|
||||
uint32_t user_index = SHIM_GET_ARG_32(0);
|
||||
uint32_t xuid_ptr = SHIM_GET_ARG_32(1);
|
||||
|
||||
XELOGD(
|
||||
"XamUserGetXUID(%d, %.8X)",
|
||||
user_index,
|
||||
xuid_ptr);
|
||||
|
||||
if (xuid_ptr) {
|
||||
SHIM_SET_MEM_32(xuid_ptr, 0xBABEBABE);
|
||||
}
|
||||
|
||||
SHIM_SET_RETURN(0);
|
||||
}
|
||||
|
||||
|
||||
SHIM_CALL XamUserGetSigninState_shim(
|
||||
xe_ppc_state_t* ppc_state, XamState* state) {
|
||||
uint32_t user_index = SHIM_GET_ARG_32(0);
|
||||
|
||||
XELOGD(
|
||||
"XamUserGetSigninState(%d)",
|
||||
user_index);
|
||||
|
||||
SHIM_SET_RETURN(0);
|
||||
}
|
||||
|
||||
|
||||
// XamUserReadProfileSettings
|
||||
|
||||
|
||||
} // namespace xam
|
||||
} // namespace kernel
|
||||
} // namespace xe
|
||||
|
||||
|
||||
void xe::kernel::xam::RegisterUserExports(
|
||||
ExportResolver* export_resolver, XamState* state) {
|
||||
SHIM_SET_MAPPING("xam.xex", XamUserGetXUID, state);
|
||||
SHIM_SET_MAPPING("xam.xex", XamUserGetSigninState, state);
|
||||
}
|
||||
31
src/xenia/kernel/xam/xam_user.h
Normal file
31
src/xenia/kernel/xam/xam_user.h
Normal file
@@ -0,0 +1,31 @@
|
||||
/**
|
||||
******************************************************************************
|
||||
* Xenia : Xbox 360 Emulator Research Project *
|
||||
******************************************************************************
|
||||
* Copyright 2013 Ben Vanik. All rights reserved. *
|
||||
* Released under the BSD license - see LICENSE in the root for more details. *
|
||||
******************************************************************************
|
||||
*/
|
||||
|
||||
#ifndef XENIA_KERNEL_XAM_USER_H_
|
||||
#define XENIA_KERNEL_XAM_USER_H_
|
||||
|
||||
#include <xenia/common.h>
|
||||
#include <xenia/core.h>
|
||||
|
||||
#include <xenia/xbox.h>
|
||||
|
||||
|
||||
namespace xe {
|
||||
namespace kernel {
|
||||
namespace xam {
|
||||
|
||||
|
||||
|
||||
|
||||
} // namespace xam
|
||||
} // namespace kernel
|
||||
} // namespace xe
|
||||
|
||||
|
||||
#endif // XENIA_KERNEL_XAM_USER_H_
|
||||
44
src/xenia/kernel/xam/xam_video.cc
Normal file
44
src/xenia/kernel/xam/xam_video.cc
Normal file
@@ -0,0 +1,44 @@
|
||||
/**
|
||||
******************************************************************************
|
||||
* Xenia : Xbox 360 Emulator Research Project *
|
||||
******************************************************************************
|
||||
* Copyright 2013 Ben Vanik. All rights reserved. *
|
||||
* Released under the BSD license - see LICENSE in the root for more details. *
|
||||
******************************************************************************
|
||||
*/
|
||||
|
||||
#include <xenia/kernel/xam/xam_video.h>
|
||||
|
||||
#include <xenia/kernel/shim_utils.h>
|
||||
#include <xenia/kernel/xam/xam_private.h>
|
||||
#include <xenia/kernel/xam/xam_state.h>
|
||||
|
||||
#include <xenia/kernel/modules.h>
|
||||
|
||||
|
||||
using namespace xe;
|
||||
using namespace xe::kernel;
|
||||
using namespace xe::kernel::xam;
|
||||
|
||||
|
||||
namespace xe {
|
||||
namespace kernel {
|
||||
namespace xam {
|
||||
|
||||
|
||||
SHIM_CALL XGetVideoMode_shim(
|
||||
xe_ppc_state_t* ppc_state, XamState* state) {
|
||||
xe::kernel::xboxkrnl::X_VIDEO_MODE *video_mode = (xe::kernel::xboxkrnl::X_VIDEO_MODE*)SHIM_MEM_ADDR(SHIM_GET_ARG_32(0));
|
||||
xeVdQueryVideoMode(video_mode, true);
|
||||
}
|
||||
|
||||
|
||||
} // namespace xam
|
||||
} // namespace kernel
|
||||
} // namespace xe
|
||||
|
||||
|
||||
void xe::kernel::xam::RegisterVideoExports(
|
||||
ExportResolver* export_resolver, XamState* state) {
|
||||
SHIM_SET_MAPPING("xam.xex", XGetVideoMode, state);
|
||||
}
|
||||
31
src/xenia/kernel/xam/xam_video.h
Normal file
31
src/xenia/kernel/xam/xam_video.h
Normal file
@@ -0,0 +1,31 @@
|
||||
/**
|
||||
******************************************************************************
|
||||
* Xenia : Xbox 360 Emulator Research Project *
|
||||
******************************************************************************
|
||||
* Copyright 2013 Ben Vanik. All rights reserved. *
|
||||
* Released under the BSD license - see LICENSE in the root for more details. *
|
||||
******************************************************************************
|
||||
*/
|
||||
|
||||
#ifndef XENIA_KERNEL_XAM_VIDEO_H_
|
||||
#define XENIA_KERNEL_XAM_VIDEO_H_
|
||||
|
||||
#include <xenia/common.h>
|
||||
#include <xenia/core.h>
|
||||
|
||||
#include <xenia/xbox.h>
|
||||
|
||||
|
||||
namespace xe {
|
||||
namespace kernel {
|
||||
namespace xam {
|
||||
|
||||
|
||||
|
||||
|
||||
} // namespace xam
|
||||
} // namespace kernel
|
||||
} // namespace xe
|
||||
|
||||
|
||||
#endif // XENIA_KERNEL_XAM_VIDEO_H_
|
||||
Reference in New Issue
Block a user