From 92e72959c3037908aa8eea1a4541bff9e0a897ba Mon Sep 17 00:00:00 2001
From: Thomas Harte <thomas.harte@gmail.com>
Date: Fri, 9 Oct 2020 23:12:20 -0400
Subject: [PATCH] Makes corrections to ix addressing mode and shift/roll flags.

---
 Processors/65816/Implementation/65816Implementation.hpp | 9 +++++----
 Processors/65816/Implementation/65816Storage.cpp        | 6 ++++++
 2 files changed, 11 insertions(+), 4 deletions(-)

diff --git a/Processors/65816/Implementation/65816Implementation.hpp b/Processors/65816/Implementation/65816Implementation.hpp
index 4d567dd9f..d8b11676b 100644
--- a/Processors/65816/Implementation/65816Implementation.hpp
+++ b/Processors/65816/Implementation/65816Implementation.hpp
@@ -182,6 +182,7 @@ template <typename BusHandler> void Processor<BusHandler>::run_for(const Cycles
 
 			case OperationCopyDataToInstruction:
 				instruction_buffer_ = data_buffer_;
+				data_buffer_.clear();
 			continue;
 
 			case OperationCopyAToData:
@@ -672,26 +673,26 @@ template <typename BusHandler> void Processor<BusHandler>::run_for(const Cycles
 					case ASL:
 						flags_.carry = data_buffer_.value >> (7 + m_shift_);
 						data_buffer_.value <<= 1;
-						flags_.set_nz(instruction_buffer_.value, m_shift_);
+						flags_.set_nz(data_buffer_.value, m_shift_);
 					break;
 
 					case LSR:
 						flags_.carry = data_buffer_.value & 1;
 						data_buffer_.value >>= 1;
-						flags_.set_nz(instruction_buffer_.value, m_shift_);
+						flags_.set_nz(data_buffer_.value, m_shift_);
 					break;
 
 					case ROL:
 						data_buffer_.value = (data_buffer_.value << 1) | flags_.carry;
 						flags_.carry = data_buffer_.value >> (7 + m_shift_);
-						flags_.set_nz(instruction_buffer_.value, m_shift_);
+						flags_.set_nz(data_buffer_.value, m_shift_);
 					break;
 
 					case ROR: {
 						const uint8_t next_carry = data_buffer_.value & 1;
 						data_buffer_.value = (data_buffer_.value >> 1) | (flags_.carry << (7 + m_shift_));
 						flags_.carry = next_carry;
-						flags_.set_nz(instruction_buffer_.value, m_shift_);
+						flags_.set_nz(data_buffer_.value, m_shift_);
 					} break;
 
 					//
diff --git a/Processors/65816/Implementation/65816Storage.cpp b/Processors/65816/Implementation/65816Storage.cpp
index c83963d30..7968e27b0 100644
--- a/Processors/65816/Implementation/65816Storage.cpp
+++ b/Processors/65816/Implementation/65816Storage.cpp
@@ -405,6 +405,12 @@ struct CPU::WDC65816::ProcessorStorageConstructor {
 
 		target(CycleFetchPCThrowaway);					// IO.
 
+		target(CycleFetchIncrementData);				// AAL
+		target(CycleFetchData);							// AAH
+
+		target(OperationCopyDataToInstruction);
+		target(OperationConstructAbsolute);
+
 		read_write(type, is8bit, target);
 	}