From 5b505562732b87e97a79099eb96a49cb0e745aa3 Mon Sep 17 00:00:00 2001 From: folkert van heusden Date: Sun, 28 Apr 2024 09:24:16 +0200 Subject: [PATCH] RK05 serialization --- bus.cpp | 13 +++++++++++-- rk05.cpp | 35 +++++++++++++++++++++++++++++++++++ rk05.h | 6 ++++++ 3 files changed, 52 insertions(+), 2 deletions(-) diff --git a/bus.cpp b/bus.cpp index 1ab4cc6..b5e1af8 100644 --- a/bus.cpp +++ b/bus.cpp @@ -66,7 +66,10 @@ json_t *bus::serialize() const if (rl02_) json_object_set(j_out, "rl02", rl02_->serialize()); - // TODO: rk05, tm11 + if (rk05_) + json_object_set(j_out, "rk05", rk05_->serialize()); + + // TODO: tm11 return j_out; } @@ -113,7 +116,13 @@ bus *bus::deserialize(const json_t *const j, console *const cnsl, std::atomic_ui b->add_rl02(rl02_); } - // TODO: rk05, tm11 + temp = json_object_get(j, "rk05"); + if (temp) { + rk05 *rk05_ = rk05::deserialize(temp, b); + b->add_rk05(rk05_); + } + + // TODO: tm11 return b; } diff --git a/rk05.cpp b/rk05.cpp index a824bcb..e6cb3fd 100644 --- a/rk05.cpp +++ b/rk05.cpp @@ -250,3 +250,38 @@ void rk05::writeWord(const uint16_t addr, const uint16_t v) } } } + +#if IS_POSIX +json_t *rk05::serialize() const +{ + json_t *j = json_object(); + + json_t *j_backends = json_array(); + for(auto & dbe: fhs) + json_array_append(j_backends, dbe->serialize()); + + json_object_set(j, "backends", j_backends); + + for(int regnr=0; regnr<7; regnr++) + json_object_set(j, format("register-%d", regnr).c_str(), json_integer(registers[regnr])); + + return j; +} + +rk05 *rk05::deserialize(const json_t *const j, bus *const b) +{ + std::vector backends; + + rk05 *r = new rk05(b, nullptr, nullptr); + r->begin(); + + json_t *j_backends = json_object_get(j, "backends"); + for(size_t i=0; iaccess_disk_backends()->push_back(disk_backend::deserialize(json_array_get(j_backends, i))); + + for(int regnr=0; regnr<7; regnr++) + r->registers[regnr] = json_integer_value(json_object_get(j, format("register-%d", regnr).c_str())); + + return r; +} +#endif diff --git a/rk05.h b/rk05.h index f422347..5f4f4c4 100644 --- a/rk05.h +++ b/rk05.h @@ -11,6 +11,7 @@ #include "disk_device.h" #include "disk_backend.h" +#include "gen.h" #define RK05_DS 0177400 // drive status @@ -45,6 +46,11 @@ public: void begin() override; void reset() override; +#if IS_POSIX + json_t *serialize() const; + static rk05 *deserialize(const json_t *const j, bus *const b); +#endif + uint8_t readByte(const uint16_t addr) override; uint16_t readWord(const uint16_t addr) override;