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_APP_CORE_ASAR_WRAPPER_H
2#define YAZE_APP_CORE_ASAR_WRAPPER_H
3
4#include <string>
5#include <vector>
6#include <map>
7#include <memory>
8#include <optional>
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 // Disable copy constructor and assignment
54 AsarWrapper(const AsarWrapper&) = delete;
56
57 // Enable move constructor and assignment
60
65 absl::Status Initialize();
66
70 void Shutdown();
71
76 bool IsInitialized() const { return initialized_; }
77
82 std::string GetVersion() const;
83
88 int GetApiVersion() const;
89
97 absl::StatusOr<AsarPatchResult> ApplyPatch(
98 const std::string& patch_path,
99 std::vector<uint8_t>& rom_data,
100 const std::vector<std::string>& include_paths = {});
101
109 absl::StatusOr<AsarPatchResult> ApplyPatchFromString(
110 const std::string& patch_content,
111 std::vector<uint8_t>& rom_data,
112 const std::string& base_path = "");
113
120 absl::StatusOr<std::vector<AsarSymbol>> ExtractSymbols(
121 const std::string& asm_path,
122 const std::vector<std::string>& include_paths = {});
123
128 std::map<std::string, AsarSymbol> GetSymbolTable() const;
129
135 std::optional<AsarSymbol> FindSymbol(const std::string& name) const;
136
142 std::vector<AsarSymbol> GetSymbolsAtAddress(uint32_t address) const;
143
147 void Reset();
148
153 std::vector<std::string> GetLastErrors() const { return last_errors_; }
154
159 std::vector<std::string> GetLastWarnings() const { return last_warnings_; }
160
168 absl::Status CreatePatch(
169 const std::vector<uint8_t>& original_rom,
170 const std::vector<uint8_t>& modified_rom,
171 const std::string& patch_path);
172
178 absl::Status ValidateAssembly(const std::string& asm_path);
179
180 private:
182 std::map<std::string, AsarSymbol> symbol_table_;
183 std::vector<std::string> last_errors_;
184 std::vector<std::string> last_warnings_;
185
189 void ProcessErrors();
190
194 void ProcessWarnings();
195
200
204 AsarSymbol ConvertAsarSymbol(const void* asar_symbol_data) const;
205};
206
207} // namespace core
208} // namespace yaze
209
210#endif // YAZE_APP_CORE_ASAR_WRAPPER_H
Modern C++ wrapper for Asar 65816 assembler integration.
absl::StatusOr< AsarPatchResult > ApplyPatchFromString(const std::string &patch_content, std::vector< uint8_t > &rom_data, const std::string &base_path="")
Apply an assembly patch from string content.
AsarSymbol ConvertAsarSymbol(const void *asar_symbol_data) const
Convert Asar symbol data to AsarSymbol struct.
std::vector< std::string > GetLastWarnings() const
Get the last warning messages.
std::vector< std::string > GetLastErrors() const
Get the last error messages.
bool IsInitialized() const
Check if Asar is initialized and ready.
absl::Status CreatePatch(const std::vector< uint8_t > &original_rom, const std::vector< uint8_t > &modified_rom, const std::string &patch_path)
Create a patch that can be applied to transform one ROM to another.
void ProcessWarnings()
Process warnings from Asar and store them.
std::vector< std::string > last_warnings_
absl::Status ValidateAssembly(const std::string &asm_path)
Validate an assembly file for syntax errors.
std::optional< AsarSymbol > FindSymbol(const std::string &name) const
Find a symbol by name.
std::string GetVersion() const
Get Asar version information.
void ExtractSymbolsFromLastOperation()
Extract symbols from the last Asar operation.
void Shutdown()
Clean up and close the Asar library.
std::map< std::string, AsarSymbol > symbol_table_
void Reset()
Reset the Asar state (clear errors, warnings, symbols)
absl::Status Initialize()
Initialize the Asar library.
absl::StatusOr< AsarPatchResult > ApplyPatch(const std::string &patch_path, std::vector< uint8_t > &rom_data, const std::vector< std::string > &include_paths={})
Apply an assembly patch to a ROM.
std::vector< std::string > last_errors_
AsarWrapper(AsarWrapper &&)=default
int GetApiVersion() const
Get Asar API version.
absl::StatusOr< std::vector< AsarSymbol > > ExtractSymbols(const std::string &asm_path, const std::vector< std::string > &include_paths={})
Extract symbols from an assembly file without patching.
AsarWrapper & operator=(const AsarWrapper &)=delete
void ProcessErrors()
Process errors from Asar and store them.
std::vector< AsarSymbol > GetSymbolsAtAddress(uint32_t address) const
Get symbols at a specific address.
AsarWrapper(const AsarWrapper &)=delete
std::map< std::string, AsarSymbol > GetSymbolTable() const
Get all available symbols from the last patch operation.
AsarWrapper & operator=(AsarWrapper &&)=default
Main namespace for the application.
Asar patch result information.
std::vector< std::string > errors
std::vector< AsarSymbol > symbols
std::vector< std::string > warnings
Symbol information extracted from Asar assembly.