From 1e6d90de17a625a1191073b4e2f2a68c59ddf30d Mon Sep 17 00:00:00 2001 From: Thomas Harte Date: Tue, 5 Jul 2016 20:52:33 -0400 Subject: [PATCH] Made an attempt properly to deal with initial bus state. --- Machines/Commodore/1540/Commodore1540.hpp | 2 +- Machines/Commodore/SerialBus.cpp | 4 ++++ 2 files changed, 5 insertions(+), 1 deletion(-) diff --git a/Machines/Commodore/1540/Commodore1540.hpp b/Machines/Commodore/1540/Commodore1540.hpp index 0d1e7d52a..378ecb35c 100644 --- a/Machines/Commodore/1540/Commodore1540.hpp +++ b/Machines/Commodore/1540/Commodore1540.hpp @@ -52,7 +52,7 @@ class SerialPortVIA: public MOS::MOS6522, public MOS::MOS6522IRQD case ::Commodore::Serial::Line::Clock: _portB = (_portB & ~0x04) | (value ? 0 : 0x04); break; case ::Commodore::Serial::Line::Attention: _portB = (_portB & ~0x80) | (value ? 0 : 0x80); - set_control_line_input(Port::B, Line::Two, !!(value&0x80)); + set_control_line_input(Port::B, Line::Two, value); break; } } diff --git a/Machines/Commodore/SerialBus.cpp b/Machines/Commodore/SerialBus.cpp index 7d7ca7a09..c4e3a3f2c 100644 --- a/Machines/Commodore/SerialBus.cpp +++ b/Machines/Commodore/SerialBus.cpp @@ -13,10 +13,13 @@ using namespace Commodore::Serial; void Bus::add_port(std::shared_ptr port) { _ports.push_back(port); + for(int line = (int)ServiceRequest; line <= (int)Reset; line++) + set_line_output_did_change((Line)line); } void Bus::set_line_output_did_change(Line line) { + // i.e. I believe these lines to be open collector, active low bool new_line_value = false; for(std::weak_ptr port : _ports) { @@ -27,6 +30,7 @@ void Bus::set_line_output_did_change(Line line) } } + // post an update only if one occurred if(new_line_value != _line_values[line]) { _line_values[line] = new_line_value;