a few compile fixes
This commit is contained in:
parent
9cd804f080
commit
ccf4b6268f
25 changed files with 102 additions and 110 deletions
|
@ -62,11 +62,6 @@ target_link_libraries(kek ${PANEL_LIBRARIES})
|
|||
target_include_directories(kek PUBLIC ${PANEL_INCLUDE_DIRS})
|
||||
target_compile_options(kek PUBLIC ${PANEL_CFLAGS_OTHER})
|
||||
|
||||
pkg_check_modules(JANSSON REQUIRED jansson)
|
||||
target_link_libraries(kek ${JANSSON_LIBRARIES})
|
||||
target_include_directories(kek PUBLIC ${JANSSON_INCLUDE_DIRS})
|
||||
target_compile_options(kek PUBLIC ${JANSSON_CFLAGS_OTHER})
|
||||
|
||||
endif (NOT WIN32)
|
||||
|
||||
if (WIN32)
|
||||
|
|
|
@ -11,7 +11,6 @@ To build for e.g. linux:
|
|||
|
||||
Required:
|
||||
* libncursesw5-dev
|
||||
* libjansson-dev
|
||||
|
||||
To build for e.g. windows:
|
||||
|
||||
|
|
14
bus.cpp
14
bus.cpp
|
@ -81,27 +81,27 @@ bus *bus::deserialize(const JsonDocument j, console *const cnsl, std::atomic_uin
|
|||
|
||||
memory *m = nullptr;
|
||||
if (j.containsKey("memory")) {
|
||||
m = memory::deserialize(j["memory"].as<JsonDocument>());
|
||||
m = memory::deserialize(j["memory"].as<JsonVariant>());
|
||||
b->add_ram(m);
|
||||
}
|
||||
|
||||
if (j.containsKey("kw11-l"))
|
||||
b->add_KW11_L(kw11_l::deserialize(j["kw11-l"].as<JsonDocument>(), b, cnsl));
|
||||
b->add_KW11_L(kw11_l::deserialize(j["kw11-l"].as<JsonVariant>(), b, cnsl));
|
||||
|
||||
if (j.containsKey("tty"))
|
||||
b->add_tty(tty::deserialize(j["tty"].as<JsonDocument>(), b, cnsl));
|
||||
b->add_tty(tty::deserialize(j["tty"].as<JsonVariant>(), b, cnsl));
|
||||
|
||||
if (j.containsKey("mmu"))
|
||||
b->add_mmu(mmu::deserialize(j["mmu"].as<JsonDocument>(), m));
|
||||
b->add_mmu(mmu::deserialize(j["mmu"].as<JsonVariant>(), m));
|
||||
|
||||
if (j.containsKey("cpu"))
|
||||
b->add_cpu(cpu::deserialize(j["cpu"].as<JsonDocument>(), b, event));
|
||||
b->add_cpu(cpu::deserialize(j["cpu"].as<JsonVariant>(), b, event));
|
||||
|
||||
if (j.containsKey("rl02"))
|
||||
b->add_rl02(rl02::deserialize(j["rl02"].as<JsonDocument>(), b));
|
||||
b->add_rl02(rl02::deserialize(j["rl02"].as<JsonVariant>(), b));
|
||||
|
||||
if (j.containsKey("rk05"))
|
||||
b->add_rk05(rk05::deserialize(j["rk05"].as<JsonDocument>(), b));
|
||||
b->add_rk05(rk05::deserialize(j["rk05"].as<JsonVariant>(), b));
|
||||
|
||||
// TODO: tm11, dc11
|
||||
|
||||
|
|
8
cpu.cpp
8
cpu.cpp
|
@ -2434,9 +2434,9 @@ void cpu::step()
|
|||
}
|
||||
}
|
||||
|
||||
JsonDocument cpu::serialize()
|
||||
JsonVariant cpu::serialize()
|
||||
{
|
||||
JsonDocument j;
|
||||
JsonVariant j;
|
||||
|
||||
for(int set=0; set<2; set++) {
|
||||
for(int regnr=0; regnr<6; regnr++)
|
||||
|
@ -2461,7 +2461,7 @@ JsonDocument cpu::serialize()
|
|||
if (trap_delay.has_value())
|
||||
j["trap_delay"] = trap_delay.value();
|
||||
|
||||
JsonDocument j_queued_interrupts;
|
||||
JsonVariant j_queued_interrupts;
|
||||
for(auto & il: queued_interrupts) {
|
||||
JsonArray ja_qi_level;
|
||||
for(auto v: il.second)
|
||||
|
@ -2477,7 +2477,7 @@ JsonDocument cpu::serialize()
|
|||
return j;
|
||||
}
|
||||
|
||||
cpu *cpu::deserialize(const JsonDocument j, bus *const b, std::atomic_uint32_t *const event)
|
||||
cpu *cpu::deserialize(const JsonVariant j, bus *const b, std::atomic_uint32_t *const event)
|
||||
{
|
||||
cpu *c = new cpu(b, event);
|
||||
|
||||
|
|
4
cpu.h
4
cpu.h
|
@ -115,8 +115,8 @@ public:
|
|||
explicit cpu(bus *const b, std::atomic_uint32_t *const event);
|
||||
~cpu();
|
||||
|
||||
JsonDocument serialize();
|
||||
static cpu *deserialize(const JsonDocument j, bus *const b, std::atomic_uint32_t *const event);
|
||||
JsonVariant serialize();
|
||||
static cpu *deserialize(const JsonVariant j, bus *const b, std::atomic_uint32_t *const event);
|
||||
|
||||
std::optional<std::string> check_breakpoint();
|
||||
int set_breakpoint(breakpoint *const bp);
|
||||
|
|
|
@ -548,7 +548,7 @@ struct state_writer {
|
|||
|
||||
void serialize_state(console *const cnsl, const bus *const b, const std::string & filename)
|
||||
{
|
||||
JsonDocument j = b->serialize();
|
||||
JsonVariant j = b->serialize();
|
||||
|
||||
bool ok = false;
|
||||
|
||||
|
|
|
@ -58,12 +58,12 @@ bool disk_backend::store_mem_range_in_overlay(const off_t offset, const size_t n
|
|||
return false;
|
||||
}
|
||||
|
||||
JsonDocument disk_backend::serialize_overlay() const
|
||||
JsonVariant disk_backend::serialize_overlay() const
|
||||
{
|
||||
JsonDocument out;
|
||||
JsonVariant out;
|
||||
|
||||
for(auto & id: overlay) {
|
||||
JsonDocument j_data;
|
||||
JsonVariant j_data;
|
||||
|
||||
for(size_t i=0; i<id.second.size(); i++)
|
||||
j_data.add(id.second.at(i));
|
||||
|
@ -74,28 +74,25 @@ JsonDocument disk_backend::serialize_overlay() const
|
|||
return out;
|
||||
}
|
||||
|
||||
void disk_backend::deserialize_overlay(const json_t *const j)
|
||||
void disk_backend::deserialize_overlay(const JsonVariant j)
|
||||
{
|
||||
json_t *input = json_object_get(j, "overlay");
|
||||
if (!input) // we can have state-dumps without overlay
|
||||
return;
|
||||
if (j.containsKey("overlay") == false)
|
||||
return; // we can have state-dumps without overlay
|
||||
|
||||
const char *key = nullptr;
|
||||
json_t *value = nullptr;
|
||||
json_object_foreach(input, key, value) {
|
||||
uint32_t id = std::atoi(key);
|
||||
for(auto kv : j.as<JsonObject>()) {
|
||||
uint32_t id = std::atoi(kv.key().c_str());
|
||||
|
||||
std::vector<uint8_t> data;
|
||||
for(size_t i=0; i<json_array_size(value); i++)
|
||||
data.push_back(json_integer_value(json_array_get(value, i)));
|
||||
for(auto v: kv.value().as<JsonArray>())
|
||||
data.push_back(v);
|
||||
|
||||
store_object_in_overlay(id, data);
|
||||
}
|
||||
}
|
||||
|
||||
disk_backend *disk_backend::deserialize(const json_t *const j)
|
||||
disk_backend *disk_backend::deserialize(const JsonVariant j)
|
||||
{
|
||||
std::string type = json_string_value(json_object_get(j, "disk-backend-type"));
|
||||
std::string type = j["disk-backend-type"];
|
||||
|
||||
disk_backend *d = nullptr;
|
||||
|
||||
|
@ -105,7 +102,7 @@ disk_backend *disk_backend::deserialize(const json_t *const j)
|
|||
else if (type == "nbd")
|
||||
d = disk_backend_nbd::deserialize(j);
|
||||
|
||||
// should not be reached
|
||||
// should not be triggered
|
||||
assert(d);
|
||||
|
||||
d->deserialize_overlay(j);
|
||||
|
|
|
@ -25,15 +25,15 @@ protected:
|
|||
std::optional<std::vector<uint8_t> > get_object_from_overlay(const off_t id);
|
||||
std::optional<std::vector<uint8_t> > get_from_overlay(const off_t offset, const size_t sector_size);
|
||||
|
||||
JsonDocument serialize_overlay() const;
|
||||
void deserialize_overlay(const JsonDocument j);
|
||||
JsonVariant serialize_overlay() const;
|
||||
void deserialize_overlay(const JsonVariant j);
|
||||
|
||||
public:
|
||||
disk_backend();
|
||||
virtual ~disk_backend();
|
||||
|
||||
virtual JsonDocument serialize() const = 0;
|
||||
static disk_backend *deserialize(const JsonDocument j);
|
||||
virtual JsonVariant serialize() const = 0;
|
||||
static disk_backend *deserialize(const JsonVariant j);
|
||||
|
||||
virtual std::string get_identifier() const = 0;
|
||||
|
||||
|
|
|
@ -21,9 +21,9 @@ disk_backend_file::~disk_backend_file()
|
|||
close(fd);
|
||||
}
|
||||
|
||||
JsonDocument disk_backend_file::serialize() const
|
||||
JsonVariant disk_backend_file::serialize() const
|
||||
{
|
||||
JsonDocument j;
|
||||
JsonVariant j;
|
||||
|
||||
j["disk-backend-type"] = "file";
|
||||
|
||||
|
@ -36,11 +36,11 @@ JsonDocument disk_backend_file::serialize() const
|
|||
return j;
|
||||
}
|
||||
|
||||
disk_backend_file *disk_backend_file::deserialize(const JsonDocument j)
|
||||
disk_backend_file *disk_backend_file::deserialize(const JsonVariant j)
|
||||
{
|
||||
// TODO verify checksum of backend
|
||||
// TODO overlay
|
||||
return new disk_backend_file(j["filename"]);
|
||||
return new disk_backend_file(j["filename"].as<std::string>());
|
||||
}
|
||||
|
||||
bool disk_backend_file::begin(const bool snapshots)
|
||||
|
|
|
@ -18,8 +18,8 @@ public:
|
|||
disk_backend_file(const std::string & filename);
|
||||
virtual ~disk_backend_file();
|
||||
|
||||
JsonDocument serialize() const override;
|
||||
static disk_backend_file *deserialize(const JsonDocument j);
|
||||
JsonVariant serialize() const override;
|
||||
static disk_backend_file *deserialize(const JsonVariant j);
|
||||
|
||||
std::string get_identifier() const override { return filename; }
|
||||
|
||||
|
|
|
@ -48,28 +48,26 @@ disk_backend_nbd::~disk_backend_nbd()
|
|||
close(fd);
|
||||
}
|
||||
|
||||
#if IS_POSIX
|
||||
json_t *disk_backend_nbd::serialize() const
|
||||
JsonVariant disk_backend_nbd::serialize() const
|
||||
{
|
||||
json_t *j = json_object();
|
||||
JsonVariant j;
|
||||
|
||||
json_object_set(j, "disk-backend-type", json_string("nbd"));
|
||||
j["disk-backend-type"] = "nbd";
|
||||
|
||||
json_object_set(j, "overlay", serialize_overlay());
|
||||
j["overlay"] = serialize_overlay();
|
||||
|
||||
// TODO store checksum of backend
|
||||
json_object_set(j, "host", json_string(host.c_str()));
|
||||
json_object_set(j, "port", json_integer(port));
|
||||
j["host"] = host.c_str();
|
||||
j["port"] = port;
|
||||
|
||||
return j;
|
||||
}
|
||||
|
||||
disk_backend_nbd *disk_backend_nbd::deserialize(const json_t *const j)
|
||||
disk_backend_nbd *disk_backend_nbd::deserialize(const JsonVariant j)
|
||||
{
|
||||
// TODO verify checksum of backend
|
||||
return new disk_backend_nbd(json_string_value(json_object_get(j, "host")), json_integer_value(json_object_get(j, "port")));
|
||||
return new disk_backend_nbd(j["host"], j["port"]);
|
||||
}
|
||||
#endif
|
||||
|
||||
bool disk_backend_nbd::begin(const bool snapshots)
|
||||
{
|
||||
|
|
|
@ -22,10 +22,8 @@ public:
|
|||
disk_backend_nbd(const std::string & host, const unsigned port);
|
||||
virtual ~disk_backend_nbd();
|
||||
|
||||
#if IS_POSIX
|
||||
json_t *serialize() const override;
|
||||
static disk_backend_nbd *deserialize(const json_t *const j);
|
||||
#endif
|
||||
JsonVariant serialize() const override;
|
||||
static disk_backend_nbd *deserialize(const JsonVariant j);
|
||||
|
||||
std::string get_identifier() const override { return format("%s:%d", host.c_str(), port); }
|
||||
|
||||
|
|
|
@ -216,16 +216,16 @@ uint8_t kw11_l::get_lf_crs()
|
|||
return rc;
|
||||
}
|
||||
|
||||
JsonDocument kw11_l::serialize()
|
||||
JsonVariant kw11_l::serialize()
|
||||
{
|
||||
JsonDocument j;
|
||||
JsonVariant j;
|
||||
|
||||
j["CSR"] = lf_csr;
|
||||
|
||||
return j;
|
||||
}
|
||||
|
||||
kw11_l *kw11_l::deserialize(const json_t *const j, bus *const b, console *const cnsl)
|
||||
kw11_l *kw11_l::deserialize(const JsonVariant j, bus *const b, console *const cnsl)
|
||||
{
|
||||
uint16_t CSR = j["CSR"];
|
||||
|
||||
|
|
4
kw11-l.h
4
kw11-l.h
|
@ -43,8 +43,8 @@ public:
|
|||
|
||||
void show_state(console *const cnsl) const override;
|
||||
|
||||
JsonDocument serialize();
|
||||
static kw11_l *deserialize(const JsonDocument j, bus *const b, console *const cnsl);
|
||||
JsonVariant serialize();
|
||||
static kw11_l *deserialize(const JsonVariant j, bus *const b, console *const cnsl);
|
||||
|
||||
void begin(console *const cnsl);
|
||||
void operator()();
|
||||
|
|
21
main.cpp
21
main.cpp
|
@ -567,27 +567,32 @@ int main(int argc, char *argv[])
|
|||
if (enable_bootloader)
|
||||
set_boot_loader(b, bootloader);
|
||||
}
|
||||
#if IS_POSIX
|
||||
else {
|
||||
FILE *fh = fopen(deserialize.c_str(), "r");
|
||||
if (!fh)
|
||||
error_exit(true, "Failed to open %s", deserialize.c_str());
|
||||
|
||||
json_error_t je { };
|
||||
json_t *j = json_loadf(fh, 0, &je);
|
||||
std::string j_in;
|
||||
char buffer[4096];
|
||||
for(;;) {
|
||||
char *rc = fgets(buffer, sizeof buffer, fh);
|
||||
if (!rc)
|
||||
break;
|
||||
|
||||
j_in += buffer;
|
||||
}
|
||||
|
||||
fclose(fh);
|
||||
|
||||
if (!j)
|
||||
error_exit(true, "State file %s is corrupt: %s", deserialize.c_str(), je.text);
|
||||
JsonDocument j;
|
||||
DeserializationError error = deserializeJson(j, j_in);
|
||||
if (error)
|
||||
error_exit(true, "State file %s is corrupt: %s", error.c_str());
|
||||
|
||||
b = bus::deserialize(j, cnsl, &event);
|
||||
|
||||
json_decref(j);
|
||||
|
||||
myusleep(251000);
|
||||
}
|
||||
#endif
|
||||
|
||||
if (b->getTty() == nullptr) {
|
||||
tty *tty_ = new tty(cnsl, b);
|
||||
|
|
|
@ -40,9 +40,9 @@ void memory::reset()
|
|||
memset(m, 0x00, size);
|
||||
}
|
||||
|
||||
JsonDocument memory::serialize() const
|
||||
JsonVariant memory::serialize() const
|
||||
{
|
||||
JsonDocument j;
|
||||
JsonVariant j;
|
||||
|
||||
j["size"] = size;
|
||||
|
||||
|
@ -54,7 +54,7 @@ JsonDocument memory::serialize() const
|
|||
return j;
|
||||
}
|
||||
|
||||
memory *memory::deserialize(const JsonDocument j)
|
||||
memory *memory::deserialize(const JsonVariant j)
|
||||
{
|
||||
size_t size = j["size"];
|
||||
memory *m = new memory(size);
|
||||
|
|
4
memory.h
4
memory.h
|
@ -22,8 +22,8 @@ public:
|
|||
|
||||
void reset();
|
||||
|
||||
JsonDocument serialize() const;
|
||||
static memory *deserialize(const JsonDocument j);
|
||||
JsonVariant serialize() const;
|
||||
static memory *deserialize(const JsonVariant j);
|
||||
|
||||
uint16_t read_byte(const uint32_t a) const { return m[a]; }
|
||||
void write_byte(const uint32_t a, const uint16_t v) { if (a < size) m[a] = v; }
|
||||
|
|
18
mmu.cpp
18
mmu.cpp
|
@ -504,9 +504,9 @@ uint32_t mmu::calculate_physical_address(cpu *const c, const int run_mode, const
|
|||
return m_offset;
|
||||
}
|
||||
|
||||
JsonDocument mmu::add_par_pdr(const int run_mode, const bool is_d) const
|
||||
JsonVariant mmu::add_par_pdr(const int run_mode, const bool is_d) const
|
||||
{
|
||||
JsonDocument j;
|
||||
JsonVariant j;
|
||||
|
||||
JsonArray ja_par;
|
||||
for(int i=0; i<8; i++)
|
||||
|
@ -521,9 +521,9 @@ JsonDocument mmu::add_par_pdr(const int run_mode, const bool is_d) const
|
|||
return j;
|
||||
}
|
||||
|
||||
JsonDocument mmu::serialize() const
|
||||
JsonVariant mmu::serialize() const
|
||||
{
|
||||
JsonDocument j;
|
||||
JsonVariant j;
|
||||
|
||||
for(int run_mode=0; run_mode<4; run_mode++) {
|
||||
if (run_mode == 2)
|
||||
|
@ -544,20 +544,20 @@ JsonDocument mmu::serialize() const
|
|||
return j;
|
||||
}
|
||||
|
||||
void mmu::set_par_pdr(const JsonDocument j_in, const int run_mode, const bool is_d)
|
||||
void mmu::set_par_pdr(const JsonVariant j_in, const int run_mode, const bool is_d)
|
||||
{
|
||||
JsonArray j_par = j_in["par"];
|
||||
int i_par = 0;
|
||||
for(auto & v: j_par)
|
||||
for(auto v: j_par)
|
||||
pages[run_mode][is_d][i_par++].par = v;
|
||||
|
||||
JsonArray j_pdr = j_in["pdr"];
|
||||
int i_pdr = 0;
|
||||
for(auto & v: j_pdr)
|
||||
for(auto v: j_pdr)
|
||||
pages[run_mode][is_d][i_pdr++].pdr = v;
|
||||
}
|
||||
|
||||
mmu *mmu::deserialize(const JsonDocument j, memory *const mem)
|
||||
mmu *mmu::deserialize(const JsonVariant j, memory *const mem)
|
||||
{
|
||||
mmu *m = new mmu();
|
||||
m->begin(mem);
|
||||
|
@ -567,7 +567,7 @@ mmu *mmu::deserialize(const JsonDocument j, memory *const mem)
|
|||
continue;
|
||||
|
||||
for(int is_d=0; is_d<2; is_d++)
|
||||
m->set_par_pdr(j[format("runmode_%d_d_%d", run_mode, is_d)].as<JsonDocument>(), run_mode, is_d);
|
||||
m->set_par_pdr(j[format("runmode_%d_d_%d", run_mode, is_d)].as<JsonVariant>(), run_mode, is_d);
|
||||
}
|
||||
|
||||
m->MMR0 = j["MMR0"];
|
||||
|
|
8
mmu.h
8
mmu.h
|
@ -58,8 +58,8 @@ private:
|
|||
|
||||
memory *m { nullptr };
|
||||
|
||||
JsonDocument add_par_pdr(const int run_mode, const bool is_d) const;
|
||||
void set_par_pdr(const JsonDocument j_in, const int run_mode, const bool is_d);
|
||||
JsonVariant add_par_pdr(const int run_mode, const bool is_d) const;
|
||||
void set_par_pdr(const JsonVariant j_in, const int run_mode, const bool is_d);
|
||||
|
||||
void verify_page_access (cpu *const c, const uint16_t virt_addr, const int run_mode, const bool d, const int apf, const bool is_write);
|
||||
void verify_access_valid(cpu *const c, const uint32_t m_offset, const int run_mode, const bool d, const int apf, const bool is_io, const bool is_write);
|
||||
|
@ -71,8 +71,8 @@ public:
|
|||
|
||||
void begin(memory *const m);
|
||||
|
||||
JsonDocument serialize() const;
|
||||
static mmu *deserialize(const JsonDocument j, memory *const m);
|
||||
JsonVariant serialize() const;
|
||||
static mmu *deserialize(const JsonVariant j, memory *const m);
|
||||
|
||||
void mmudebug(const uint16_t a);
|
||||
|
||||
|
|
8
rk05.cpp
8
rk05.cpp
|
@ -281,9 +281,9 @@ void rk05::write_word(const uint16_t addr, const uint16_t v)
|
|||
}
|
||||
}
|
||||
|
||||
JsonDocument rk05::serialize() const
|
||||
JsonVariant rk05::serialize() const
|
||||
{
|
||||
JsonDocument j;
|
||||
JsonVariant j;
|
||||
|
||||
JsonArray j_backends;
|
||||
for(auto & dbe: fhs)
|
||||
|
@ -296,12 +296,12 @@ JsonDocument rk05::serialize() const
|
|||
return j;
|
||||
}
|
||||
|
||||
rk05 *rk05::deserialize(const JsonDocument j, bus *const b)
|
||||
rk05 *rk05::deserialize(const JsonVariant j, bus *const b)
|
||||
{
|
||||
rk05 *r = new rk05(b, nullptr, nullptr);
|
||||
r->begin();
|
||||
|
||||
for(auto j_backend: j["backends"])
|
||||
for(auto j_backend: j["backends"].as<JsonArray>())
|
||||
r->access_disk_backends()->push_back(disk_backend::deserialize(j_backend));
|
||||
|
||||
for(int regnr=0; regnr<7; regnr++)
|
||||
|
|
4
rk05.h
4
rk05.h
|
@ -49,8 +49,8 @@ public:
|
|||
|
||||
void show_state(console *const cnsl) const override;
|
||||
|
||||
JsonDocument serialize() const;
|
||||
static rk05 *deserialize(const JsonDocument j, bus *const b);
|
||||
JsonVariant serialize() const;
|
||||
static rk05 *deserialize(const JsonVariant j, bus *const b);
|
||||
|
||||
uint8_t read_byte(const uint16_t addr) override;
|
||||
uint16_t read_word(const uint16_t addr) override;
|
||||
|
|
8
rl02.cpp
8
rl02.cpp
|
@ -72,9 +72,9 @@ void rl02::show_state(console *const cnsl) const
|
|||
cnsl->put_string_lf(format("sector: %d", sector));
|
||||
}
|
||||
|
||||
JsonDocument rl02::serialize() const
|
||||
JsonVariant rl02::serialize() const
|
||||
{
|
||||
JsonDocument j;
|
||||
JsonVariant j;
|
||||
|
||||
JsonArray j_backends;
|
||||
for(auto & dbe: fhs)
|
||||
|
@ -94,13 +94,13 @@ JsonDocument rl02::serialize() const
|
|||
return j;
|
||||
}
|
||||
|
||||
rl02 *rl02::deserialize(const JsonDocument j, bus *const b)
|
||||
rl02 *rl02::deserialize(const JsonVariant j, bus *const b)
|
||||
{
|
||||
rl02 *r = new rl02(b, nullptr, nullptr);
|
||||
r->begin();
|
||||
|
||||
JsonArray j_backends = j["backends"];
|
||||
for(auto & v: j_backends)
|
||||
for(auto v: j_backends)
|
||||
r->access_disk_backends()->push_back(disk_backend::deserialize(v));
|
||||
|
||||
for(int regnr=0; regnr<4; regnr++)
|
||||
|
|
4
rl02.h
4
rl02.h
|
@ -56,8 +56,8 @@ public:
|
|||
|
||||
void show_state(console *const cnsl) const override;
|
||||
|
||||
JsonDocument serialize() const;
|
||||
static rl02 *deserialize(const JsonDocument j, bus *const b);
|
||||
JsonVariant serialize() const;
|
||||
static rl02 *deserialize(const JsonVariant j, bus *const b);
|
||||
|
||||
uint8_t read_byte(const uint16_t addr) override;
|
||||
uint16_t read_word(const uint16_t addr) override;
|
||||
|
|
10
tty.cpp
10
tty.cpp
|
@ -194,9 +194,9 @@ void tty::write_word(const uint16_t addr, uint16_t v)
|
|||
registers[(addr - PDP11TTY_BASE) / 2] = v;
|
||||
}
|
||||
|
||||
JsonDocument tty::serialize()
|
||||
JsonVariant tty::serialize()
|
||||
{
|
||||
JsonDocument j;
|
||||
JsonVariant j;
|
||||
|
||||
JsonArray ja_reg;
|
||||
for(size_t i=0; i<4; i++)
|
||||
|
@ -205,13 +205,13 @@ JsonDocument tty::serialize()
|
|||
|
||||
JsonArray ja_buf;
|
||||
for(auto c: chars)
|
||||
ja_buf.add(c);
|
||||
ja_buf.add(static_cast<signed char>(c));
|
||||
j["input-buffer"] = ja_buf;
|
||||
|
||||
return j;
|
||||
}
|
||||
|
||||
tty *tty::deserialize(const json_t *const j, bus *const b, console *const cnsl)
|
||||
tty *tty::deserialize(const JsonVariant j, bus *const b, console *const cnsl)
|
||||
{
|
||||
tty *out = new tty(cnsl, b);
|
||||
|
||||
|
@ -222,7 +222,7 @@ tty *tty::deserialize(const json_t *const j, bus *const b, console *const cnsl)
|
|||
|
||||
JsonArray ja_buf = j["input-buffer"];
|
||||
for(auto v: ja_buf)
|
||||
out->chars.push_back(v);
|
||||
out->chars.push_back(v.as<signed char>());
|
||||
|
||||
return out;
|
||||
}
|
||||
|
|
4
tty.h
4
tty.h
|
@ -52,8 +52,8 @@ public:
|
|||
tty(console *const c, bus *const b);
|
||||
virtual ~tty();
|
||||
|
||||
JsonDocument serialize();
|
||||
static tty *deserialize(const JsonDocument j, bus *const b, console *const cnsl);
|
||||
JsonVariant serialize();
|
||||
static tty *deserialize(const JsonVariant j, bus *const b, console *const cnsl);
|
||||
|
||||
void reset();
|
||||
|
||||
|
|
Loading…
Add table
Reference in a new issue