mirror of
https://github.com/ran-j/PS2Recomp.git
synced 2026-09-29 17:58:24 -04:00
feat: added missing v0 instructions
feat: added threads inplementation on ps2 syscalls feat: patch entrypoint on recompiler feat: ps2 macros now is part of the runtime feat: use thread to hold game loop feat: sanitize functions like point out by chrisking1981 fix: fix old instructions cast fix: fix missing patch for opcode j
This commit is contained in:
@@ -10,6 +10,7 @@
|
||||
|
||||
namespace ps2recomp
|
||||
{
|
||||
extern const std::unordered_set<std::string> kKeywords;
|
||||
|
||||
class CodeGenerator
|
||||
{
|
||||
@@ -17,6 +18,15 @@ namespace ps2recomp
|
||||
CodeGenerator(const std::vector<Symbol> &symbols);
|
||||
~CodeGenerator();
|
||||
|
||||
struct BootstrapInfo
|
||||
{
|
||||
bool valid = false;
|
||||
uint32_t entry = 0;
|
||||
uint32_t bssStart = 0;
|
||||
uint32_t bssEnd = 0;
|
||||
uint32_t gp = 0;
|
||||
};
|
||||
|
||||
std::string generateFunction(const Function &function, const std::vector<Instruction> &instructions, const bool &useHeaders);
|
||||
std::string generateFunctionRegistration(const std::vector<Function> &functions, const std::map<uint32_t, std::string> &stubs);
|
||||
std::string generateMacroHeader();
|
||||
@@ -24,12 +34,14 @@ namespace ps2recomp
|
||||
const Function &function, const std::unordered_set<uint32_t> &internalTargets);
|
||||
|
||||
void setRenamedFunctions(const std::unordered_map<uint32_t, std::string> &renames);
|
||||
void setBootstrapInfo(const BootstrapInfo &info);
|
||||
std::unordered_set<uint32_t> collectInternalBranchTargets(const Function &function,
|
||||
const std::vector<Instruction> &instructions);
|
||||
|
||||
public:
|
||||
std::vector<Symbol> m_symbols;
|
||||
std::unordered_map<uint32_t, std::string> m_renamedFunctions;
|
||||
BootstrapInfo m_bootstrapInfo;
|
||||
|
||||
std::string translateInstruction(const Instruction &inst);
|
||||
std::string translateMMIInstruction(const Instruction &inst);
|
||||
@@ -104,9 +116,11 @@ namespace ps2recomp
|
||||
// Jump Table Generation
|
||||
std::string generateJumpTableSwitch(const Instruction &inst, uint32_t tableAddress,
|
||||
const std::vector<JumpTableEntry> &entries);
|
||||
std::string generateBootstrapFunction() const;
|
||||
|
||||
Symbol *findSymbolByAddress(uint32_t address);
|
||||
std::string getFunctionName(uint32_t address);
|
||||
std::string getGeneratedFunctionName(const Function &function);
|
||||
};
|
||||
|
||||
}
|
||||
|
||||
@@ -29,6 +29,7 @@ namespace ps2recomp
|
||||
uint8_t *getSectionData(const std::string §ionName);
|
||||
uint32_t getSectionAddress(const std::string §ionName);
|
||||
uint32_t getSectionSize(const std::string §ionName);
|
||||
uint32_t getEntryPoint() const;
|
||||
|
||||
private:
|
||||
std::string m_filePath;
|
||||
|
||||
@@ -39,6 +39,8 @@ namespace ps2recomp
|
||||
std::unordered_map<uint32_t, std::vector<Instruction>> m_decodedFunctions;
|
||||
std::unordered_map<std::string, bool> m_skipFunctions;
|
||||
std::map<uint32_t, std::string> m_generatedStubs;
|
||||
std::unordered_map<uint32_t, std::string> m_functionRenames;
|
||||
CodeGenerator::BootstrapInfo m_bootstrapInfo;
|
||||
|
||||
bool decodeFunction(Function &function);
|
||||
void discoverAdditionalEntryPoints();
|
||||
|
||||
Reference in New Issue
Block a user