9#include <unordered_map>
12#include "absl/status/status.h"
24 virtual absl::Status
Run(
const std::vector<std::string>& arg_vec) = 0;
31 absl::Status
Run(
const std::vector<std::string>& arg_vec)
override;
36 absl::Status
Run(
const std::vector<std::string>& arg_vec)
override;
41 absl::Status
Run(
const std::vector<std::string>& arg_vec)
override;
46 absl::Status
Run(
const std::vector<std::string>& arg_vec)
override;
51 absl::Status
Run(
const std::vector<std::string>& arg_vec)
override {
52 auto const& arg = arg_vec[0];
54 std::cout <<
"Title: " <<
rom_.title() << std::endl;
55 std::cout <<
"Size: 0x" << std::hex <<
rom_.size() << std::endl;
56 return absl::OkStatus();
62 absl::Status
Run(
const std::vector<std::string>& arg_vec)
override {
66 if (arg_vec.size() == 2) {
71 return absl::OkStatus();
77 absl::Status
Run(
const std::vector<std::string>& arg_vec)
override;
82 absl::Status
Run(
const std::vector<std::string>& arg_vec)
override;
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();
112 absl::Status
Run(
const std::vector<std::string>& arg_vec)
override {
113 auto arg = arg_vec[0];
114 std::stringstream ss(arg.data());
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();
132 absl::Status
Run(
const std::vector<std::string>& arg_vec)
override {
135 std::stringstream ss(arg_vec[1].data());
137 ss >> std::hex >> offset;
138 uint32_t length = 0x01;
139 if (!arg_vec[2].empty()) {
140 length = std::stoi(arg_vec[2]);
144 auto returned_bytes_status =
rom_.ReadByteVector(offset, length);
145 if (!returned_bytes_status.ok()) {
146 return returned_bytes_status.status();
148 auto returned_bytes = returned_bytes_status.value();
149 for (
const auto& each : returned_bytes) {
152 std::cout << std::endl;
154 auto byte =
rom_.ReadByte(offset);
155 std::cout << std::hex <<
byte.value() << std::endl;
158 return absl::OkStatus();
170 absl::Status
Run(
const std::vector<std::string>& arg_vec)
override {
173 std::stringstream ss(arg_vec[1].data());
175 ss >> std::hex >> size;
179 std::cout <<
"Successfully expanded ROM to " << std::hex << size
182 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