From 41a30c147d23a93447d488be03aec72dc9ac4a34 Mon Sep 17 00:00:00 2001 From: Thomas Harte Date: Mon, 7 Aug 2017 19:51:36 -0400 Subject: [PATCH] Adjusted: invalid register selection simply deselects all registers. --- Components/AY38910/AY38910.cpp | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/Components/AY38910/AY38910.cpp b/Components/AY38910/AY38910.cpp index 4a885e8aa..683e325c9 100644 --- a/Components/AY38910/AY38910.cpp +++ b/Components/AY38910/AY38910.cpp @@ -169,10 +169,11 @@ void AY38910::evaluate_output_volume() { #pragma mark - Register manipulation void AY38910::select_register(uint8_t r) { - selected_register_ = r & 0xf; + selected_register_ = r; } void AY38910::set_register_value(uint8_t value) { + if(selected_register_ > 15) return; registers_[selected_register_] = value; if(selected_register_ < 14) { int selected_register = selected_register_; @@ -226,6 +227,7 @@ uint8_t AY38910::get_register_value() { 0xe0, 0xe0, 0xe0, 0x00, 0x00, 0xf0, 0x00, 0x00 }; + if(selected_register_ > 15) return 0xff; switch(selected_register_) { default: return registers_[selected_register_] & ~register_masks[selected_register_]; case 14: return (registers_[0x7] & 0x40) ? registers_[14] : port_inputs_[0];