Update Cpu class logging

This commit is contained in:
scawful
2023-12-05 03:46:40 -05:00
parent c2dba25b91
commit 5755e2e867
2 changed files with 29 additions and 20 deletions

View File

@@ -410,7 +410,9 @@ void CPU::ExecuteInstruction(uint8_t opcode) {
<< (int)DB << std::endl; << (int)DB << std::endl;
std::cout << "E: " << std::hex << std::setw(2) << std::setfill('0') std::cout << "E: " << std::hex << std::setw(2) << std::setfill('0')
<< (int)E << std::endl; << (int)E << std::endl;
// status registers
std::cout << "C: " << std::hex << std::setw(2) << std::setfill('0')
<< (int)status << std::endl;
break; break;
} }
@@ -559,7 +561,7 @@ void CPU::ExecuteInstruction(uint8_t opcode) {
case 0xE0: // CPX Immediate case 0xE0: // CPX Immediate
{ {
operand = Immediate(); operand = Immediate(/*index_size=*/true);
immediate = true; immediate = true;
CPX(operand, immediate); CPX(operand, immediate);
break; break;
@@ -803,7 +805,7 @@ void CPU::ExecuteInstruction(uint8_t opcode) {
case 0x20: // JSR Absolute case 0x20: // JSR Absolute
{ {
operand = Absolute(); operand = Absolute(AccessType::Control);
JSR(operand); JSR(operand);
break; break;
} }
@@ -1504,10 +1506,13 @@ void CPU::LogInstructions(uint16_t PC, uint8_t opcode, uint16_t operand,
instruction_log_.push_back(entry); instruction_log_.push_back(entry);
} else { } else {
// Log the address and opcode. // Log the address and opcode.
std::cout << "$" << std::uppercase << std::setw(2) << std::setfill('0') std::cout << "\033[1;36m"
<< static_cast<int>(PB) << ":" << std::hex << PC << ": 0x" << "$" << std::uppercase << std::setw(2) << std::setfill('0')
<< std::hex << static_cast<int>(opcode) << " " << static_cast<int>(PB) << ":" << std::hex << PC;
<< opcode_to_mnemonic.at(opcode) << " "; std::cout << " \033[1;32m"
<< ": 0x" << std::hex << static_cast<int>(opcode) << " ";
std::cout << " \033[1;35m" << opcode_to_mnemonic.at(opcode) << " "
<< "\033[0m";
// Log the operand. // Log the operand.
if (operand) { if (operand) {
@@ -1543,11 +1548,15 @@ uint8_t CPU::GetInstructionLength(uint8_t opcode) {
case 0xFC: // JSR Absolute Indexed Indirect case 0xFC: // JSR Absolute Indexed Indirect
case 0xDC: // JMP Absolute Indirect Long case 0xDC: // JMP Absolute Indirect Long
case 0x6B: // RTL case 0x6B: // RTL
case 0x80: // BRA Relative
case 0x82: // BRL Relative Long case 0x82: // BRL Relative Long
PC = next_pc_; PC = next_pc_;
return 0; return 0;
case 0x80: // BRA Relative
PC += next_pc_;
return 2;
case 0x60: // RTS case 0x60: // RTS
PC = last_call_frame_; PC = last_call_frame_;
return 0; return 0;
@@ -1584,11 +1593,9 @@ uint8_t CPU::GetInstructionLength(uint8_t opcode) {
case 0xD0: // BNE Relative case 0xD0: // BNE Relative
if (!GetZeroFlag()) { if (!GetZeroFlag()) {
PC = next_pc_; PC += next_pc_;
return 0;
} else {
return 2;
} }
return 2;
case 0x10: // BPL Relative case 0x10: // BPL Relative
if (!GetNegativeFlag()) { if (!GetNegativeFlag()) {
@@ -1776,16 +1783,18 @@ uint8_t CPU::GetInstructionLength(uint8_t opcode) {
case 0x69: // ADC Immediate case 0x69: // ADC Immediate
case 0x29: // AND Immediate case 0x29: // AND Immediate
case 0xC9: // CMP Immediate case 0xC9: // CMP Immediate
case 0xE0: // CPX Immediate
case 0xC0: // CPY Immediate
case 0x49: // EOR Immediate case 0x49: // EOR Immediate
case 0xA9: // LDA Immediate case 0xA9: // LDA Immediate
case 0xA2: // LDX Immediate
case 0xA0: // LDY Immediate
case 0x09: // ORA Immediate case 0x09: // ORA Immediate
case 0xE9: // SBC Immediate case 0xE9: // SBC Immediate
return GetAccumulatorSize() ? 2 : 3; return GetAccumulatorSize() ? 2 : 3;
case 0xE0: // CPX Immediate
case 0xC0: // CPY Immediate
case 0xA2: // LDX Immediate
case 0xA0: // LDY Immediate
return GetIndexSize() ? 2 : 3;
case 0x0E: // ASL Absolute case 0x0E: // ASL Absolute
case 0x1E: // ASL Absolute Indexed, X case 0x1E: // ASL Absolute Indexed, X
case 0x2D: // AND Absolute case 0x2D: // AND Absolute

View File

@@ -43,7 +43,7 @@ class CPU : public Memory, public Loggable, public core::ExperimentFlags {
explicit CPU(Memory& mem, Clock& vclock) : memory(mem), clock(vclock) {} explicit CPU(Memory& mem, Clock& vclock) : memory(mem), clock(vclock) {}
enum class UpdateMode { Run, Step, Pause }; enum class UpdateMode { Run, Step, Pause };
void Init() { clock.SetFrequency(kCpuClockSpeed); } void Init(bool verbose = false) { clock.SetFrequency(kCpuClockSpeed); }
void Update(UpdateMode mode = UpdateMode::Run, int stepCount = 1); void Update(UpdateMode mode = UpdateMode::Run, int stepCount = 1);
@@ -306,7 +306,7 @@ class CPU : public Memory, public Loggable, public core::ExperimentFlags {
// Data Low: First Operand Byte // Data Low: First Operand Byte
// //
// LDA #const // LDA #const
uint16_t Immediate(); uint16_t Immediate(bool index_size = false);
uint16_t StackRelative(); uint16_t StackRelative();
@@ -460,10 +460,10 @@ class CPU : public Memory, public Loggable, public core::ExperimentFlags {
void COP(); void COP();
// CPX: Compare X register // CPX: Compare X register
void CPX(uint16_t address, bool immediate = false); void CPX(uint32_t address, bool immediate = false);
// CPY: Compare Y register // CPY: Compare Y register
void CPY(uint16_t address, bool immediate = false); void CPY(uint32_t address, bool immediate = false);
// DEC: Decrement memory // DEC: Decrement memory
void DEC(uint32_t address, bool accumulator = false); void DEC(uint32_t address, bool accumulator = false);