2019-03-27 00:14:44 +00:00
|
|
|
#include "register-opcode-handler.h"
|
|
|
|
|
|
|
|
const uint8_t RegisterOpcodeHandler::TAX;
|
|
|
|
const uint8_t RegisterOpcodeHandler::TXA;
|
|
|
|
const uint8_t RegisterOpcodeHandler::DEX;
|
|
|
|
const uint8_t RegisterOpcodeHandler::INX;
|
|
|
|
const uint8_t RegisterOpcodeHandler::TAY;
|
|
|
|
const uint8_t RegisterOpcodeHandler::TYA;
|
|
|
|
const uint8_t RegisterOpcodeHandler::DEY;
|
|
|
|
const uint8_t RegisterOpcodeHandler::INY;
|
|
|
|
|
|
|
|
void RegisterOpcodeHandler::execute() {
|
|
|
|
auto instructionIndex = reg_man->get_program_counter()->get_value();
|
|
|
|
auto opcode = program->get_byte_at(instructionIndex);
|
|
|
|
auto accumulator = reg_man->get_accumulator();
|
|
|
|
auto x_index = reg_man->get_x_index();
|
|
|
|
auto y_index = reg_man->get_y_index();
|
|
|
|
|
|
|
|
switch (opcode) {
|
|
|
|
case TAX:
|
|
|
|
x_index->set_value(accumulator->get_value());
|
|
|
|
break;
|
2019-03-27 23:29:11 +00:00
|
|
|
|
2019-03-27 00:14:44 +00:00
|
|
|
case TXA:
|
|
|
|
accumulator->set_value(x_index->get_value());
|
|
|
|
break;
|
2019-03-27 23:29:11 +00:00
|
|
|
|
2019-03-27 00:14:44 +00:00
|
|
|
case DEX:
|
|
|
|
x_index->set_value(x_index->get_value() - 1);
|
|
|
|
break;
|
2019-03-27 23:29:11 +00:00
|
|
|
|
2019-03-27 00:14:44 +00:00
|
|
|
case INX:
|
|
|
|
x_index->set_value(x_index->get_value() + 1);
|
|
|
|
break;
|
2019-03-27 23:29:11 +00:00
|
|
|
|
2019-03-27 00:14:44 +00:00
|
|
|
case TAY:
|
|
|
|
y_index->set_value(accumulator->get_value());
|
|
|
|
break;
|
2019-03-27 23:29:11 +00:00
|
|
|
|
2019-03-27 00:14:44 +00:00
|
|
|
case TYA:
|
|
|
|
accumulator->set_value(y_index->get_value());
|
|
|
|
break;
|
2019-03-27 23:29:11 +00:00
|
|
|
|
2019-03-27 00:14:44 +00:00
|
|
|
case DEY:
|
|
|
|
y_index->set_value(y_index->get_value() - 1);
|
|
|
|
break;
|
2019-03-27 23:29:11 +00:00
|
|
|
|
2019-03-27 00:14:44 +00:00
|
|
|
case INY:
|
|
|
|
y_index->set_value(y_index->get_value() + 1);
|
|
|
|
break;
|
2019-03-27 23:29:11 +00:00
|
|
|
|
2019-03-27 00:14:44 +00:00
|
|
|
default:
|
2019-03-27 23:29:11 +00:00
|
|
|
throw_unexpected_opcode(opcode);
|
2019-03-27 00:14:44 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
move_program_counter(1);
|
|
|
|
}
|