yaze 0.2.2
Link to the Past ROM Editor
 
Loading...
Searching...
No Matches
z3ed.h
Go to the documentation of this file.
1#ifndef YAZE_CLI_Z3ED_H
2#define YAZE_CLI_Z3ED_H
3
4#include <cstdint>
5#include <iostream>
6#include <memory>
7#include <sstream>
8#include <string>
9#include <unordered_map>
10#include <vector>
11
12#include "absl/status/status.h"
13#include "app/rom.h"
14#include "util/macro.h"
15
16namespace yaze {
17namespace cli {
18
20 public:
21 CommandHandler() = default;
22 virtual ~CommandHandler() = default;
23 virtual absl::Status Run(const std::vector<std::string>& arg_vec) = 0;
24
26};
27
28class ApplyPatch : public CommandHandler {
29 public:
30 absl::Status Run(const std::vector<std::string>& arg_vec) override;
31};
32
33class AsarPatch : public CommandHandler {
34 public:
35 absl::Status Run(const std::vector<std::string>& arg_vec) override;
36};
37
39 public:
40 absl::Status Run(const std::vector<std::string>& arg_vec) override;
41};
42
44 public:
45 absl::Status Run(const std::vector<std::string>& arg_vec) override;
46};
47
48class Open : public CommandHandler {
49 public:
50 absl::Status Run(const std::vector<std::string>& arg_vec) override {
51 auto const& arg = arg_vec[0];
52 RETURN_IF_ERROR(rom_.LoadFromFile(arg))
53 std::cout << "Title: " << rom_.title() << std::endl;
54 std::cout << "Size: 0x" << std::hex << rom_.size() << std::endl;
55 return absl::OkStatus();
56 }
57};
58
59class Backup : public CommandHandler {
60 public:
61 absl::Status Run(const std::vector<std::string>& arg_vec) override {
62 RETURN_IF_ERROR(rom_.LoadFromFile(arg_vec[0]))
63 if (arg_vec.size() == 2) {
64 // Optional filename added
65 RETURN_IF_ERROR(rom_.SaveToFile(/*backup=*/true, false, arg_vec[1]))
66 } else {
67 RETURN_IF_ERROR(rom_.SaveToFile(/*backup=*/true))
68 }
69 return absl::OkStatus();
70 }
71};
72
73class Compress : public CommandHandler {
74 public:
75 absl::Status Run(const std::vector<std::string>& arg_vec) override;
76};
77
78class Decompress : public CommandHandler {
79 public:
80 absl::Status Run(const std::vector<std::string>& arg_vec) override;
81};
82
90 public:
91 absl::Status Run(const std::vector<std::string>& arg_vec) override {
92 auto arg = arg_vec[0];
93 std::stringstream ss(arg.data());
94 uint32_t snes_address;
95 ss >> std::hex >> snes_address;
96 uint32_t pc_address = SnesToPc(snes_address);
97 std::cout << std::hex << pc_address << std::endl;
98 return absl::OkStatus();
99 }
100};
101
109 public:
110 absl::Status Run(const std::vector<std::string>& arg_vec) override {
111 auto arg = arg_vec[0];
112 std::stringstream ss(arg.data());
113 uint32_t pc_address;
114 ss >> std::hex >> pc_address;
115 uint32_t snes_address = PcToSnes(pc_address);
116 std::cout << "SNES LoROM Address: ";
117 std::cout << "$" << std::uppercase << std::hex << snes_address << "\n";
118 return absl::OkStatus();
119 }
120};
121
129 public:
130 absl::Status Run(const std::vector<std::string>& arg_vec) override {
131 RETURN_IF_ERROR(rom_.LoadFromFile(arg_vec[0]))
132
133 std::stringstream ss(arg_vec[1].data());
134 uint32_t offset;
135 ss >> std::hex >> offset;
136 uint32_t length = 0x01;
137 if (!arg_vec[2].empty()) {
138 length = std::stoi(arg_vec[2]);
139 }
140
141 if (length > 1) {
142 auto returned_bytes_status = rom_.ReadByteVector(offset, length);
143 if (!returned_bytes_status.ok()) {
144 return returned_bytes_status.status();
145 }
146 auto returned_bytes = returned_bytes_status.value();
147 for (const auto& each : returned_bytes) {
148 std::cout << each;
149 }
150 std::cout << std::endl;
151 } else {
152 auto byte = rom_.ReadByte(offset);
153 std::cout << std::hex << byte.value() << std::endl;
154 }
155
156 return absl::OkStatus();
157 }
158};
159
166class Expand : public CommandHandler {
167 public:
168 absl::Status Run(const std::vector<std::string>& arg_vec) override {
169 RETURN_IF_ERROR(rom_.LoadFromFile(arg_vec[0]))
170
171 std::stringstream ss(arg_vec[1].data());
172 uint32_t size;
173 ss >> std::hex >> size;
174
175 rom_.Expand(size);
176
177 std::cout << "Successfully expanded ROM to " << std::hex << size
178 << std::endl;
179
180 return absl::OkStatus();
181 }
182};
183
184} // namespace cli
185} // namespace yaze
186
187#endif
The Rom class is used to load, save, and modify Rom data.
Definition rom.h:59
absl::Status Run(const std::vector< std::string > &arg_vec) override
Definition patch.cc:8
absl::Status Run(const std::vector< std::string > &arg_vec) override
Definition patch.cc:29
absl::Status Run(const std::vector< std::string > &arg_vec) override
Definition z3ed.h:61
virtual absl::Status Run(const std::vector< std::string > &arg_vec)=0
virtual ~CommandHandler()=default
absl::Status Run(const std::vector< std::string > &arg_vec) override
Definition compress.cc:6
absl::Status Run(const std::vector< std::string > &arg_vec) override
Definition patch.cc:48
absl::Status Run(const std::vector< std::string > &arg_vec) override
Definition compress.cc:11
Expand a Rom file.
Definition z3ed.h:166
absl::Status Run(const std::vector< std::string > &arg_vec) override
Definition z3ed.h:168
absl::Status Run(const std::vector< std::string > &arg_vec) override
Definition z3ed.h:50
Convert a PC address to a SNES address.
Definition z3ed.h:108
absl::Status Run(const std::vector< std::string > &arg_vec) override
Definition z3ed.h:110
Read from a Rom file.
Definition z3ed.h:128
absl::Status Run(const std::vector< std::string > &arg_vec) override
Definition z3ed.h:130
Convert a SNES address to a PC address.
Definition z3ed.h:89
absl::Status Run(const std::vector< std::string > &arg_vec) override
Definition z3ed.h:91
absl::Status Run(const std::vector< std::string > &arg_vec) override
#define RETURN_IF_ERROR(expression)
Definition macro.h:51
Namespace for the command line interface.
Definition compress.cc:4
Main namespace for the application.
Definition controller.cc:18
uint32_t PcToSnes(uint32_t addr)
Definition rom.h:337
uint32_t SnesToPc(uint32_t addr) noexcept
Definition rom.h:329