summaryrefslogtreecommitdiff
path: root/emulator.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'emulator.cpp')
-rw-r--r--emulator.cpp42
1 files changed, 41 insertions, 1 deletions
diff --git a/emulator.cpp b/emulator.cpp
index 7e6ad25..b5ad031 100644
--- a/emulator.cpp
+++ b/emulator.cpp
@@ -211,7 +211,7 @@ static std::string CreateResponse(
{
const M68KCPUState state = m68k_debug.GetCPUState();
std::string result{};
- for (size_t i = 0; i < state.registers_count ;i++)
+ for (size_t i = 0; i < state.registers_count; i++)
{
constexpr size_t value_size = std::string_view("12345678").length();
char value[value_size + 1]{};
@@ -221,6 +221,46 @@ static std::string CreateResponse(
}
return result;
}
+ case PacketType::kWriteGeneralRegisters:
+ {
+ const auto * const data =
+ static_cast<const PacketDataWriteGeneralRegisters*>(packet.data.get());
+ const auto& registers = data->registers;
+ for (size_t i = 0; i < registers.size(); i++) {
+ m68k_debug.SetRegister(static_cast<M68KRegister>(i), registers[i]);
+ }
+ return "OK";
+ }
+ break;
+ case PacketType::kReadRegister:
+ {
+ const auto * const data =
+ static_cast<const PacketDataReadRegister*>(packet.data.get());
+ const auto reg_id = static_cast<M68KRegister>(data->reg_id);
+ if (reg_id >= M68KRegister::kRegistersCount) {
+ return "E00";
+ }
+ const uint32_t value = m68k_debug.GetRegister(reg_id);
+ constexpr size_t value_size = std::string_view("12345678").length();
+ char value_str[value_size + 1]{};
+ const int ret = snprintf(value_str, value_size + 1, "%08x", value);
+ assert(ret == value_size);
+ return std::string(value_str, value_size);
+ }
+ break;
+ case PacketType::kWriteRegister:
+ {
+ const auto * const data =
+ static_cast<const PacketDataWriteRegister*>(packet.data.get());
+ const auto reg_id = static_cast<M68KRegister>(data->reg_id);
+ const auto value = data->value;
+ if (reg_id >= M68KRegister::kRegistersCount) {
+ return "E00";
+ }
+ m68k_debug.SetRegister(reg_id, value);
+ return "OK";
+ }
+ break;
case PacketType::kReadMemory:
{
const auto * const data =