9#include <unordered_map>
12#include "absl/status/status.h"
23 virtual absl::Status
Run(
const std::vector<std::string>& arg_vec) = 0;
30 absl::Status
Run(
const std::vector<std::string>& arg_vec)
override;
35 absl::Status
Run(
const std::vector<std::string>& arg_vec)
override;
40 absl::Status
Run(
const std::vector<std::string>& arg_vec)
override;
45 absl::Status
Run(
const std::vector<std::string>& arg_vec)
override;
50 absl::Status
Run(
const std::vector<std::string>& arg_vec)
override {
51 auto const& arg = arg_vec[0];
53 std::cout <<
"Title: " <<
rom_.title() << std::endl;
54 std::cout <<
"Size: 0x" << std::hex <<
rom_.size() << std::endl;
55 return absl::OkStatus();
61 absl::Status
Run(
const std::vector<std::string>& arg_vec)
override {
63 if (arg_vec.size() == 2) {
69 return absl::OkStatus();
75 absl::Status
Run(
const std::vector<std::string>& arg_vec)
override;
80 absl::Status
Run(
const std::vector<std::string>& arg_vec)
override;
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();
110 absl::Status
Run(
const std::vector<std::string>& arg_vec)
override {
111 auto arg = arg_vec[0];
112 std::stringstream ss(arg.data());
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();
130 absl::Status
Run(
const std::vector<std::string>& arg_vec)
override {
133 std::stringstream ss(arg_vec[1].data());
135 ss >> std::hex >> offset;
136 uint32_t length = 0x01;
137 if (!arg_vec[2].empty()) {
138 length = std::stoi(arg_vec[2]);
142 auto returned_bytes_status =
rom_.ReadByteVector(offset, length);
143 if (!returned_bytes_status.ok()) {
144 return returned_bytes_status.status();
146 auto returned_bytes = returned_bytes_status.value();
147 for (
const auto& each : returned_bytes) {
150 std::cout << std::endl;
152 auto byte =
rom_.ReadByte(offset);
153 std::cout << std::hex <<
byte.value() << std::endl;
156 return absl::OkStatus();
168 absl::Status
Run(
const std::vector<std::string>& arg_vec)
override {
171 std::stringstream ss(arg_vec[1].data());
173 ss >> std::hex >> size;
177 std::cout <<
"Successfully expanded ROM to " << std::hex << size
180 return absl::OkStatus();
The Rom class is used to load, save, and modify Rom data.
absl::Status Run(const std::vector< std::string > &arg_vec) override
absl::Status Run(const std::vector< std::string > &arg_vec) override
absl::Status Run(const std::vector< std::string > &arg_vec) override
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
absl::Status Run(const std::vector< std::string > &arg_vec) override
absl::Status Run(const std::vector< std::string > &arg_vec) override
absl::Status Run(const std::vector< std::string > &arg_vec) override
absl::Status Run(const std::vector< std::string > &arg_vec) override
Convert a PC address to a SNES address.
absl::Status Run(const std::vector< std::string > &arg_vec) override
absl::Status Run(const std::vector< std::string > &arg_vec) override
Convert a SNES address to a PC address.
absl::Status Run(const std::vector< std::string > &arg_vec) override
absl::Status Run(const std::vector< std::string > &arg_vec) override
#define RETURN_IF_ERROR(expression)
Namespace for the command line interface.
Main namespace for the application.
uint32_t PcToSnes(uint32_t addr)
uint32_t SnesToPc(uint32_t addr) noexcept