Add a slightly simplified variant on signal firing.

Signed-off-by: Adrian Conlon <adrian.conlon@gmail.com>
This commit is contained in:
Adrian Conlon 2021-01-08 09:06:46 +00:00
parent 6261807344
commit 26cc613c66
5 changed files with 19 additions and 18 deletions

View File

@ -68,14 +68,14 @@ void EightBit::Z80::memoryWrite() {
Z80& m_parent;
public:
_Writer(Z80& parent) : m_parent(parent) {
m_parent.WritingMemory.fire(EventArgs::empty());
m_parent.WritingMemory.fire();
m_parent.tick(2);
m_parent.lowerMREQ();
}
~_Writer() {
m_parent.raiseMREQ();
m_parent.WrittenMemory.fire(EventArgs::empty());
m_parent.WrittenMemory.fire();
}
};
@ -89,7 +89,7 @@ uint8_t EightBit::Z80::memoryRead() {
Z80& m_parent;
public:
_Reader(Z80& parent) : m_parent(parent) {
m_parent.ReadingMemory.fire(EventArgs::empty());
m_parent.ReadingMemory.fire();
if (lowered(m_parent.M1()))
m_parent.tick();
m_parent.tick(2);
@ -98,7 +98,7 @@ uint8_t EightBit::Z80::memoryRead() {
~_Reader() {
m_parent.raiseMREQ();
m_parent.ReadMemory.fire(EventArgs::empty());
m_parent.ReadMemory.fire();
}
};
@ -706,11 +706,11 @@ void EightBit::Z80::portWrite() {
Z80& m_parent;
public:
_Writer(Z80& parent) : m_parent(parent) {
m_parent.WritingIO.fire(EventArgs::empty());
m_parent.WritingIO.fire();
}
~_Writer() {
m_parent.WrittenIO.fire(EventArgs::empty());
m_parent.WrittenIO.fire();
m_parent.tick(3);
}
};
@ -732,11 +732,11 @@ uint8_t EightBit::Z80::portRead() {
Z80& m_parent;
public:
_Reader(Z80& parent) : m_parent(parent) {
m_parent.ReadingIO.fire(EventArgs::empty());
m_parent.ReadingIO.fire();
}
~_Reader() {
m_parent.ReadIO.fire(EventArgs::empty());
m_parent.ReadIO.fire();
m_parent.tick(3);
}
};

View File

@ -12,7 +12,7 @@ namespace EightBit {
Signal<EventArgs> Ticked;
void tick(const int extra) { for (int i = 0; i < extra; ++i) tick(); }
void tick() { ++m_cycles; Ticked.fire(EventArgs::empty()); }
void tick() { ++m_cycles; Ticked.fire(); }
[[nodiscard]] auto cycles() const noexcept { return m_cycles; }
protected:

View File

@ -22,18 +22,18 @@
#define DEFINE_PIN_LEVEL_RAISE(name, within) \
void EightBit:: within ::raise ## name() { \
if (lowered( name ())) { \
Raising ## name.fire(EventArgs::empty()); \
Raising ## name.fire(); \
raise( name ()); \
Raised ## name.fire(EventArgs::empty()); \
Raised ## name.fire(); \
} \
}
#define DEFINE_PIN_LEVEL_LOWER(name, within) \
void EightBit:: within ::lower ## name() { \
if (raised( name ())) { \
Lowering ## name.fire(EventArgs::empty()); \
Lowering ## name.fire(); \
lower( name ()); \
Lowered ## name.fire(EventArgs::empty()); \
Lowered ## name.fire(); \
} \
}

View File

@ -2,6 +2,7 @@
#include <vector>
#include <functional>
#include "EventArgs.h"
namespace EightBit {
template<class T> class Signal final {
@ -16,7 +17,7 @@ namespace EightBit {
m_delegates.push_back(functor);
}
void fire(T& e) const {
void fire(T& e = EventArgs::empty()) const {
for (auto& delegate : m_delegates)
delegate(e);
}

View File

@ -9,16 +9,16 @@ void EightBit::Bus::raisePOWER() {}
void EightBit::Bus::lowerPOWER() {}
uint8_t EightBit::Bus::read() {
ReadingByte.fire(EventArgs::empty());
ReadingByte.fire();
const auto returned = DATA() = reference();
ReadByte.fire(EventArgs::empty());
ReadByte.fire();
return returned;
}
void EightBit::Bus::write() {
WritingByte.fire(EventArgs::empty());
WritingByte.fire();
reference() = DATA();
WrittenByte.fire(EventArgs::empty());
WrittenByte.fire();
}
void EightBit::Bus::write(const uint8_t value) {