mirror of
https://github.com/TomHarte/CLK.git
synced 2025-08-09 05:25:01 +00:00
Makes corrections to ix addressing mode and shift/roll flags.
This commit is contained in:
@@ -182,6 +182,7 @@ template <typename BusHandler> void Processor<BusHandler>::run_for(const Cycles
|
|||||||
|
|
||||||
case OperationCopyDataToInstruction:
|
case OperationCopyDataToInstruction:
|
||||||
instruction_buffer_ = data_buffer_;
|
instruction_buffer_ = data_buffer_;
|
||||||
|
data_buffer_.clear();
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
case OperationCopyAToData:
|
case OperationCopyAToData:
|
||||||
@@ -672,26 +673,26 @@ template <typename BusHandler> void Processor<BusHandler>::run_for(const Cycles
|
|||||||
case ASL:
|
case ASL:
|
||||||
flags_.carry = data_buffer_.value >> (7 + m_shift_);
|
flags_.carry = data_buffer_.value >> (7 + m_shift_);
|
||||||
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;
|
break;
|
||||||
|
|
||||||
case LSR:
|
case LSR:
|
||||||
flags_.carry = data_buffer_.value & 1;
|
flags_.carry = data_buffer_.value & 1;
|
||||||
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;
|
break;
|
||||||
|
|
||||||
case ROL:
|
case ROL:
|
||||||
data_buffer_.value = (data_buffer_.value << 1) | flags_.carry;
|
data_buffer_.value = (data_buffer_.value << 1) | flags_.carry;
|
||||||
flags_.carry = data_buffer_.value >> (7 + m_shift_);
|
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;
|
break;
|
||||||
|
|
||||||
case ROR: {
|
case ROR: {
|
||||||
const uint8_t next_carry = data_buffer_.value & 1;
|
const uint8_t next_carry = data_buffer_.value & 1;
|
||||||
data_buffer_.value = (data_buffer_.value >> 1) | (flags_.carry << (7 + m_shift_));
|
data_buffer_.value = (data_buffer_.value >> 1) | (flags_.carry << (7 + m_shift_));
|
||||||
flags_.carry = next_carry;
|
flags_.carry = next_carry;
|
||||||
flags_.set_nz(instruction_buffer_.value, m_shift_);
|
flags_.set_nz(data_buffer_.value, m_shift_);
|
||||||
} break;
|
} break;
|
||||||
|
|
||||||
//
|
//
|
||||||
|
@@ -405,6 +405,12 @@ struct CPU::WDC65816::ProcessorStorageConstructor {
|
|||||||
|
|
||||||
target(CycleFetchPCThrowaway); // IO.
|
target(CycleFetchPCThrowaway); // IO.
|
||||||
|
|
||||||
|
target(CycleFetchIncrementData); // AAL
|
||||||
|
target(CycleFetchData); // AAH
|
||||||
|
|
||||||
|
target(OperationCopyDataToInstruction);
|
||||||
|
target(OperationConstructAbsolute);
|
||||||
|
|
||||||
read_write(type, is8bit, target);
|
read_write(type, is8bit, target);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user