Call to virtual method ... during construction bypasses virtual dispatch (scan-build / clang analyzer)
This commit is contained in:
parent
a28b575fb7
commit
6d7f3d9512
14 changed files with 55 additions and 12 deletions
|
@ -305,13 +305,19 @@ void setup() {
|
||||||
cnsl = new console_esp32(&stop_event, serial_ports, 80, 25);
|
cnsl = new console_esp32(&stop_event, serial_ports, 80, 25);
|
||||||
#endif
|
#endif
|
||||||
cnsl->set_bus(b);
|
cnsl->set_bus(b);
|
||||||
|
cnsl->begin();
|
||||||
|
|
||||||
running = cnsl->get_running_flag();
|
running = cnsl->get_running_flag();
|
||||||
|
|
||||||
Serial.println(F("Connect RK05 and RL02 to BUS"));
|
Serial.println(F("Connect RK05 and RL02 devices to BUS"));
|
||||||
b->add_rk05(new rk05(b, cnsl->get_disk_read_activity_flag(), cnsl->get_disk_write_activity_flag()));
|
auto rk05_dev = new rk05(b, cnsl->get_disk_read_activity_flag(), cnsl->get_disk_write_activity_flag());
|
||||||
|
rk05_dev->begin();
|
||||||
|
b->add_rk05(rk05_dev);
|
||||||
|
|
||||||
|
auto rl02_dev = new rl02(b, cnsl->get_disk_read_activity_flag(), cnsl->get_disk_write_activity_flag());
|
||||||
|
rl02_dev->begin();
|
||||||
|
b->add_rl02(rl02_dev);
|
||||||
|
|
||||||
b->add_rl02(new rl02(b, cnsl->get_disk_read_activity_flag(), cnsl->get_disk_write_activity_flag()));
|
|
||||||
|
|
||||||
Serial.println(F("Init TTY"));
|
Serial.println(F("Init TTY"));
|
||||||
tty_ = new tty(cnsl, b);
|
tty_ = new tty(cnsl, b);
|
||||||
|
|
1
bus.cpp
1
bus.cpp
|
@ -24,6 +24,7 @@
|
||||||
bus::bus()
|
bus::bus()
|
||||||
{
|
{
|
||||||
mmu_ = new mmu();
|
mmu_ = new mmu();
|
||||||
|
mmu_->begin();
|
||||||
|
|
||||||
kw11_l_ = new kw11_l(this);
|
kw11_l_ = new kw11_l(this);
|
||||||
|
|
||||||
|
|
|
@ -46,6 +46,10 @@ console::~console()
|
||||||
delete [] screen_buffer;
|
delete [] screen_buffer;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void console::begin()
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
void console::start_thread()
|
void console::start_thread()
|
||||||
{
|
{
|
||||||
assert(b);
|
assert(b);
|
||||||
|
|
|
@ -61,6 +61,8 @@ public:
|
||||||
console(std::atomic_uint32_t *const stop_event, const int t_width = 80, const int t_height = 25);
|
console(std::atomic_uint32_t *const stop_event, const int t_width = 80, const int t_height = 25);
|
||||||
virtual ~console();
|
virtual ~console();
|
||||||
|
|
||||||
|
virtual void begin();
|
||||||
|
|
||||||
void set_bus(bus *const b) { this->b = b; }
|
void set_bus(bus *const b) { this->b = b; }
|
||||||
|
|
||||||
void start_thread();
|
void start_thread();
|
||||||
|
|
|
@ -16,10 +16,6 @@
|
||||||
console_ncurses::console_ncurses(std::atomic_uint32_t *const stop_event): console(stop_event)
|
console_ncurses::console_ncurses(std::atomic_uint32_t *const stop_event): console(stop_event)
|
||||||
{
|
{
|
||||||
init_ncurses(true);
|
init_ncurses(true);
|
||||||
|
|
||||||
resize_terminal();
|
|
||||||
|
|
||||||
th_panel = new std::thread(&console_ncurses::panel_update_thread, this);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
console_ncurses::~console_ncurses()
|
console_ncurses::~console_ncurses()
|
||||||
|
@ -51,6 +47,13 @@ console_ncurses::~console_ncurses()
|
||||||
endwin();
|
endwin();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void console_ncurses::begin()
|
||||||
|
{
|
||||||
|
resize_terminal();
|
||||||
|
|
||||||
|
th_panel = new std::thread(&console_ncurses::panel_update_thread, this);
|
||||||
|
}
|
||||||
|
|
||||||
int console_ncurses::wait_for_char_ll(const short timeout)
|
int console_ncurses::wait_for_char_ll(const short timeout)
|
||||||
{
|
{
|
||||||
struct pollfd fds[] = { { STDIN_FILENO, POLLIN, 0 } };
|
struct pollfd fds[] = { { STDIN_FILENO, POLLIN, 0 } };
|
||||||
|
|
|
@ -32,6 +32,8 @@ public:
|
||||||
console_ncurses(std::atomic_uint32_t *const stop_event);
|
console_ncurses(std::atomic_uint32_t *const stop_event);
|
||||||
virtual ~console_ncurses();
|
virtual ~console_ncurses();
|
||||||
|
|
||||||
|
void begin() override;
|
||||||
|
|
||||||
void put_string_lf(const std::string & what) override;
|
void put_string_lf(const std::string & what) override;
|
||||||
|
|
||||||
void resize_terminal() override;
|
void resize_terminal() override;
|
||||||
|
|
|
@ -18,5 +18,7 @@ public:
|
||||||
virtual ~disk_device() {
|
virtual ~disk_device() {
|
||||||
}
|
}
|
||||||
|
|
||||||
|
virtual void begin() = 0;
|
||||||
|
|
||||||
std::vector<disk_backend *> * access_disk_backends() { return &fhs; }
|
std::vector<disk_backend *> * access_disk_backends() { return &fhs; }
|
||||||
};
|
};
|
||||||
|
|
9
main.cpp
9
main.cpp
|
@ -534,9 +534,13 @@ int main(int argc, char *argv[])
|
||||||
if (enable_bootloader)
|
if (enable_bootloader)
|
||||||
set_boot_loader(b, bootloader);
|
set_boot_loader(b, bootloader);
|
||||||
|
|
||||||
b->add_rk05(new rk05(b, cnsl->get_disk_read_activity_flag(), cnsl->get_disk_write_activity_flag()));
|
auto rk05_dev = new rk05(b, cnsl->get_disk_read_activity_flag(), cnsl->get_disk_write_activity_flag());
|
||||||
|
rk05_dev->begin();
|
||||||
|
b->add_rk05(rk05_dev);
|
||||||
|
|
||||||
b->add_rl02(new rl02(b, cnsl->get_disk_read_activity_flag(), cnsl->get_disk_write_activity_flag()));
|
auto rl02_dev = new rl02(b, cnsl->get_disk_read_activity_flag(), cnsl->get_disk_write_activity_flag());
|
||||||
|
rl02_dev->begin();
|
||||||
|
b->add_rl02(rl02_dev);
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
FILE *fh = fopen(deserialize.c_str(), "r");
|
FILE *fh = fopen(deserialize.c_str(), "r");
|
||||||
|
@ -566,6 +570,7 @@ int main(int argc, char *argv[])
|
||||||
}
|
}
|
||||||
|
|
||||||
cnsl->set_bus(b);
|
cnsl->set_bus(b);
|
||||||
|
cnsl->begin();
|
||||||
|
|
||||||
running = cnsl->get_running_flag();
|
running = cnsl->get_running_flag();
|
||||||
|
|
||||||
|
|
7
mmu.cpp
7
mmu.cpp
|
@ -9,13 +9,17 @@
|
||||||
|
|
||||||
mmu::mmu()
|
mmu::mmu()
|
||||||
{
|
{
|
||||||
reset();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
mmu::~mmu()
|
mmu::~mmu()
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void mmu::begin()
|
||||||
|
{
|
||||||
|
reset();
|
||||||
|
}
|
||||||
|
|
||||||
void mmu::reset()
|
void mmu::reset()
|
||||||
{
|
{
|
||||||
memset(pages, 0x00, sizeof pages);
|
memset(pages, 0x00, sizeof pages);
|
||||||
|
@ -265,6 +269,7 @@ void mmu::set_par_pdr(const json_t *const j_in, const int run_mode, const bool i
|
||||||
mmu *mmu::deserialize(const json_t *const j)
|
mmu *mmu::deserialize(const json_t *const j)
|
||||||
{
|
{
|
||||||
mmu *m = new mmu();
|
mmu *m = new mmu();
|
||||||
|
m->begin();
|
||||||
|
|
||||||
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)
|
||||||
|
|
2
mmu.h
2
mmu.h
|
@ -50,6 +50,8 @@ public:
|
||||||
mmu();
|
mmu();
|
||||||
virtual ~mmu();
|
virtual ~mmu();
|
||||||
|
|
||||||
|
void begin();
|
||||||
|
|
||||||
#if IS_POSIX
|
#if IS_POSIX
|
||||||
json_t *serialize() const;
|
json_t *serialize() const;
|
||||||
static mmu *deserialize(const json_t *const j);
|
static mmu *deserialize(const json_t *const j);
|
||||||
|
|
6
rk05.cpp
6
rk05.cpp
|
@ -28,7 +28,6 @@ rk05::rk05(bus *const b, std::atomic_bool *const disk_read_acitivity, std::atomi
|
||||||
disk_read_acitivity(disk_read_acitivity),
|
disk_read_acitivity(disk_read_acitivity),
|
||||||
disk_write_acitivity(disk_write_acitivity)
|
disk_write_acitivity(disk_write_acitivity)
|
||||||
{
|
{
|
||||||
reset();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
rk05::~rk05()
|
rk05::~rk05()
|
||||||
|
@ -37,6 +36,11 @@ rk05::~rk05()
|
||||||
delete fh;
|
delete fh;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void rk05::begin()
|
||||||
|
{
|
||||||
|
reset();
|
||||||
|
}
|
||||||
|
|
||||||
void rk05::reset()
|
void rk05::reset()
|
||||||
{
|
{
|
||||||
memset(registers, 0x00, sizeof registers);
|
memset(registers, 0x00, sizeof registers);
|
||||||
|
|
1
rk05.h
1
rk05.h
|
@ -42,6 +42,7 @@ public:
|
||||||
rk05(bus *const b, std::atomic_bool *const disk_read_acitivity, std::atomic_bool *const disk_write_acitivity);
|
rk05(bus *const b, std::atomic_bool *const disk_read_acitivity, std::atomic_bool *const disk_write_acitivity);
|
||||||
virtual ~rk05();
|
virtual ~rk05();
|
||||||
|
|
||||||
|
void begin() override;
|
||||||
void reset() override;
|
void reset() override;
|
||||||
|
|
||||||
uint8_t readByte(const uint16_t addr) override;
|
uint8_t readByte(const uint16_t addr) override;
|
||||||
|
|
7
rl02.cpp
7
rl02.cpp
|
@ -36,7 +36,6 @@ rl02::rl02(bus *const b, std::atomic_bool *const disk_read_activity, std::atomic
|
||||||
disk_read_activity (disk_read_activity ),
|
disk_read_activity (disk_read_activity ),
|
||||||
disk_write_activity(disk_write_activity)
|
disk_write_activity(disk_write_activity)
|
||||||
{
|
{
|
||||||
reset();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
rl02::~rl02()
|
rl02::~rl02()
|
||||||
|
@ -45,6 +44,11 @@ rl02::~rl02()
|
||||||
delete fh;
|
delete fh;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void rl02::begin()
|
||||||
|
{
|
||||||
|
reset();
|
||||||
|
}
|
||||||
|
|
||||||
void rl02::reset()
|
void rl02::reset()
|
||||||
{
|
{
|
||||||
memset(registers, 0x00, sizeof registers );
|
memset(registers, 0x00, sizeof registers );
|
||||||
|
@ -85,6 +89,7 @@ rl02 *rl02::deserialize(const json_t *const j, bus *const b)
|
||||||
std::vector<disk_backend *> backends;
|
std::vector<disk_backend *> backends;
|
||||||
|
|
||||||
rl02 *r = new rl02(b, nullptr, nullptr);
|
rl02 *r = new rl02(b, nullptr, nullptr);
|
||||||
|
r->begin();
|
||||||
|
|
||||||
json_t *j_backends = json_object_get(j, "backends");
|
json_t *j_backends = json_object_get(j, "backends");
|
||||||
for(size_t i=0; i<json_array_size(j_backends); i++)
|
for(size_t i=0; i<json_array_size(j_backends); i++)
|
||||||
|
|
1
rl02.h
1
rl02.h
|
@ -50,6 +50,7 @@ public:
|
||||||
rl02(bus *const b, std::atomic_bool *const disk_read_activity, std::atomic_bool *const disk_write_activity);
|
rl02(bus *const b, std::atomic_bool *const disk_read_activity, std::atomic_bool *const disk_write_activity);
|
||||||
virtual ~rl02();
|
virtual ~rl02();
|
||||||
|
|
||||||
|
void begin() override;
|
||||||
void reset() override;
|
void reset() override;
|
||||||
|
|
||||||
#if IS_POSIX
|
#if IS_POSIX
|
||||||
|
|
Loading…
Add table
Reference in a new issue