Add COM instruction to the 6809

Signed-off-by: Adrian Conlon <Adrian.conlon@gmail.com>
This commit is contained in:
Adrian Conlon 2018-08-21 09:01:15 +01:00
parent aa1a461db7
commit b4abd7c739
2 changed files with 16 additions and 0 deletions

View File

@ -183,6 +183,7 @@ namespace EightBit {
uint8_t clr(); uint8_t clr();
void cmp(uint8_t operand, uint8_t data); void cmp(uint8_t operand, uint8_t data);
void cmp(register16_t operand, register16_t data); void cmp(register16_t operand, register16_t data);
uint8_t com(uint8_t operand);
uint8_t neg(uint8_t operand); uint8_t neg(uint8_t operand);
register16_t m_d; register16_t m_d;

View File

@ -148,6 +148,13 @@ int EightBit::mc6809::executeUnprefixed(uint8_t opcode) {
case 0x60: addCycles(6); BUS().write(neg(AM_indexed_byte())); break; // NEG (indexed) case 0x60: addCycles(6); BUS().write(neg(AM_indexed_byte())); break; // NEG (indexed)
case 0x70: addCycles(7); BUS().write(neg(AM_extended_byte())); break; // NEG (extended) case 0x70: addCycles(7); BUS().write(neg(AM_extended_byte())); break; // NEG (extended)
// COM
case 0x03: addCycles(6); BUS().write(com(AM_direct_byte())); break; // COM (COM direct)
case 0x43: addCycles(2); A() = com(A()); break; // COM (COMA inherent)
case 0x53: addCycles(2); B() = com(B()); break; // COM (COMB inherent)
case 0x63: addCycles(6); BUS().write(com(AM_indexed_byte())); break; // COM (COM indexed)
case 0x73: addCycles(7); BUS().write(com(AM_extended_byte())); break; // COM (COM extended)
default: default:
UNREACHABLE; UNREACHABLE;
} }
@ -434,3 +441,11 @@ void EightBit::mc6809::cmp(register16_t operand, register16_t data) {
const uint32_t difference = operand.word - data.word; const uint32_t difference = operand.word - data.word;
adjustSubtraction(operand.word, data.word, difference); adjustSubtraction(operand.word, data.word, difference);
} }
uint8_t EightBit::mc6809::com(uint8_t operand) {
const uint8_t result = ~operand;
adjustNZ(result);
clearFlag(CC(), VF);
setFlag(CC(), CF);
return result;
}