reset in ESP32 mode now will not reset complete ESP32, only the emulation

This commit is contained in:
folkert van heusden 2024-04-11 17:44:14 +02:00
parent 5dec87aaa4
commit 0647819dd8
Signed by untrusted user who does not match committer: folkert
GPG key ID: 6B6455EDFEED3BD1
11 changed files with 66 additions and 24 deletions

29
bus.cpp
View file

@ -31,9 +31,7 @@ bus::bus()
{ {
m = new memory(n_pages * 8192l); m = new memory(n_pages * 8192l);
memset(pages, 0x00, sizeof pages); reset();
CPUERR = MMR0 = MMR1 = MMR2 = MMR3 = PIR = CSR = 0;
#if defined(BUILD_FOR_RP2040) #if defined(BUILD_FOR_RP2040)
xSemaphoreGive(lf_csr_lock); // initialize xSemaphoreGive(lf_csr_lock); // initialize
@ -50,6 +48,26 @@ bus::~bus()
delete m; delete m;
} }
void bus::reset()
{
m->reset();
memset(pages, 0x00, sizeof pages);
CPUERR = MMR0 = MMR1 = MMR2 = MMR3 = PIR = CSR = 0;
if (c)
c->reset();
if (tm11)
tm11->reset();
if (rk05_)
rk05_->reset();
if (rl02_)
rl02_->reset();
if (tty_)
tty_->reset();
}
void bus::add_cpu(cpu *const c) void bus::add_cpu(cpu *const c)
{ {
delete this->c; delete this->c;
@ -80,11 +98,6 @@ void bus::add_tty(tty *const tty_)
this->tty_ = tty_; this->tty_ = tty_;
} }
void bus::clearmem()
{
m->reset();
}
void bus::init() void bus::init()
{ {
MMR0 = 0; MMR0 = 0;

2
bus.h
View file

@ -123,7 +123,7 @@ public:
bus(); bus();
~bus(); ~bus();
void clearmem(); void reset();
void set_console_switches(const uint16_t new_state) { console_switches = new_state; } void set_console_switches(const uint16_t new_state) { console_switches = new_state; }
void set_console_switch(const int bit, const bool state) { console_switches &= ~(1 << bit); console_switches |= state << bit; } void set_console_switch(const int bit, const bool state) { console_switches &= ~(1 << bit); console_switches |= state << bit; }

View file

@ -419,13 +419,8 @@ void debugger(console *const cnsl, bus *const b, std::atomic_uint32_t *const sto
continue; continue;
} }
else if (cmd == "reset" || cmd == "r") { else if (cmd == "reset" || cmd == "r") {
#if defined(ESP32)
ESP.restart();
#else
*stop_event = EVENT_NONE; *stop_event = EVENT_NONE;
b->reset();
c->reset();
#endif
continue; continue;
} }
#if defined(ESP32) || defined(BUILD_FOR_RP2040) #if defined(ESP32) || defined(BUILD_FOR_RP2040)

View file

@ -28,9 +28,9 @@ rk05::rk05(const std::vector<disk_backend *> & files, bus *const b, std::atomic_
disk_read_acitivity(disk_read_acitivity), disk_read_acitivity(disk_read_acitivity),
disk_write_acitivity(disk_write_acitivity) disk_write_acitivity(disk_write_acitivity)
{ {
memset(registers, 0x00, sizeof registers);
fhs = files; fhs = files;
reset();
} }
rk05::~rk05() rk05::~rk05()
@ -39,6 +39,11 @@ rk05::~rk05()
delete fh; delete fh;
} }
void rk05::reset()
{
memset(registers, 0x00, sizeof registers);
}
uint8_t rk05::readByte(const uint16_t addr) uint8_t rk05::readByte(const uint16_t addr)
{ {
uint16_t v = readWord(addr & ~1); uint16_t v = readWord(addr & ~1);

4
rk05.h
View file

@ -28,7 +28,7 @@ class rk05
{ {
private: private:
bus *const b { nullptr }; bus *const b { nullptr };
uint16_t registers [ 7]; uint16_t registers [7];
std::vector<disk_backend *> fhs; std::vector<disk_backend *> fhs;
std::atomic_bool *const disk_read_acitivity { nullptr }; std::atomic_bool *const disk_read_acitivity { nullptr };
@ -38,6 +38,8 @@ public:
rk05(const std::vector<disk_backend *> & files, bus *const b, std::atomic_bool *const disk_read_acitivity, std::atomic_bool *const disk_write_acitivity); rk05(const std::vector<disk_backend *> & files, bus *const b, std::atomic_bool *const disk_read_acitivity, std::atomic_bool *const disk_write_acitivity);
virtual ~rk05(); virtual ~rk05();
void reset();
uint8_t readByte(const uint16_t addr); uint8_t readByte(const uint16_t addr);
uint16_t readWord(const uint16_t addr); uint16_t readWord(const uint16_t addr);

View file

@ -28,10 +28,9 @@ rl02::rl02(const std::vector<disk_backend *> & files, bus *const b, std::atomic_
disk_read_acitivity(disk_read_acitivity), disk_read_acitivity(disk_read_acitivity),
disk_write_acitivity(disk_write_acitivity) disk_write_acitivity(disk_write_acitivity)
{ {
memset(registers, 0x00, sizeof registers);
memset(xfer_buffer, 0x00, sizeof xfer_buffer);
fhs = files; fhs = files;
reset();
} }
rl02::~rl02() rl02::~rl02()
@ -40,6 +39,12 @@ rl02::~rl02()
delete fh; delete fh;
} }
void rl02::reset()
{
memset(registers, 0x00, sizeof registers);
memset(xfer_buffer, 0x00, sizeof xfer_buffer);
}
uint8_t rl02::readByte(const uint16_t addr) uint8_t rl02::readByte(const uint16_t addr)
{ {
uint16_t v = readWord(addr & ~1); uint16_t v = readWord(addr & ~1);

2
rl02.h
View file

@ -38,6 +38,8 @@ public:
rl02(const std::vector<disk_backend *> & files, bus *const b, std::atomic_bool *const disk_read_acitivity, std::atomic_bool *const disk_write_acitivity); rl02(const std::vector<disk_backend *> & files, bus *const b, std::atomic_bool *const disk_read_acitivity, std::atomic_bool *const disk_write_acitivity);
virtual ~rl02(); virtual ~rl02();
void reset();
uint8_t readByte(const uint16_t addr); uint8_t readByte(const uint16_t addr);
uint16_t readWord(const uint16_t addr); uint16_t readWord(const uint16_t addr);

View file

@ -13,6 +13,8 @@
tm_11::tm_11(const std::string & file, memory *const m) : m(m) tm_11::tm_11(const std::string & file, memory *const m) : m(m)
{ {
fh = fopen(file.c_str(), "rb"); fh = fopen(file.c_str(), "rb");
reset();
} }
tm_11::~tm_11() tm_11::~tm_11()
@ -20,6 +22,13 @@ tm_11::~tm_11()
fclose(fh); fclose(fh);
} }
void tm_11::reset()
{
memset(registers, 0x00, sizeof registers );
memset(xfer_buffer, 0x00, sizeof xfer_buffer);
offset = 0;
}
uint8_t tm_11::readByte(const uint16_t addr) uint8_t tm_11::readByte(const uint16_t addr)
{ {
uint16_t v = readWord(addr & ~1); uint16_t v = readWord(addr & ~1);

View file

@ -31,6 +31,8 @@ public:
tm_11(const std::string & file, memory *const m); tm_11(const std::string & file, memory *const m);
virtual ~tm_11(); virtual ~tm_11();
void reset();
uint8_t readByte(const uint16_t addr); uint8_t readByte(const uint16_t addr);
uint16_t readWord(const uint16_t addr); uint16_t readWord(const uint16_t addr);

View file

@ -33,6 +33,8 @@ tty::tty(console *const c, bus *const b) :
c(c), c(c),
b(b) b(b)
{ {
reset();
#if defined(BUILD_FOR_RP2040) #if defined(BUILD_FOR_RP2040)
xSemaphoreGive(chars_lock); // initialize xSemaphoreGive(chars_lock); // initialize
#endif #endif
@ -54,6 +56,11 @@ tty::~tty()
#endif #endif
} }
void tty::reset()
{
memset(registers, 0x00, sizeof registers);
}
uint8_t tty::readByte(const uint16_t addr) uint8_t tty::readByte(const uint16_t addr)
{ {
uint16_t v = readWord(addr & ~1); uint16_t v = readWord(addr & ~1);

2
tty.h
View file

@ -50,6 +50,8 @@ public:
tty(console *const c, bus *const b); tty(console *const c, bus *const b);
virtual ~tty(); virtual ~tty();
void reset();
uint8_t readByte(const uint16_t addr); uint8_t readByte(const uint16_t addr);
uint16_t readWord(const uint16_t addr); uint16_t readWord(const uint16_t addr);