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 std::map<std::string, AsarSymbol> GetSymbolTable() const;
79 std::optional<AsarSymbol> FindSymbol(const std::string& name) const;
80 std::vector<AsarSymbol> GetSymbolsAtAddress(uint32_t address) const;
81
82 void Reset();
83
84 std::vector<std::string> GetLastErrors() const { return last_errors_; }
85 std::vector<std::string> GetLastWarnings() const { return last_warnings_; }
86
87 absl::Status CreatePatch(const std::vector<uint8_t>& original_rom,
88 const std::vector<uint8_t>& modified_rom,
89 const std::string& patch_path);
90
91 absl::Status ValidateAssembly(const std::string& asm_path);
92
93 private:
95 std::map<std::string, AsarSymbol> symbol_table_;
96 std::vector<std::string> last_errors_;
97 std::vector<std::string> last_warnings_;
98
99 void ProcessErrors();
100 void ProcessWarnings();
102 AsarSymbol ConvertAsarSymbol(const void* asar_symbol_data) const;
103};
104
105} // namespace core
106} // namespace yaze
107
108#endif // YAZE_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="")
AsarSymbol ConvertAsarSymbol(const void *asar_symbol_data) const
std::vector< std::string > GetLastWarnings() const
std::vector< std::string > GetLastErrors() const
bool IsInitialized() const
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::map< std::string, AsarSymbol > symbol_table_
absl::Status Initialize()
absl::StatusOr< AsarPatchResult > ApplyPatch(const std::string &patch_path, std::vector< uint8_t > &rom_data, const std::vector< std::string > &include_paths={})
std::vector< std::string > last_errors_
AsarWrapper(AsarWrapper &&)=default
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
Main namespace for the application.
Definition controller.cc:20
Asar patch result information.
std::vector< std::string > errors
std::vector< AsarSymbol > symbols
std::vector< std::string > warnings
Symbol information extracted from Asar assembly.