From 8b12ed23e8088faf86f73a238f7d049fa07e3d43 Mon Sep 17 00:00:00 2001 From: Adrian Conlon Date: Sat, 10 Nov 2018 20:29:27 +0000 Subject: [PATCH] Add (currently disabled) disassembler to the 6809 unit test runner. Signed-off-by: Adrian Conlon --- MC6809/unittest/Board.cpp | 16 +++++++++++++++- MC6809/unittest/Board.h | 9 +++++++++ 2 files changed, 24 insertions(+), 1 deletion(-) diff --git a/MC6809/unittest/Board.cpp b/MC6809/unittest/Board.cpp index efb4514..dbab8f1 100644 --- a/MC6809/unittest/Board.cpp +++ b/MC6809/unittest/Board.cpp @@ -2,7 +2,8 @@ #include "Board.h" Board::Board() -: m_cpu(EightBit::mc6809(*this)) { +: m_cpu(EightBit::mc6809(*this)), + m_disassembler(*this, m_cpu) { } void Board::initialise() { @@ -10,8 +11,21 @@ void Board::initialise() { CPU().raise(CPU().NMI()); CPU().raise(CPU().FIRQ()); CPU().reset(); + + //CPU().ExecutingInstruction.connect(std::bind(&Board::Cpu_ExecutingInstruction_Debug, this, std::placeholders::_1)); + //CPU().ExecutedInstruction.connect(std::bind(&Board::Cpu_ExecutedInstruction_Debug, this, std::placeholders::_1)); } EightBit::MemoryMapping Board::mapping(uint16_t) { return { m_ram, 0x0000, 0xffff, EightBit::MemoryMapping::ReadWrite }; } + +void Board::Cpu_ExecutingInstruction_Debug(EightBit::mc6809&) { + m_disassembleAt = CPU().PC(); + m_ignoreDisassembly = m_disassembler.ignore(); +} + +void Board::Cpu_ExecutedInstruction_Debug(EightBit::mc6809&) { + if (!m_ignoreDisassembly) + std::cout << m_disassembler.trace(m_disassembleAt) << " " << std::endl; +} diff --git a/MC6809/unittest/Board.h b/MC6809/unittest/Board.h index 3253bd1..f71d359 100644 --- a/MC6809/unittest/Board.h +++ b/MC6809/unittest/Board.h @@ -3,6 +3,7 @@ #include #include #include +#include class Board : public EightBit::Bus { public: @@ -18,4 +19,12 @@ protected: private: EightBit::Ram m_ram = 0x10000; // 0000 - FFFF, 64K RAM EightBit::mc6809 m_cpu; + EightBit::Disassembly m_disassembler; + + // The m_disassembleAt and m_ignoreDisassembly are used to skip pin events + EightBit::register16_t m_disassembleAt = 0x0000; + bool m_ignoreDisassembly = false; + + void Cpu_ExecutingInstruction_Debug(EightBit::mc6809&); + void Cpu_ExecutedInstruction_Debug(EightBit::mc6809&); };