RK05 serialization

This commit is contained in:
folkert van heusden 2024-04-28 09:24:16 +02:00
parent ea57b04114
commit 5b50556273
Signed by untrusted user who does not match committer: folkert
GPG key ID: 6B6455EDFEED3BD1
3 changed files with 52 additions and 2 deletions

13
bus.cpp
View file

@ -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;
}

View file

@ -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<disk_backend *> backends;
rk05 *r = new rk05(b, nullptr, nullptr);
r->begin();
json_t *j_backends = json_object_get(j, "backends");
for(size_t i=0; i<json_array_size(j_backends); i++)
r->access_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

6
rk05.h
View file

@ -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;