yaze 0.3.2
Link to the Past ROM Editor
 
Loading...
Searching...
No Matches
asar_wrapper.h
Go to the documentation of this file.
1#ifndef YAZE_CORE_ASAR_WRAPPER_H
2#define YAZE_CORE_ASAR_WRAPPER_H
3
4#include <map>
5#include <memory>
6#include <optional>
7#include <string>
8#include <vector>
9
10#include "absl/status/status.h"
11#include "absl/status/statusor.h"
12
13namespace yaze {
14namespace core {
15
19struct AsarSymbol {
20 std::string name; // Symbol name
21 uint32_t address; // Memory address
22 std::string opcode; // Associated opcode if available
23 std::string file; // Source file
24 int line; // Line number in source
25 std::string comment; // Optional comment
26};
27
32 bool success; // Whether patch was successful
33 std::vector<std::string> errors; // Error messages if any
34 std::vector<std::string> warnings; // Warning messages
35 std::vector<AsarSymbol> symbols; // Extracted symbols
36 uint32_t rom_size; // Final ROM size after patching
37 uint32_t crc32; // CRC32 checksum of patched ROM
38};
39
49 public:
52
53 AsarWrapper(const AsarWrapper&) = delete;
55
58
59 absl::Status Initialize();
60 void Shutdown();
61 bool IsInitialized() const { return initialized_; }
62
63 std::string GetVersion() const;
64 int GetApiVersion() const;
65
66 absl::StatusOr<AsarPatchResult> ApplyPatch(
67 const std::string& patch_path, std::vector<uint8_t>& rom_data,
68 const std::vector<std::string>& include_paths = {});
69
70 absl::StatusOr<AsarPatchResult> ApplyPatchFromString(
71 const std::string& patch_content, std::vector<uint8_t>& rom_data,
72 const std::string& base_path = "");
73
74 absl::StatusOr<std::vector<AsarSymbol>> ExtractSymbols(
75 const std::string& asm_path,
76 const std::vector<std::string>& include_paths = {});
77
78 absl::Status LoadSymbolsFromFile(const std::string& symbol_path);
79
80 std::map<std::string, AsarSymbol> GetSymbolTable() const;
81 std::optional<AsarSymbol> FindSymbol(const std::string& name) const;
82 std::vector<AsarSymbol> GetSymbolsAtAddress(uint32_t address) const;
83
84 void Reset();
85
86 std::vector<std::string> GetLastErrors() const { return last_errors_; }
87 std::vector<std::string> GetLastWarnings() const { return last_warnings_; }
88
89 absl::Status CreatePatch(const std::vector<uint8_t>& original_rom,
90 const std::vector<uint8_t>& modified_rom,
91 const std::string& patch_path);
92
93 absl::Status ValidateAssembly(const std::string& asm_path);
94
95 private:
96 absl::StatusOr<AsarPatchResult> ApplyPatchWithBinary(
97 const std::string& patch_path, std::vector<uint8_t>& rom_data,
98 const std::vector<std::string>& include_paths);
99
100 absl::StatusOr<AsarPatchResult> ApplyPatchWithLibrary(
101 const std::string& patch_path, std::vector<uint8_t>& rom_data,
102 const std::vector<std::string>& include_paths);
103
104 std::optional<std::string> ResolveAsarBinary() const;
105
108 std::map<std::string, AsarSymbol> symbol_table_;
109 std::vector<std::string> last_errors_;
110 std::vector<std::string> last_warnings_;
111
112 void ProcessErrors();
113 void ProcessWarnings();
115 AsarSymbol ConvertAsarSymbol(const void* asar_symbol_data) const;
116};
117
118} // namespace core
119} // namespace yaze
120
121#endif // YAZE_CORE_ASAR_WRAPPER_H
Modern C++ wrapper for Asar 65816 assembler integration.
absl::StatusOr< AsarPatchResult > ApplyPatchWithBinary(const std::string &patch_path, std::vector< uint8_t > &rom_data, const std::vector< std::string > &include_paths)
absl::StatusOr< AsarPatchResult > ApplyPatchFromString(const std::string &patch_content, std::vector< uint8_t > &rom_data, const std::string &base_path="")
AsarSymbol ConvertAsarSymbol(const void *asar_symbol_data) const
std::vector< std::string > GetLastWarnings() const
std::vector< std::string > GetLastErrors() const
bool IsInitialized() const
absl::StatusOr< AsarPatchResult > ApplyPatch(const std::string &patch_path, std::vector< uint8_t > &rom_data, const std::vector< std::string > &include_paths={})
absl::Status CreatePatch(const std::vector< uint8_t > &original_rom, const std::vector< uint8_t > &modified_rom, const std::string &patch_path)
std::vector< std::string > last_warnings_
absl::Status ValidateAssembly(const std::string &asm_path)
std::optional< AsarSymbol > FindSymbol(const std::string &name) const
std::string GetVersion() const
std::optional< std::string > ResolveAsarBinary() const
std::map< std::string, AsarSymbol > symbol_table_
absl::Status Initialize()
std::vector< std::string > last_errors_
absl::StatusOr< AsarPatchResult > ApplyPatchWithLibrary(const std::string &patch_path, std::vector< uint8_t > &rom_data, const std::vector< std::string > &include_paths)
AsarWrapper(AsarWrapper &&)=default
absl::Status LoadSymbolsFromFile(const std::string &symbol_path)
absl::StatusOr< std::vector< AsarSymbol > > ExtractSymbols(const std::string &asm_path, const std::vector< std::string > &include_paths={})
AsarWrapper & operator=(const AsarWrapper &)=delete
std::vector< AsarSymbol > GetSymbolsAtAddress(uint32_t address) const
AsarWrapper(const AsarWrapper &)=delete
std::map< std::string, AsarSymbol > GetSymbolTable() const
AsarWrapper & operator=(AsarWrapper &&)=default
Asar patch result information.
std::vector< std::string > errors
std::vector< AsarSymbol > symbols
std::vector< std::string > warnings
Symbol information extracted from Asar assembly.