xenia-canary/src/xenia/cpu/xex_module.h

75 lines
2.1 KiB
C
Raw Normal View History

/**
******************************************************************************
* 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_CPU_XEX_MODULE_H_
#define XENIA_CPU_XEX_MODULE_H_
2014-07-14 04:15:37 +00:00
#include <string>
2015-03-24 15:25:58 +00:00
#include "xenia/cpu/module.h"
2015-02-01 06:49:47 +00:00
#include "xenia/kernel/util/xex2.h"
2015-06-29 05:48:24 +00:00
#include "xenia/kernel/util/xex2_info.h"
namespace xe {
// KernelState forward decl.
namespace kernel {
class KernelState;
}
namespace cpu {
2015-03-24 15:25:58 +00:00
class Runtime;
2015-03-24 15:25:58 +00:00
class XexModule : public xe::cpu::Module {
public:
2015-05-31 23:58:12 +00:00
XexModule(Processor* processor, kernel::KernelState* kernel_state);
virtual ~XexModule();
2013-12-25 01:25:29 +00:00
xe_xex2_ref xex() const { return xex_; }
2015-06-29 05:48:24 +00:00
const xex2_header* xex_header() const { return xex_header_; }
2013-12-25 01:25:29 +00:00
2015-06-29 05:48:24 +00:00
// Gets an optional header. Returns NULL if not found.
// Special case: if key & 0xFF == 0x00, this function will return the value,
// not a pointer!
static bool GetOptHeader(const xex2_header* header, xe_xex2_header_keys key,
void** out_ptr);
bool ApplyPatch(XexModule* module);
bool Load(const std::string& name, const std::string& path,
const void* xex_addr, size_t xex_length);
2015-05-06 00:21:08 +00:00
bool Load(const std::string& name, const std::string& path, xe_xex2_ref xex);
2014-07-14 04:15:37 +00:00
const std::string& name() const override { return name_; }
bool ContainsAddress(uint32_t address) override;
private:
2015-05-06 00:21:08 +00:00
bool SetupImports(xe_xex2_ref xex);
bool SetupLibraryImports(const xe_xex2_import_library_t* library);
bool FindSaveRest();
private:
2015-05-04 05:28:25 +00:00
Processor* processor_;
kernel::KernelState* kernel_state_;
std::string name_;
std::string path_;
xe_xex2_ref xex_;
2015-06-29 05:48:24 +00:00
xex2_header* xex_header_;
uint32_t base_address_;
uint32_t low_address_;
uint32_t high_address_;
};
} // namespace cpu
} // namespace xe
#endif // XENIA_CPU_XEX_MODULE_H_