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 "app/snes.h"
15#include "util/macro.h"
16
17namespace yaze {
18namespace cli {
19
21 public:
22 CommandHandler() = default;
23 virtual ~CommandHandler() = default;
24 virtual absl::Status Run(const std::vector<std::string>& arg_vec) = 0;
25
27};
28
29class ApplyPatch : public CommandHandler {
30 public:
31 absl::Status Run(const std::vector<std::string>& arg_vec) override;
32};
33
34class AsarPatch : public CommandHandler {
35 public:
36 absl::Status Run(const std::vector<std::string>& arg_vec) override;
37};
38
40 public:
41 absl::Status Run(const std::vector<std::string>& arg_vec) override;
42};
43
45 public:
46 absl::Status Run(const std::vector<std::string>& arg_vec) override;
47};
48
49class Open : public CommandHandler {
50 public:
51 absl::Status Run(const std::vector<std::string>& arg_vec) override {
52 auto const& arg = arg_vec[0];
53 RETURN_IF_ERROR(rom_.LoadFromFile(arg))
54 std::cout << "Title: " << rom_.title() << std::endl;
55 std::cout << "Size: 0x" << std::hex << rom_.size() << std::endl;
56 return absl::OkStatus();
57 }
58};
59
60class Backup : public CommandHandler {
61 public:
62 absl::Status Run(const std::vector<std::string>& arg_vec) override {
63 RETURN_IF_ERROR(rom_.LoadFromFile(arg_vec[0]))
64 Rom::SaveSettings settings;
65 settings.backup = true;
66 if (arg_vec.size() == 2) {
67 // Optional filename added
68 settings.filename = arg_vec[1];
69 }
70 RETURN_IF_ERROR(rom_.SaveToFile(settings))
71 return absl::OkStatus();
72 }
73};
74
75class Compress : public CommandHandler {
76 public:
77 absl::Status Run(const std::vector<std::string>& arg_vec) override;
78};
79
80class Decompress : public CommandHandler {
81 public:
82 absl::Status Run(const std::vector<std::string>& arg_vec) override;
83};
84
92 public:
93 absl::Status Run(const std::vector<std::string>& arg_vec) override {
94 auto arg = arg_vec[0];
95 std::stringstream ss(arg.data());
96 uint32_t snes_address;
97 ss >> std::hex >> snes_address;
98 uint32_t pc_address = SnesToPc(snes_address);
99 std::cout << std::hex << pc_address << std::endl;
100 return absl::OkStatus();
101 }
102};
103
111 public:
112 absl::Status Run(const std::vector<std::string>& arg_vec) override {
113 auto arg = arg_vec[0];
114 std::stringstream ss(arg.data());
115 uint32_t pc_address;
116 ss >> std::hex >> pc_address;
117 uint32_t snes_address = PcToSnes(pc_address);
118 std::cout << "SNES LoROM Address: ";
119 std::cout << "$" << std::uppercase << std::hex << snes_address << "\n";
120 return absl::OkStatus();
121 }
122};
123
131 public:
132 absl::Status Run(const std::vector<std::string>& arg_vec) override {
133 RETURN_IF_ERROR(rom_.LoadFromFile(arg_vec[0]))
134
135 std::stringstream ss(arg_vec[1].data());
136 uint32_t offset;
137 ss >> std::hex >> offset;
138 uint32_t length = 0x01;
139 if (!arg_vec[2].empty()) {
140 length = std::stoi(arg_vec[2]);
141 }
142
143 if (length > 1) {
144 auto returned_bytes_status = rom_.ReadByteVector(offset, length);
145 if (!returned_bytes_status.ok()) {
146 return returned_bytes_status.status();
147 }
148 auto returned_bytes = returned_bytes_status.value();
149 for (const auto& each : returned_bytes) {
150 std::cout << each;
151 }
152 std::cout << std::endl;
153 } else {
154 auto byte = rom_.ReadByte(offset);
155 std::cout << std::hex << byte.value() << std::endl;
156 }
157
158 return absl::OkStatus();
159 }
160};
161
168class Expand : public CommandHandler {
169 public:
170 absl::Status Run(const std::vector<std::string>& arg_vec) override {
171 RETURN_IF_ERROR(rom_.LoadFromFile(arg_vec[0]))
172
173 std::stringstream ss(arg_vec[1].data());
174 uint32_t size;
175 ss >> std::hex >> size;
176
177 rom_.Expand(size);
178
179 std::cout << "Successfully expanded ROM to " << std::hex << size
180 << std::endl;
181
182 return absl::OkStatus();
183 }
184};
185
186} // namespace cli
187} // namespace yaze
188
189#endif
The Rom class is used to load, save, and modify Rom data.
Definition rom.h:58
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:62
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:168
absl::Status Run(const std::vector< std::string > &arg_vec) override
Definition z3ed.h:170
absl::Status Run(const std::vector< std::string > &arg_vec) override
Definition z3ed.h:51
Convert a PC address to a SNES address.
Definition z3ed.h:110
absl::Status Run(const std::vector< std::string > &arg_vec) override
Definition z3ed.h:112
Read from a Rom file.
Definition z3ed.h:130
absl::Status Run(const std::vector< std::string > &arg_vec) override
Definition z3ed.h:132
Convert a SNES address to a PC address.
Definition z3ed.h:91
absl::Status Run(const std::vector< std::string > &arg_vec) override
Definition z3ed.h:93
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 snes.h:17
uint32_t SnesToPc(uint32_t addr) noexcept
Definition snes.h:8
std::string filename
Definition rom.h:64