diff --git a/Machines/Acorn/BBCMicro/BBCMicro.cpp b/Machines/Acorn/BBCMicro/BBCMicro.cpp index 9fab0177b..93b33b37d 100644 --- a/Machines/Acorn/BBCMicro/BBCMicro.cpp +++ b/Machines/Acorn/BBCMicro/BBCMicro.cpp @@ -1091,7 +1091,7 @@ private: break; case Key::Break: - m6502_.template set(is_pressed); + set_reset(is_pressed); break; default: @@ -1102,10 +1102,18 @@ private: bool was_caps_ = false; void clear_all_keys() final { - m6502_.template set(false); + set_reset(false); system_via_port_handler_.clear_all_keys(); } + void set_reset(const bool reset) { + m6502_.template set(reset); + if constexpr (tube_processor != TubeProcessor::None) { + tube_.ula.set_reset(reset); + tube_.processor.set_reset(reset); + } + } + HalfCycles get_typer_delay(const std::string &text) const final { if(!m6502_.is_resetting()) { return Cycles(0); diff --git a/Machines/Acorn/Tube/FIFO.hpp b/Machines/Acorn/Tube/FIFO.hpp index a038abd6e..a4336543b 100644 --- a/Machines/Acorn/Tube/FIFO.hpp +++ b/Machines/Acorn/Tube/FIFO.hpp @@ -45,6 +45,11 @@ struct FIFO { return result; } + /// Empties the FIFO. + void reset() { + read_ = write_ = 0; + } + private: ULAT &ula_; uint8_t mask_; diff --git a/Machines/Acorn/Tube/Tube6502.hpp b/Machines/Acorn/Tube/Tube6502.hpp index b5786cda3..386546066 100644 --- a/Machines/Acorn/Tube/Tube6502.hpp +++ b/Machines/Acorn/Tube/Tube6502.hpp @@ -60,6 +60,7 @@ public: void set_reset(const bool reset) { m6502_.template set(reset); rom_visible_ |= reset; + update_interrupts(); } private: diff --git a/Machines/Acorn/Tube/TubeZ80.hpp b/Machines/Acorn/Tube/TubeZ80.hpp index 49ab5e774..45e5bd082 100644 --- a/Machines/Acorn/Tube/TubeZ80.hpp +++ b/Machines/Acorn/Tube/TubeZ80.hpp @@ -36,6 +36,7 @@ public: void set_reset(const bool reset) { z80_.set_reset_line(reset); rom_visible_ |= reset; + update_interrupts(); } HalfCycles perform_machine_cycle(const CPU::Z80::PartialMachineCycle &cycle) { diff --git a/Machines/Acorn/Tube/ULA.hpp b/Machines/Acorn/Tube/ULA.hpp index a03f17a88..54cb0bd0f 100644 --- a/Machines/Acorn/Tube/ULA.hpp +++ b/Machines/Acorn/Tube/ULA.hpp @@ -113,6 +113,21 @@ struct ULA { default: __builtin_unreachable(); } } + + void set_reset(const bool reset) { + if(reset) { + flags_ = 0x01; + to_parasite1_.reset(); + to_parasite2_.reset(); + to_parasite3_.reset(); + to_parasite4_.reset(); + to_host1_.reset(); + to_host2_.reset(); + to_host3_.reset(); + to_host4_.reset(); + } + } + private: uint8_t status() const { return flags_;