mmu new serialization
This commit is contained in:
parent
06494afd40
commit
6a192436f4
2 changed files with 42 additions and 46 deletions
75
mmu.cpp
75
mmu.cpp
|
@ -504,60 +504,60 @@ uint32_t mmu::calculate_physical_address(cpu *const c, const int run_mode, const
|
||||||
return m_offset;
|
return m_offset;
|
||||||
}
|
}
|
||||||
|
|
||||||
#if IS_POSIX
|
JsonDocument mmu::add_par_pdr(const int run_mode, const bool is_d) const
|
||||||
void mmu::add_par_pdr(json_t *const target, const int run_mode, const bool is_d, const std::string & name) const
|
|
||||||
{
|
{
|
||||||
json_t *j = json_object();
|
JsonDocument j;
|
||||||
|
|
||||||
json_t *ja_par = json_array();
|
JsonArray ja_par;
|
||||||
for(int i=0; i<8; i++)
|
for(int i=0; i<8; i++)
|
||||||
json_array_append(ja_par, json_integer(pages[run_mode][is_d][i].par));
|
ja_par.add(pages[run_mode][is_d][i].par);
|
||||||
json_object_set(j, "par", ja_par);
|
j["par"] = ja_par;
|
||||||
|
|
||||||
json_t *ja_pdr = json_array();
|
JsonArray ja_pdr;
|
||||||
for(int i=0; i<8; i++)
|
for(int i=0; i<8; i++)
|
||||||
json_array_append(ja_pdr, json_integer(pages[run_mode][is_d][i].pdr));
|
ja_pdr.add(pages[run_mode][is_d][i].pdr);
|
||||||
json_object_set(j, "pdr", ja_pdr);
|
j["pdr"] = ja_pdr;
|
||||||
|
|
||||||
json_object_set(target, name.c_str(), j);
|
return j;
|
||||||
}
|
}
|
||||||
|
|
||||||
json_t *mmu::serialize() const
|
JsonDocument mmu::serialize() const
|
||||||
{
|
{
|
||||||
json_t *j = json_object();
|
JsonDocument j;
|
||||||
|
|
||||||
for(int run_mode=0; run_mode<4; run_mode++) {
|
for(int run_mode=0; run_mode<4; run_mode++) {
|
||||||
if (run_mode == 2)
|
if (run_mode == 2)
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
for(int is_d=0; is_d<2; is_d++)
|
for(int is_d=0; is_d<2; is_d++)
|
||||||
add_par_pdr(j, run_mode, is_d, format("runmode_%d_d_%d", run_mode, is_d));
|
j[format("runmode_%d_d_%d", run_mode, is_d)] = add_par_pdr(run_mode, is_d);
|
||||||
}
|
}
|
||||||
|
|
||||||
json_object_set(j, "MMR0", json_integer(MMR0));
|
j["MMR0"] = MMR0;
|
||||||
json_object_set(j, "MMR1", json_integer(MMR1));
|
j["MMR1"] = MMR1;
|
||||||
json_object_set(j, "MMR2", json_integer(MMR2));
|
j["MMR2"] = MMR2;
|
||||||
json_object_set(j, "MMR3", json_integer(MMR3));
|
j["MMR3"] = MMR3;
|
||||||
json_object_set(j, "CPUERR", json_integer(CPUERR));
|
j["CPUERR"] = CPUERR;
|
||||||
json_object_set(j, "PIR", json_integer(PIR));
|
j["PIR"] = PIR;
|
||||||
json_object_set(j, "CSR", json_integer(CSR));
|
j["CSR"] = CSR;
|
||||||
|
|
||||||
return j;
|
return j;
|
||||||
}
|
}
|
||||||
|
|
||||||
void mmu::set_par_pdr(const json_t *const j_in, const int run_mode, const bool is_d, const std::string & name)
|
void mmu::set_par_pdr(const JsonDocument j_in, const int run_mode, const bool is_d)
|
||||||
{
|
{
|
||||||
json_t *j = json_object_get(j_in, name.c_str());
|
JsonDocument j_par = j_in["par"];
|
||||||
|
int i_par = 0;
|
||||||
|
for(auto & v: j_par)
|
||||||
|
pages[run_mode][is_d][i++].par = v;
|
||||||
|
|
||||||
json_t *j_par = json_object_get(j, "par");
|
JsonDocument j_pdr = j_in["pdr"];
|
||||||
for(int i=0; i<8; i++)
|
int i_pdr = 0;
|
||||||
pages[run_mode][is_d][i].par = json_integer_value(json_array_get(j_par, i));
|
for(auto & v: j_pdr)
|
||||||
json_t *j_pdr = json_object_get(j, "pdr");
|
pages[run_mode][is_d][i++].pdr = v;
|
||||||
for(int i=0; i<8; i++)
|
|
||||||
pages[run_mode][is_d][i].pdr = json_integer_value(json_array_get(j_pdr, i));
|
|
||||||
}
|
}
|
||||||
|
|
||||||
mmu *mmu::deserialize(const json_t *const j, memory *const mem)
|
mmu *mmu::deserialize(const JsonDocument j, memory *const mem)
|
||||||
{
|
{
|
||||||
mmu *m = new mmu();
|
mmu *m = new mmu();
|
||||||
m->begin(mem);
|
m->begin(mem);
|
||||||
|
@ -567,17 +567,16 @@ mmu *mmu::deserialize(const json_t *const j, memory *const mem)
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
for(int is_d=0; is_d<2; is_d++)
|
for(int is_d=0; is_d<2; is_d++)
|
||||||
m->set_par_pdr(j, run_mode, is_d, format("runmode_%d_d_%d", run_mode, is_d));
|
m->set_par_pdr(j[format("runmode_%d_d_%d", run_mode, is_d)], run_mode, is_d);
|
||||||
}
|
}
|
||||||
|
|
||||||
m->MMR0 = json_integer_value(json_object_get(j, "MMR0"));
|
m->MMR0 = j["MMR0"];
|
||||||
m->MMR1 = json_integer_value(json_object_get(j, "MMR1"));
|
m->MMR1 = j["MMR1"];
|
||||||
m->MMR2 = json_integer_value(json_object_get(j, "MMR2"));
|
m->MMR2 = j["MMR2"];
|
||||||
m->MMR3 = json_integer_value(json_object_get(j, "MMR3"));
|
m->MMR3 = j["MMR3"];
|
||||||
m->CPUERR = json_integer_value(json_object_get(j, "CPUERR"));
|
m->CPUERR = j["CPUERR"];
|
||||||
m->PIR = json_integer_value(json_object_get(j, "PIR"));
|
m->PIR = j["PIR"];
|
||||||
m->CSR = json_integer_value(json_object_get(j, "CSR"));
|
m->CSR = j["CSR"];
|
||||||
|
|
||||||
return m;
|
return m;
|
||||||
}
|
}
|
||||||
#endif
|
|
||||||
|
|
13
mmu.h
13
mmu.h
|
@ -1,5 +1,6 @@
|
||||||
#pragma once
|
#pragma once
|
||||||
|
|
||||||
|
#include <ArduinoJson.h>
|
||||||
#include <cstdint>
|
#include <cstdint>
|
||||||
#include <string>
|
#include <string>
|
||||||
|
|
||||||
|
@ -57,10 +58,8 @@ private:
|
||||||
|
|
||||||
memory *m { nullptr };
|
memory *m { nullptr };
|
||||||
|
|
||||||
#if IS_POSIX
|
JsonDocument add_par_pdr(const int run_mode, const bool is_d) const;
|
||||||
void add_par_pdr(json_t *const target, const int run_mode, const bool is_d, const std::string & name) const;
|
void set_par_pdr(const JsonDocument j_in, const int run_mode, const bool is_d);
|
||||||
void set_par_pdr(const json_t *const j_in, const int run_mode, const bool is_d, const std::string & name);
|
|
||||||
#endif
|
|
||||||
|
|
||||||
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_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);
|
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);
|
||||||
|
@ -72,10 +71,8 @@ public:
|
||||||
|
|
||||||
void begin(memory *const m);
|
void begin(memory *const m);
|
||||||
|
|
||||||
#if IS_POSIX
|
JsonDocument serialize() const;
|
||||||
json_t *serialize() const;
|
static mmu *deserialize(const JsonDocument j, memory *const m);
|
||||||
static mmu *deserialize(const json_t *const j, memory *const m);
|
|
||||||
#endif
|
|
||||||
|
|
||||||
void mmudebug(const uint16_t a);
|
void mmudebug(const uint16_t a);
|
||||||
|
|
||||||
|
|
Loading…
Add table
Reference in a new issue