From 4f567c75f939a1ea4f622adfed7f3813569ea7aa Mon Sep 17 00:00:00 2001 From: Adrian Conlon Date: Tue, 25 Sep 2018 23:55:14 +0100 Subject: [PATCH] Probably doesn't work, but this is another style of MC6850 event handling Signed-off-by: Adrian Conlon --- MC6850/inc/MC6850.h | 36 ++++++++++++++++++++---------------- MC6850/src/MC6850.cpp | Bin 3490 -> 5026 bytes 2 files changed, 20 insertions(+), 16 deletions(-) diff --git a/MC6850/inc/MC6850.h b/MC6850/inc/MC6850.h index 88637df..2055f90 100644 --- a/MC6850/inc/MC6850.h +++ b/MC6850/inc/MC6850.h @@ -60,14 +60,14 @@ namespace EightBit { }; enum StatusRegisters { - RDRF = 0b1, - TDRE = 0b10, - kDCD = 0b100, - kCTS = 0b1000, - FE = 0b10000, - OVRN = 0b100000, - PE = 0b1000000, - kIRQ = 0b10000000, + STATUS_RDRF = 0b1, + STATUS_TDRE = 0b10, + STATUS_DCD = 0b100, + STATUS_CTS = 0b1000, + STATUS_FE = 0b10000, + STATUS_OVRN = 0b100000, + STATUS_PE = 0b1000000, + STATUS_IRQ = 0b10000000, }; PinLevel& RXDATA() { return m_RXDATA; } // Receive data, (I) Active high @@ -93,10 +93,14 @@ namespace EightBit { uint8_t& DATA() { return m_data; } // Data, (I/O) + // Expose these internal registers, so we can update internal state + uint8_t& TDR() { return m_TDR; } // Transmit data register; + uint8_t& RDR() { return m_RDR; } // Receive data register; + void step(int cycles); - void fillRDR(); - void drainTDR(); + void markTransmitComplete(); + void markReceiveStarting(); Signal Accessing; Signal Accessed; @@ -108,9 +112,6 @@ namespace EightBit { Signal Received; private: - uint8_t& TDR() { return m_TDR; } // Transmit data register; - uint8_t& RDR() { return m_RDR; } // Receive data register; - uint8_t& status() { return m_status; } bool selected(); @@ -119,8 +120,11 @@ namespace EightBit { void step(); - void drainRDR(); - void fillTDR(); + void startTransmit(); + void markTransmitStarting(); + + void completeReceive(); + void markReceiveComplete(); PinLevel m_RXDATA; PinLevel m_TXDATA; @@ -147,7 +151,7 @@ namespace EightBit { // Control registers int m_counterDivide; int m_wordConfiguration; - int m_transmitterControl; + int m_transmitControl; int m_receiveControl; // Status registers diff --git a/MC6850/src/MC6850.cpp b/MC6850/src/MC6850.cpp index e4a7b175c420769de0fdb6a59289342596a16b8f..c94d5411909a159764ec294cceb18faacdab868d 100644 GIT binary patch delta 1113 zcmah|O-mb56ulDzb!IY)DlR01&LA2G1;LGi7Kt&UAX=lXxDW{wKcb12%tR3_w!gsA zyRn-t+`197?b09M-w^+V=f0T5iwQE^c^~(@Gw0m<<|cWQzAMHihUhc7G)!x>P8q~k z%(f|u*&6mQ5PD_~xjFLdrP#BvHAZ6qG`3tS&=D1}ZXPaBm3FX>sDx26Ma*O`z}_)t zXDWM)_jhEDFqV-$L6j-v89S3|_wiBS)HnH8++)kI_>VQ)f^29Iq?!Sl=HEs)Ut7~H z$VJN2D!oBoI%JUvf8uZf-m1!h=yoZDLUFc_)u|dA`BR0H%ntBX-S+ZW*XXT|9C)V<*i()dSpIus?m&YcWqbzOpg93xW=GjcI87J@K5Zi3T;ls>Y!jQ^Pw7HhMmXSA&A(J5o2tycL z7=k7X^D6SEFcdK)0!8x}g1};dyfZ~%s=y))8Vs61L#rnr6$oVJ1nQbBq&)c#tJUOn z0y2|-@mpY+Ajs!A`IMl-WFKLb$!7$3CVvwwftv`n7j9xBU-;w+LMmvcK-^|4tjG>k JJ$WI2JOBW^I9vb#