mirror of
https://github.com/tdinucci/6502-emulator.git
synced 2024-09-26 22:00:35 +00:00
42 lines
1.6 KiB
C++
42 lines
1.6 KiB
C++
#include "transfer-opcode-handler-container.h"
|
|
|
|
namespace emu_6502 {
|
|
|
|
TransferOpcodeHandlerContainer::TransferOpcodeHandlerContainer() : OpcodeHandlerContainer() {
|
|
handlers.insert({Op::TAX, [this](Machine& machine) {
|
|
transfer(machine, machine.get_cpu().get_a(), machine.get_cpu().get_x());
|
|
}});
|
|
|
|
handlers.insert({Op::TAY, [this](Machine& machine) {
|
|
transfer(machine, machine.get_cpu().get_a(), machine.get_cpu().get_y());
|
|
}});
|
|
|
|
handlers.insert({Op::TSX, [this](Machine& machine) {
|
|
transfer(machine, machine.get_cpu().get_sp(), machine.get_cpu().get_x());
|
|
}});
|
|
|
|
handlers.insert({Op::TXA, [this](Machine& machine) {
|
|
transfer(machine, machine.get_cpu().get_x(), machine.get_cpu().get_a());
|
|
}});
|
|
|
|
handlers.insert({Op::TXS, [this](Machine& machine) {
|
|
transfer(machine, machine.get_cpu().get_x(), machine.get_cpu().get_sp(), true);
|
|
}});
|
|
|
|
handlers.insert({Op::TYA, [this](Machine& machine) {
|
|
transfer(machine, machine.get_cpu().get_y(), machine.get_cpu().get_a());
|
|
}});
|
|
}
|
|
|
|
void TransferOpcodeHandlerContainer::transfer(Machine& machine, const Register<uint8_t>& source,
|
|
Register<uint8_t>& dest, bool ignoreFlags) {
|
|
auto value = source.get_value();
|
|
dest.set_value(value);
|
|
|
|
if (!ignoreFlags) {
|
|
auto& ps = machine.get_cpu().get_ps();
|
|
ps.set_zero(value == 0);
|
|
ps.set_negative((value & 0x80) == 0x80);
|
|
}
|
|
}
|
|
} |