diff --git a/Components/AY38910/AY38910.cpp b/Components/AY38910/AY38910.cpp index 1a3f0b33e..e98395618 100644 --- a/Components/AY38910/AY38910.cpp +++ b/Components/AY38910/AY38910.cpp @@ -226,7 +226,11 @@ uint8_t AY38910::get_register_value() { 0xe0, 0xe0, 0xe0, 0x00, 0x00, 0xf0, 0x00, 0x00 }; - return registers_[selected_register_] | register_masks[selected_register_]; + switch(selected_register_) { + default: return registers_[selected_register_] | register_masks[selected_register_]; + case 14: return (registers_[0x7] & 0x40) ? registers_[14] : port_inputs_[0]; + case 15: return (registers_[0x7] & 0x80) ? registers_[15] : port_inputs_[1]; + } } #pragma mark - Port handling @@ -236,7 +240,7 @@ uint8_t AY38910::get_port_output(bool port_b) { } void AY38910::set_port_input(bool port_b, uint8_t value) { - registers_[port_b ? 15 : 14] = value; + port_inputs_[port_b ? 1 : 0] = value; update_bus(); } diff --git a/Components/AY38910/AY38910.hpp b/Components/AY38910/AY38910.hpp index 8065990de..2c021ed95 100644 --- a/Components/AY38910/AY38910.hpp +++ b/Components/AY38910/AY38910.hpp @@ -59,6 +59,7 @@ class AY38910: public ::Outputs::Filter { private: int selected_register_; uint8_t registers_[16], output_registers_[16]; + uint8_t port_inputs_[2]; int master_divider_;