From f797e6b5b655698270f9eded254f8b8c5b7a7e38 Mon Sep 17 00:00:00 2001 From: Thomas Harte Date: Sun, 13 Mar 2016 19:45:50 -0400 Subject: [PATCH] Started taking baby steps towards a genuine unification of the tape interrupt generating code. --- Machines/Electron/Electron.cpp | 36 ++++++++++++---------------------- 1 file changed, 13 insertions(+), 23 deletions(-) diff --git a/Machines/Electron/Electron.cpp b/Machines/Electron/Electron.cpp index 65019103d..4a08e7c10 100644 --- a/Machines/Electron/Electron.cpp +++ b/Machines/Electron/Electron.cpp @@ -850,21 +850,21 @@ inline void Tape::get_next_tape_pulse() inline void Tape::push_tape_bit(uint16_t bit) { _data_register = (uint16_t)((_data_register >> 1) | (bit << 10)); - if(_input.minimum_bits_until_full) - { - _input.minimum_bits_until_full--; + if(_input.minimum_bits_until_full) _input.minimum_bits_until_full--; + if(_input.minimum_bits_until_full == 7) _interrupt_status &= ~Interrupt::ReceiveDataFull; + + if(_output.bits_remaining_until_empty) _output.bits_remaining_until_empty--; + if(!_output.bits_remaining_until_empty) _interrupt_status |= Interrupt::TransmitDataEmpty; + + if(_data_register == 0x3ff) _interrupt_status |= Interrupt::HighToneDetect; + else _interrupt_status &= ~Interrupt::HighToneDetect; - if(_input.minimum_bits_until_full == 7) - { - _interrupt_status &= ~Interrupt::ReceiveDataFull; - } - } evaluate_interrupts(); } -inline void Tape::reset_tape_input() -{ - _input.minimum_bits_until_full = 0; +//inline void Tape::reset_tape_input() +//{ +// _input.minimum_bits_until_full = 0; // _interrupt_status &= ~(Interrupt::ReceiveDataFull | Interrupt::TransmitDataEmpty | Interrupt::HighToneDetect); // // if(_last_posted_interrupt_status != _interrupt_status) @@ -872,7 +872,7 @@ inline void Tape::reset_tape_input() // _last_posted_interrupt_status = _interrupt_status; // if(_delegate) _delegate->tape_did_change_interrupt_status(this); // } -} +//} inline void Tape::evaluate_interrupts() { @@ -885,11 +885,6 @@ inline void Tape::evaluate_interrupts() } } - if(_data_register == 0x3ff) - _interrupt_status |= Interrupt::HighToneDetect; - else - _interrupt_status &= ~Interrupt::HighToneDetect; - if(_last_posted_interrupt_status != _interrupt_status) { _last_posted_interrupt_status = _interrupt_status; @@ -920,7 +915,6 @@ inline void Tape::set_counter(uint8_t value) inline void Tape::set_data_register(uint8_t value) { _data_register = (uint16_t)((value << 2) | 1); - printf("Loaded — %03x\n", _data_register); _output.bits_remaining_until_empty = 9; } @@ -987,11 +981,7 @@ inline void Tape::run_for_cycles(unsigned int number_of_cycles) while(_output.cycles_into_pulse > 1666) { _output.cycles_into_pulse -= 1666; - if(_output.bits_remaining_until_empty) _output.bits_remaining_until_empty--; - if(!_output.bits_remaining_until_empty) _interrupt_status |= Interrupt::TransmitDataEmpty; - _data_register = (_data_register >> 1) | 0x200; - - evaluate_interrupts(); + push_tape_bit(1); } } }