From c352d8ae8c7339026b956f60f2bf69cefc4324f8 Mon Sep 17 00:00:00 2001 From: Thomas Harte Date: Sun, 13 Oct 2019 23:04:57 -0400 Subject: [PATCH] Adds a received_data_ register, that presently can never fill. --- Components/6850/6850.cpp | 9 +++++---- Components/6850/6850.hpp | 6 ++++-- 2 files changed, 9 insertions(+), 6 deletions(-) diff --git a/Components/6850/6850.cpp b/Components/6850/6850.cpp index d955a30cd..1001c01ac 100644 --- a/Components/6850/6850.cpp +++ b/Components/6850/6850.cpp @@ -29,7 +29,8 @@ uint8_t ACIA::read(int address) { } else { LOG("Read status"); return - ((next_transmission_ == NoTransmission) ? 0x02 : 0x00) | + ((received_data_ == NoValue) ? 0x00 : 0x01) | + ((next_transmission_ == NoValue) ? 0x02 : 0x00) | (data_carrier_detect.read() ? 0x04 : 0x00) | (clear_to_send.read() ? 0x08 : 0x00) | (interrupt_request_ ? 0x80 : 0x00) @@ -98,7 +99,7 @@ void ACIA::run_for(HalfCycles length) { if(write_data_time_remaining) { if(transmit_advance >= write_data_time_remaining) { - if(next_transmission_ != NoTransmission) { + if(next_transmission_ != NoValue) { transmit.flush_writing(); consider_transmission(); transmit.advance_writer(transmit_advance - write_data_time_remaining); @@ -116,7 +117,7 @@ void ACIA::run_for(HalfCycles length) { } void ACIA::consider_transmission() { - if(next_transmission_ != NoTransmission && !transmit.write_data_time_remaining()) { + if(next_transmission_ != NoValue && !transmit.write_data_time_remaining()) { // Establish start bit and [7 or 8] data bits. if(data_bits_ == 7) next_transmission_ &= 0x7f; int transmission = next_transmission_ << 1; @@ -145,7 +146,7 @@ void ACIA::consider_transmission() { transmit.write(divider_ * 2, total_bits, transmission); // Mark the transmit register as empty again. - next_transmission_ = NoTransmission; + next_transmission_ = NoValue; } } diff --git a/Components/6850/6850.hpp b/Components/6850/6850.hpp index 5111d5c89..0ef3da4ff 100644 --- a/Components/6850/6850.hpp +++ b/Components/6850/6850.hpp @@ -69,8 +69,10 @@ class ACIA: public ClockingHint::Source { } parity_ = Parity::None; int data_bits_ = 7, stop_bits_ = 2; - static const int NoTransmission = 0x100; - int next_transmission_ = NoTransmission; + static const int NoValue = 0x100; + int next_transmission_ = NoValue; + int received_data_ = NoValue; + void consider_transmission(); bool receive_interrupt_enabled_ = false;