mirror of
https://github.com/MoleskiCoder/EightBit.git
synced 2025-04-09 17:37:45 +00:00
Add a slightly simplified variant on signal firing.
Signed-off-by: Adrian Conlon <adrian.conlon@gmail.com>
This commit is contained in:
parent
6261807344
commit
26cc613c66
@ -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);
|
||||
}
|
||||
};
|
||||
|
@ -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:
|
||||
|
@ -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(); \
|
||||
} \
|
||||
}
|
||||
|
||||
|
@ -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);
|
||||
}
|
||||
|
@ -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) {
|
||||
|
Loading…
x
Reference in New Issue
Block a user