yaze 0.3.2
Link to the Past ROM Editor
 
Loading...
Searching...
No Matches
rom_automation_api.h
Go to the documentation of this file.
1#ifndef YAZE_CLI_AUTOMATION_ROM_AUTOMATION_API_H
2#define YAZE_CLI_AUTOMATION_ROM_AUTOMATION_API_H
3
4#include <memory>
5#include <string>
6#include <vector>
7
8#include "absl/status/status.h"
9#include "absl/status/statusor.h"
10#include "rom/rom.h"
11#include "nlohmann/json.hpp"
12
13namespace yaze {
14namespace cli {
15namespace automation {
16
24 public:
25 explicit RomAutomationAPI(Rom* rom) : rom_(rom) {}
26
27 // ============================================================================
28 // Direct ROM Operations
29 // ============================================================================
30
37 absl::StatusOr<std::vector<uint8_t>> ReadBytes(uint32_t address,
38 size_t length) const;
39
47 absl::Status WriteBytes(uint32_t address, const std::vector<uint8_t>& data,
48 bool verify = true);
49
57 absl::StatusOr<std::vector<uint32_t>> FindPattern(
58 const std::vector<uint8_t>& pattern,
59 uint32_t start_address = 0,
60 size_t max_results = 100) const;
61
62 // ============================================================================
63 // ROM State Management
64 // ============================================================================
65
69 struct RomSnapshot {
70 std::string name;
71 std::string timestamp;
72 std::vector<uint8_t> data;
73 nlohmann::json metadata;
74 bool compressed = false;
75 };
76
83 absl::StatusOr<RomSnapshot> CreateSnapshot(const std::string& name,
84 bool compress = true);
85
92 absl::Status RestoreSnapshot(const RomSnapshot& snapshot,
93 bool verify = true);
94
99 std::vector<nlohmann::json> ListSnapshots() const;
100
106 absl::StatusOr<nlohmann::json> CompareWithSnapshot(
107 const RomSnapshot& snapshot) const;
108
109 // ============================================================================
110 // ROM Validation
111 // ============================================================================
112
118 std::vector<std::string> errors;
119 std::vector<std::string> warnings;
120 nlohmann::json details;
121 };
122
128
134
141 const std::vector<std::string>& regions) const;
142
148
149 // ============================================================================
150 // ROM Patching
151 // ============================================================================
152
159 absl::Status ApplyPatch(const std::vector<uint8_t>& patch_data,
160 const std::string& patch_format);
161
168 absl::StatusOr<std::vector<uint8_t>> GeneratePatch(
169 const Rom& target_rom,
170 const std::string& patch_format) const;
171
172 // ============================================================================
173 // Region Management
174 // ============================================================================
175
183 absl::StatusOr<std::vector<uint8_t>> ExportRegion(
184 const std::string& region_name,
185 uint32_t start_address = 0,
186 uint32_t end_address = 0) const;
187
195 absl::Status ImportRegion(const std::string& region_name,
196 const std::vector<uint8_t>& data,
197 uint32_t address);
198
199 // ============================================================================
200 // Batch Operations
201 // ============================================================================
202
209 uint32_t address;
210 std::vector<uint8_t> data;
211 nlohmann::json params;
212 };
213
220 absl::StatusOr<std::vector<nlohmann::json>> ExecuteBatch(
221 const std::vector<BatchOperation>& operations,
222 bool stop_on_error = true);
223
224 // ============================================================================
225 // Transaction Support
226 // ============================================================================
227
232 std::string BeginTransaction();
233
239 absl::Status CommitTransaction(const std::string& transaction_id);
240
246 absl::Status RollbackTransaction(const std::string& transaction_id);
247
248 // ============================================================================
249 // Statistics and Analysis
250 // ============================================================================
251
256 nlohmann::json GetStatistics() const;
257
262 nlohmann::json AnalyzePatterns() const;
263
269 std::vector<std::pair<uint32_t, size_t>> FindFreeSpace(
270 size_t min_size = 16) const;
271
272 private:
274 std::map<std::string, RomSnapshot> snapshots_;
275 std::map<std::string, std::unique_ptr<class Transaction>> transactions_;
276
277 // Helper methods
278 std::vector<uint8_t> CompressData(const std::vector<uint8_t>& data) const;
279 std::vector<uint8_t> DecompressData(const std::vector<uint8_t>& data) const;
280 bool VerifyWrite(uint32_t address, const std::vector<uint8_t>& expected) const;
281};
282
283} // namespace automation
284} // namespace cli
285} // namespace yaze
286
287#endif // YAZE_CLI_AUTOMATION_ROM_AUTOMATION_API_H
The Rom class is used to load, save, and modify Rom data. This is a generic SNES ROM container and do...
Definition rom.h:24
High-level API for ROM manipulation and automation.
absl::StatusOr< RomSnapshot > CreateSnapshot(const std::string &name, bool compress=true)
Create a snapshot of current ROM state.
bool VerifyWrite(uint32_t address, const std::vector< uint8_t > &expected) const
absl::Status CommitTransaction(const std::string &transaction_id)
Commit a ROM modification transaction.
ValidationResult ValidateHeaders() const
Validate ROM headers.
absl::Status RollbackTransaction(const std::string &transaction_id)
Rollback a ROM modification transaction.
std::string BeginTransaction()
Begin a ROM modification transaction.
nlohmann::json AnalyzePatterns() const
Analyze ROM for common patterns.
std::vector< std::pair< uint32_t, size_t > > FindFreeSpace(size_t min_size=16) const
Find unused space in ROM.
absl::StatusOr< std::vector< nlohmann::json > > ExecuteBatch(const std::vector< BatchOperation > &operations, bool stop_on_error=true)
Execute multiple ROM operations atomically.
absl::StatusOr< std::vector< uint8_t > > ExportRegion(const std::string &region_name, uint32_t start_address=0, uint32_t end_address=0) const
Export a region of ROM to file.
std::vector< nlohmann::json > ListSnapshots() const
List all available snapshots.
std::vector< uint8_t > DecompressData(const std::vector< uint8_t > &data) const
std::map< std::string, RomSnapshot > snapshots_
absl::Status WriteBytes(uint32_t address, const std::vector< uint8_t > &data, bool verify=true)
Write bytes to ROM at specified address.
std::vector< uint8_t > CompressData(const std::vector< uint8_t > &data) const
absl::StatusOr< std::vector< uint8_t > > ReadBytes(uint32_t address, size_t length) const
Read bytes from ROM at specified address.
ValidationResult ValidateFull() const
Comprehensive ROM validation.
ValidationResult ValidateRegions(const std::vector< std::string > &regions) const
Validate specific ROM regions.
nlohmann::json GetStatistics() const
Get ROM statistics.
absl::StatusOr< std::vector< uint8_t > > GeneratePatch(const Rom &target_rom, const std::string &patch_format) const
Generate patch between current ROM and target.
absl::StatusOr< nlohmann::json > CompareWithSnapshot(const RomSnapshot &snapshot) const
Compare current ROM with snapshot.
absl::StatusOr< std::vector< uint32_t > > FindPattern(const std::vector< uint8_t > &pattern, uint32_t start_address=0, size_t max_results=100) const
Find pattern in ROM.
absl::Status RestoreSnapshot(const RomSnapshot &snapshot, bool verify=true)
Restore ROM to a previous snapshot.
absl::Status ImportRegion(const std::string &region_name, const std::vector< uint8_t > &data, uint32_t address)
Import data to a ROM region.
absl::Status ApplyPatch(const std::vector< uint8_t > &patch_data, const std::string &patch_format)
Apply IPS/BPS patch to ROM.
std::map< std::string, std::unique_ptr< class Transaction > > transactions_
ValidationResult ValidateChecksums() const
Validate ROM checksums.
Batch operation for multiple ROM modifications.
Snapshot of ROM state at a point in time.
Validation result for ROM integrity checks.