mirror of
https://github.com/TomHarte/CLK.git
synced 2025-08-15 14:27:29 +00:00
Performed some quick tidying.
This commit is contained in:
@@ -1063,119 +1063,94 @@ template <class T> class Processor: public MicroOpScheduler<MicroOp> {
|
|||||||
|
|
||||||
#pragma mark - Rotation and shifting
|
#pragma mark - Rotation and shifting
|
||||||
|
|
||||||
|
#define set_rotate_flags() \
|
||||||
|
bit3_result_ = bit5_result_ = a_; \
|
||||||
|
carry_flag_ = new_carry; \
|
||||||
|
subtract_flag_ = half_carry_flag_ = 0;
|
||||||
|
|
||||||
case MicroOp::RLA: {
|
case MicroOp::RLA: {
|
||||||
uint8_t new_carry = a_ >> 7;
|
uint8_t new_carry = a_ >> 7;
|
||||||
a_ = (uint8_t)((a_ << 1) | carry_flag_);
|
a_ = (uint8_t)((a_ << 1) | carry_flag_);
|
||||||
bit3_result_ = bit5_result_ = a_;
|
set_rotate_flags();
|
||||||
carry_flag_ = new_carry;
|
} break;
|
||||||
subtract_flag_ = half_carry_flag_ = 0;
|
|
||||||
|
case MicroOp::RRA: {
|
||||||
|
uint8_t new_carry = a_ & 1;
|
||||||
|
a_ = (uint8_t)((a_ >> 1) | (carry_flag_ << 7));
|
||||||
|
set_rotate_flags();
|
||||||
} break;
|
} break;
|
||||||
|
|
||||||
case MicroOp::RLCA: {
|
case MicroOp::RLCA: {
|
||||||
uint8_t new_carry = a_ >> 7;
|
uint8_t new_carry = a_ >> 7;
|
||||||
a_ = (uint8_t)((a_ << 1) | new_carry);
|
a_ = (uint8_t)((a_ << 1) | new_carry);
|
||||||
bit3_result_ = bit5_result_ = a_;
|
set_rotate_flags();
|
||||||
carry_flag_ = new_carry;
|
|
||||||
subtract_flag_ = half_carry_flag_ = 0;
|
|
||||||
} break;
|
|
||||||
|
|
||||||
case MicroOp::RRA: {
|
|
||||||
uint8_t newCarry = a_ & 1;
|
|
||||||
a_ = (uint8_t)((a_ >> 1) | (carry_flag_ << 7));
|
|
||||||
bit3_result_ = bit5_result_ = a_;
|
|
||||||
carry_flag_ = newCarry;
|
|
||||||
subtract_flag_ = half_carry_flag_ = 0;
|
|
||||||
} break;
|
} break;
|
||||||
|
|
||||||
case MicroOp::RRCA: {
|
case MicroOp::RRCA: {
|
||||||
uint8_t newCarry = a_ & 1;
|
uint8_t new_carry = a_ & 1;
|
||||||
a_ = (uint8_t)((a_ >> 1) | (newCarry << 7));
|
a_ = (uint8_t)((a_ >> 1) | (new_carry << 7));
|
||||||
bit5_result_ = bit3_result_ = a_;
|
set_rotate_flags();
|
||||||
carry_flag_ = newCarry;
|
|
||||||
subtract_flag_ = half_carry_flag_ = 0;
|
|
||||||
} break;
|
} break;
|
||||||
|
|
||||||
case MicroOp::RLC: {
|
#undef set_rotate_flags
|
||||||
|
|
||||||
|
#define set_shift_flags() \
|
||||||
|
sign_result_ = zero_result_ = bit5_result_ = bit3_result_ = *(uint8_t *)operation->source; \
|
||||||
|
set_parity(sign_result_); \
|
||||||
|
half_carry_flag_ = 0; \
|
||||||
|
subtract_flag_ = 0;
|
||||||
|
|
||||||
|
case MicroOp::RLC:
|
||||||
carry_flag_ = *(uint8_t *)operation->source >> 7;
|
carry_flag_ = *(uint8_t *)operation->source >> 7;
|
||||||
*(uint8_t *)operation->source = (uint8_t)((*(uint8_t *)operation->source << 1) | carry_flag_);
|
*(uint8_t *)operation->source = (uint8_t)((*(uint8_t *)operation->source << 1) | carry_flag_);
|
||||||
|
set_shift_flags();
|
||||||
|
break;
|
||||||
|
|
||||||
sign_result_ = zero_result_ = bit5_result_ = bit3_result_ = *(uint8_t *)operation->source;
|
case MicroOp::RRC:
|
||||||
set_parity(sign_result_);
|
|
||||||
half_carry_flag_ = 0;
|
|
||||||
subtract_flag_ = 0;
|
|
||||||
} break;
|
|
||||||
|
|
||||||
case MicroOp::RRC: {
|
|
||||||
carry_flag_ = *(uint8_t *)operation->source & 1;
|
carry_flag_ = *(uint8_t *)operation->source & 1;
|
||||||
*(uint8_t *)operation->source = (uint8_t)((*(uint8_t *)operation->source >> 1) | (carry_flag_ << 7));
|
*(uint8_t *)operation->source = (uint8_t)((*(uint8_t *)operation->source >> 1) | (carry_flag_ << 7));
|
||||||
|
set_shift_flags();
|
||||||
sign_result_ = zero_result_ = bit5_result_ = bit3_result_ = *(uint8_t *)operation->source;
|
break;
|
||||||
set_parity(sign_result_);
|
|
||||||
half_carry_flag_ = 0;
|
|
||||||
subtract_flag_ = 0;
|
|
||||||
} break;
|
|
||||||
|
|
||||||
case MicroOp::RL: {
|
case MicroOp::RL: {
|
||||||
uint8_t next_carry = *(uint8_t *)operation->source >> 7;
|
uint8_t next_carry = *(uint8_t *)operation->source >> 7;
|
||||||
*(uint8_t *)operation->source = (uint8_t)((*(uint8_t *)operation->source << 1) | carry_flag_);
|
*(uint8_t *)operation->source = (uint8_t)((*(uint8_t *)operation->source << 1) | carry_flag_);
|
||||||
carry_flag_ = next_carry;
|
carry_flag_ = next_carry;
|
||||||
|
set_shift_flags();
|
||||||
sign_result_ = zero_result_ = bit5_result_ = bit3_result_ = *(uint8_t *)operation->source;
|
|
||||||
set_parity(sign_result_);
|
|
||||||
half_carry_flag_ = 0;
|
|
||||||
subtract_flag_ = 0;
|
|
||||||
} break;
|
} break;
|
||||||
|
|
||||||
case MicroOp::RR: {
|
case MicroOp::RR: {
|
||||||
uint8_t next_carry = *(uint8_t *)operation->source & 1;
|
uint8_t next_carry = *(uint8_t *)operation->source & 1;
|
||||||
*(uint8_t *)operation->source = (uint8_t)((*(uint8_t *)operation->source >> 1) | (carry_flag_ << 7));
|
*(uint8_t *)operation->source = (uint8_t)((*(uint8_t *)operation->source >> 1) | (carry_flag_ << 7));
|
||||||
carry_flag_ = next_carry;
|
carry_flag_ = next_carry;
|
||||||
|
set_shift_flags();
|
||||||
sign_result_ = zero_result_ = bit5_result_ = bit3_result_ = *(uint8_t *)operation->source;
|
|
||||||
set_parity(sign_result_);
|
|
||||||
half_carry_flag_ = 0;
|
|
||||||
subtract_flag_ = 0;
|
|
||||||
} break;
|
} break;
|
||||||
|
|
||||||
case MicroOp::SLA: {
|
case MicroOp::SLA:
|
||||||
carry_flag_ = *(uint8_t *)operation->source >> 7;
|
carry_flag_ = *(uint8_t *)operation->source >> 7;
|
||||||
*(uint8_t *)operation->source = (uint8_t)(*(uint8_t *)operation->source << 1);
|
*(uint8_t *)operation->source = (uint8_t)(*(uint8_t *)operation->source << 1);
|
||||||
|
set_shift_flags();
|
||||||
|
break;
|
||||||
|
|
||||||
sign_result_ = zero_result_ = bit5_result_ = bit3_result_ = *(uint8_t *)operation->source;
|
case MicroOp::SRA:
|
||||||
set_parity(sign_result_);
|
|
||||||
half_carry_flag_ = 0;
|
|
||||||
subtract_flag_ = 0;
|
|
||||||
} break;
|
|
||||||
|
|
||||||
case MicroOp::SRA: {
|
|
||||||
carry_flag_ = *(uint8_t *)operation->source & 1;
|
carry_flag_ = *(uint8_t *)operation->source & 1;
|
||||||
*(uint8_t *)operation->source = (uint8_t)((*(uint8_t *)operation->source >> 1) | (*(uint8_t *)operation->source & 0x80));
|
*(uint8_t *)operation->source = (uint8_t)((*(uint8_t *)operation->source >> 1) | (*(uint8_t *)operation->source & 0x80));
|
||||||
|
set_shift_flags();
|
||||||
|
break;
|
||||||
|
|
||||||
sign_result_ = zero_result_ = bit5_result_ = bit3_result_ = *(uint8_t *)operation->source;
|
case MicroOp::SLL:
|
||||||
set_parity(sign_result_);
|
|
||||||
half_carry_flag_ = 0;
|
|
||||||
subtract_flag_ = 0;
|
|
||||||
} break;
|
|
||||||
|
|
||||||
case MicroOp::SLL: {
|
|
||||||
carry_flag_ = *(uint8_t *)operation->source >> 7;
|
carry_flag_ = *(uint8_t *)operation->source >> 7;
|
||||||
*(uint8_t *)operation->source = (uint8_t)(*(uint8_t *)operation->source << 1) | 1;
|
*(uint8_t *)operation->source = (uint8_t)(*(uint8_t *)operation->source << 1) | 1;
|
||||||
|
set_shift_flags();
|
||||||
|
break;
|
||||||
|
|
||||||
sign_result_ = zero_result_ = bit5_result_ = bit3_result_ = *(uint8_t *)operation->source;
|
case MicroOp::SRL:
|
||||||
set_parity(sign_result_);
|
|
||||||
half_carry_flag_ = 0;
|
|
||||||
subtract_flag_ = 0;
|
|
||||||
} break;
|
|
||||||
|
|
||||||
case MicroOp::SRL: {
|
|
||||||
carry_flag_ = *(uint8_t *)operation->source & 1;
|
carry_flag_ = *(uint8_t *)operation->source & 1;
|
||||||
*(uint8_t *)operation->source = (uint8_t)((*(uint8_t *)operation->source >> 1));
|
*(uint8_t *)operation->source = (uint8_t)((*(uint8_t *)operation->source >> 1));
|
||||||
|
set_shift_flags();
|
||||||
|
break;
|
||||||
|
|
||||||
sign_result_ = zero_result_ = bit5_result_ = bit3_result_ = *(uint8_t *)operation->source;
|
#undef set_shift_flags
|
||||||
set_parity(sign_result_);
|
|
||||||
half_carry_flag_ = 0;
|
|
||||||
subtract_flag_ = 0;
|
|
||||||
} break;
|
|
||||||
|
|
||||||
#pragma mark - Interrupt state
|
#pragma mark - Interrupt state
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user