diff --git a/MC6809/test/Board.cpp b/MC6809/test/Board.cpp index 230a7de..5bd5940 100644 --- a/MC6809/test/Board.cpp +++ b/MC6809/test/Board.cpp @@ -21,12 +21,13 @@ void Board::initialise() { CPU().ExecutedInstruction.connect(std::bind(&Board::Cpu_ExecutedInstruction_Debug, this, std::placeholders::_1)); } - CPU().ExecutedInstruction.connect(std::bind(&Board::Cpu_ExecutedInstruction_die, this, std::placeholders::_1)); - WritingByte.connect(std::bind(&Board::Bus_WritingByte_Acia, this, std::placeholders::_1)); ReadingByte.connect(std::bind(&Board::Bus_ReadingByte_Acia, this, std::placeholders::_1)); CPU().ExecutedInstruction.connect(std::bind(&Board::Cpu_ExecutedInstruction_Acia, this, std::placeholders::_1)); + ACIA().Accessing.connect(std::bind(&Board::Acia_Accessing, this, std::placeholders::_1)); + ACIA().Accessed.connect(std::bind(&Board::Acia_Accessed, this, std::placeholders::_1)); + CPU().powerOn(); CPU().raise(CPU().NMI()); CPU().raise(CPU().FIRQ()); @@ -88,4 +89,14 @@ void Board::updateAciaPins(const EightBit::Chip::PinLevel rw) { void Board::Cpu_ExecutedInstruction_Acia(EightBit::mc6809&) { ACIA().step(CPU().cycles()); -} \ No newline at end of file +} + +void Board::Acia_Accessing(EightBit::EventArgs&) { + if (_kbhit()) { + ACIA().DATA() = _getch(); + ACIA().fillRDR(); + } +} + +void Board::Acia_Accessed(EightBit::EventArgs&) { +} diff --git a/MC6809/test/Board.h b/MC6809/test/Board.h index f93e10a..703fc19 100644 --- a/MC6809/test/Board.h +++ b/MC6809/test/Board.h @@ -46,7 +46,8 @@ private: EightBit::register16_t m_disassembleAt = 0x0000; bool m_ignoreDisassembly = false; - void pollKeyboard(); + uint64_t m_pollCounter = 0UL; + uint64_t m_pollInterval = 2000000 / 50; void Cpu_ExecutingInstruction_Debug(EightBit::mc6809&); void Cpu_ExecutedInstruction_Debug(EightBit::mc6809&); @@ -60,5 +61,8 @@ private: void Cpu_ExecutedInstruction_Acia(EightBit::mc6809&); + void Acia_Accessing(EightBit::EventArgs&); + void Acia_Accessed(EightBit::EventArgs&); + void updateAciaPins(EightBit::Chip::PinLevel rw); }; diff --git a/MC6850/inc/MC6850.h b/MC6850/inc/MC6850.h index 73c0442..88637df 100644 --- a/MC6850/inc/MC6850.h +++ b/MC6850/inc/MC6850.h @@ -3,6 +3,7 @@ #include #include +#include namespace EightBit { class mc6850 : public Chip { @@ -94,8 +95,17 @@ namespace EightBit { void step(int cycles); - // External access to RDR - void fillRDR(uint8_t data); + void fillRDR(); + void drainTDR(); + + Signal Accessing; + Signal Accessed; + + Signal Transmitting; + Signal Transmitted; + + Signal Receiving; + Signal Received; private: uint8_t& TDR() { return m_TDR; } // Transmit data register; @@ -109,9 +119,8 @@ namespace EightBit { void step(); - uint8_t drainRDR(); // External (hacked!) access to RDR - void fillTDR(uint8_t data); // External (hacked!) access to TDR - uint8_t drainTDR(); // External (hacked!) access to TDR + void drainRDR(); + void fillTDR(); PinLevel m_RXDATA; PinLevel m_TXDATA; @@ -148,6 +157,6 @@ namespace EightBit { uint8_t m_TDR; uint8_t m_RDR; - bool m_firstMasterReset = false; + bool m_powered = false; }; } diff --git a/MC6850/src/MC6850.cpp b/MC6850/src/MC6850.cpp index ea1a824..e4a7b17 100644 Binary files a/MC6850/src/MC6850.cpp and b/MC6850/src/MC6850.cpp differ