2013-12-07 06:57:16 +00:00
|
|
|
/**
|
|
|
|
******************************************************************************
|
|
|
|
* 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/xenia.h>
|
|
|
|
#include <alloy/alloy.h>
|
|
|
|
|
|
|
|
#include <alloy/runtime/raw_module.h>
|
|
|
|
#include <xenia/cpu/xenon_memory.h>
|
|
|
|
#include <xenia/cpu/xenon_runtime.h>
|
|
|
|
|
|
|
|
#include <gflags/gflags.h>
|
|
|
|
|
|
|
|
using namespace alloy;
|
|
|
|
using namespace alloy::backend;
|
|
|
|
using namespace alloy::runtime;
|
|
|
|
using namespace xe;
|
|
|
|
using namespace xe::cpu;
|
|
|
|
|
|
|
|
|
|
|
|
int alloy_sandbox(int argc, xechar_t** argv) {
|
|
|
|
XenonMemory* memory = new XenonMemory();
|
|
|
|
|
|
|
|
ExportResolver* export_resolver = new ExportResolver();
|
|
|
|
XenonRuntime* runtime = new XenonRuntime(memory, export_resolver);
|
|
|
|
|
|
|
|
Backend* backend = 0;
|
|
|
|
// Backend* backend = new alloy::backend::interpreter::InterpreterBackend(
|
|
|
|
// runtime);
|
|
|
|
// Backend* backend = new alloy::backend::x64::X64Backend(
|
|
|
|
// runtime);
|
|
|
|
runtime->Initialize(backend);
|
|
|
|
|
2013-12-22 22:04:41 +00:00
|
|
|
RawModule* module = new RawModule(runtime);
|
2013-12-07 06:57:16 +00:00
|
|
|
module->LoadFile(0x82000000, "test\\codegen\\instr_add.bin");
|
|
|
|
runtime->AddModule(module);
|
|
|
|
|
|
|
|
XenonThreadState* thread_state = new XenonThreadState(
|
|
|
|
runtime, 100, 64 * 1024, 0);
|
|
|
|
|
|
|
|
Function* fn;
|
|
|
|
runtime->ResolveFunction(0x82000000, &fn);
|
2013-12-25 00:23:53 +00:00
|
|
|
auto ctx = thread_state->context();
|
|
|
|
ctx->lr = 0xBEBEBEBE;
|
|
|
|
ctx->r[5] = 10;
|
|
|
|
ctx->r[25] = 25;
|
2013-12-08 21:58:57 +00:00
|
|
|
fn->Call(thread_state, 0xBEBEBEBE);
|
2013-12-25 00:23:53 +00:00
|
|
|
auto result = ctx->r[11];
|
2013-12-07 06:57:16 +00:00
|
|
|
|
|
|
|
delete thread_state;
|
|
|
|
|
|
|
|
delete runtime;
|
|
|
|
delete memory;
|
|
|
|
|
2013-12-25 00:23:53 +00:00
|
|
|
return 0;
|
2013-12-07 06:57:16 +00:00
|
|
|
}
|
|
|
|
// ehhh
|
|
|
|
#include <xenia/platform.cc>
|
|
|
|
XE_MAIN_THUNK(alloy_sandbox, "alloy-sandbox");
|