diff --git a/Intel8080/test/Board.h b/Intel8080/test/Board.h index 26f0cac..15e8d55 100644 --- a/Intel8080/test/Board.h +++ b/Intel8080/test/Board.h @@ -20,13 +20,11 @@ public: void initialise(); protected: - virtual uint8_t& reference(uint16_t address, bool& rom) { - rom = false; + virtual uint8_t& reference(uint16_t address) { return m_ram.reference(address); } - virtual uint8_t reference(uint16_t address, bool& rom) const { - rom = false; + virtual uint8_t reference(uint16_t address) const { return m_ram.reference(address); } diff --git a/LR35902/fusetest_LR35902/FuseTestRunner.h b/LR35902/fusetest_LR35902/FuseTestRunner.h index 559e3b8..6047186 100644 --- a/LR35902/fusetest_LR35902/FuseTestRunner.h +++ b/LR35902/fusetest_LR35902/FuseTestRunner.h @@ -37,13 +37,11 @@ namespace Fuse { EightBit::register16_t actual, EightBit::register16_t expected) const; protected: - virtual uint8_t& reference(uint16_t address, bool& rom) { - rom = false; + virtual uint8_t& reference(uint16_t address) { return m_ram.reference(address); } - virtual uint8_t reference(uint16_t address, bool& rom) const { - rom = false; + virtual uint8_t reference(uint16_t address) const { return m_ram.reference(address); } diff --git a/LR35902/inc/GameBoyBus.h b/LR35902/inc/GameBoyBus.h index 37eb3ef..958c6fa 100644 --- a/LR35902/inc/GameBoyBus.h +++ b/LR35902/inc/GameBoyBus.h @@ -91,7 +91,7 @@ namespace EightBit { void validateCartridgeType(); - void Bus_WrittenByte(uint16_t address); + void Bus_WrittenByte(EightBit::EventArgs); int runRasterLines(int lines); int runVerticalBlankLines(int lines); diff --git a/LR35902/inc/IoRegisters.h b/LR35902/inc/IoRegisters.h index 8cb4cd9..90d0a11 100644 --- a/LR35902/inc/IoRegisters.h +++ b/LR35902/inc/IoRegisters.h @@ -195,8 +195,8 @@ namespace EightBit { triggerInterrupt(Interrupts::KeypadPressed); } - void Bus_WrittenByte(uint16_t address); - void Bus_ReadingByte(uint16_t address); + void Bus_WrittenByte(EightBit::EventArgs); + void Bus_ReadingByte(EightBit::EventArgs); }; } } \ No newline at end of file diff --git a/LR35902/src/GameBoyBus.cpp b/LR35902/src/GameBoyBus.cpp index 40db049..0ba3a05 100644 --- a/LR35902/src/GameBoyBus.cpp +++ b/LR35902/src/GameBoyBus.cpp @@ -28,8 +28,9 @@ void EightBit::GameBoy::Bus::loadGameRom(const std::string& path) { validateCartridgeType(); } -void EightBit::GameBoy::Bus::Bus_WrittenByte(const uint16_t address) { +void EightBit::GameBoy::Bus::Bus_WrittenByte(EightBit::EventArgs) { + const auto address = ADDRESS().word; const auto value = DATA(); switch (address & 0xe000) { diff --git a/LR35902/src/IoRegisters.cpp b/LR35902/src/IoRegisters.cpp index 3a61f41..787ecd1 100644 --- a/LR35902/src/IoRegisters.cpp +++ b/LR35902/src/IoRegisters.cpp @@ -23,7 +23,8 @@ void EightBit::GameBoy::IoRegisters::transferDma() { } } -void EightBit::GameBoy::IoRegisters::Bus_ReadingByte(const uint16_t address) { +void EightBit::GameBoy::IoRegisters::Bus_ReadingByte(EightBit::EventArgs) { + const auto address = m_bus.ADDRESS().word; const auto io = (address >= BASE) && (address < 0xff80); if (io) { auto port = address - BASE; @@ -92,8 +93,9 @@ void EightBit::GameBoy::IoRegisters::Bus_ReadingByte(const uint16_t address) { } } -void EightBit::GameBoy::IoRegisters::Bus_WrittenByte(const uint16_t address) { +void EightBit::GameBoy::IoRegisters::Bus_WrittenByte(EightBit::EventArgs) { + const auto address = m_bus.ADDRESS().word; const auto value = m_bus.DATA(); const auto port = address - BASE; diff --git a/M6502/test/Board.cpp b/M6502/test/Board.cpp index 7b3f0d5..3bcba47 100644 --- a/M6502/test/Board.cpp +++ b/M6502/test/Board.cpp @@ -100,17 +100,15 @@ void Board::Cpu_ExecutingInstruction_Debug(const EightBit::MOS6502& cpu) { std::cout << "\n"; } -void Board::Memory_ReadingByte_Input(const uint16_t address) { - if (address == m_configuration.getInputAddress()) { - if (DATA() != 0) { - assert(address == ADDRESS().word); +void Board::Memory_ReadingByte_Input(EightBit::EventArgs) { + if (ADDRESS().word == m_configuration.getInputAddress()) { + if (DATA() != 0) write(0); - } } } -void Board::Memory_WrittenByte_Output(const uint16_t address) { - if (address == m_configuration.getOutputAddress()) { +void Board::Memory_WrittenByte_Output(EightBit::EventArgs) { + if (ADDRESS().word == m_configuration.getOutputAddress()) { #ifdef _MSC_VER _putch(DATA()); #endif diff --git a/M6502/test/Board.h b/M6502/test/Board.h index cc38afe..8302d8b 100644 --- a/M6502/test/Board.h +++ b/M6502/test/Board.h @@ -20,13 +20,11 @@ public: void initialise(); protected: - virtual uint8_t& reference(uint16_t address, bool& rom) { - rom = false; + virtual uint8_t& reference(uint16_t address) { return m_ram.reference(address); } - virtual uint8_t reference(uint16_t address, bool& rom) const { - rom = false; + virtual uint8_t reference(uint16_t address) const { return m_ram.reference(address); } @@ -50,8 +48,8 @@ private: void Cpu_ExecutedInstruction_StopLoop(const EightBit::MOS6502& cpu); - void Memory_ReadingByte_Input(uint16_t address); - void Memory_WrittenByte_Output(uint16_t address); + void Memory_ReadingByte_Input(EightBit::EventArgs); + void Memory_WrittenByte_Output(EightBit::EventArgs); void Cpu_ExecutedInstruction_Poll(const EightBit::MOS6502& cpu); }; diff --git a/Z80/fusetest_Z80/FuseTestRunner.h b/Z80/fusetest_Z80/FuseTestRunner.h index a9fd22d..1e7060e 100644 --- a/Z80/fusetest_Z80/FuseTestRunner.h +++ b/Z80/fusetest_Z80/FuseTestRunner.h @@ -36,13 +36,11 @@ namespace Fuse { EightBit::register16_t actual, EightBit::register16_t expected) const; protected: - virtual uint8_t& reference(uint16_t address, bool& rom) { - rom = false; + virtual uint8_t& reference(uint16_t address) { return m_ram.reference(address); } - virtual uint8_t reference(uint16_t address, bool& rom) const { - rom = false; + virtual uint8_t reference(uint16_t address) const { return m_ram.reference(address); } diff --git a/Z80/test/Board.h b/Z80/test/Board.h index b2c56c7..712deef 100644 --- a/Z80/test/Board.h +++ b/Z80/test/Board.h @@ -22,13 +22,11 @@ public: void initialise(); protected: - virtual uint8_t& reference(uint16_t address, bool& rom) { - rom = false; + virtual uint8_t& reference(uint16_t address) { return m_ram.reference(address); } - virtual uint8_t reference(uint16_t address, bool& rom) const { - rom = false; + virtual uint8_t reference(uint16_t address) const { return m_ram.reference(address); } diff --git a/inc/Bus.h b/inc/Bus.h index 8b0cef2..efdecad 100644 --- a/inc/Bus.h +++ b/inc/Bus.h @@ -4,24 +4,27 @@ #include "Signal.h" #include "Register.h" +#include "EventArgs.h" namespace EightBit { class Bus { public: virtual ~Bus() = default; - Signal WritingByte; - Signal WrittenByte; + Signal WritingByte; + Signal WrittenByte; - Signal ReadingByte; - Signal ReadByte; + Signal ReadingByte; + Signal ReadByte; register16_t& ADDRESS() { return m_address; } register16_t ADDRESS() const { return m_address; } uint8_t& DATA() { return m_data; } uint8_t DATA() const { return m_data; } + uint8_t peek() const; uint8_t peek(uint16_t address) const; + void poke(uint8_t value); void poke(uint16_t address, uint8_t value); uint16_t peekWord(uint16_t address) const; @@ -36,8 +39,8 @@ namespace EightBit { void write(register16_t address, uint8_t value); protected: - virtual uint8_t& reference(uint16_t address, bool& rom) = 0; - virtual uint8_t reference(uint16_t address, bool& rom) const = 0; + virtual uint8_t& reference(uint16_t address) = 0; + virtual uint8_t reference(uint16_t address) const = 0; uint8_t& reference(); uint8_t reference() const; diff --git a/src/Bus.cpp b/src/Bus.cpp index 2b24347..0ebc0fd 100644 --- a/src/Bus.cpp +++ b/src/Bus.cpp @@ -1,16 +1,20 @@ #include "stdafx.h" #include "Bus.h" -#include "EightBitCompilerDefinitions.h" +uint8_t EightBit::Bus::peek() const { + return reference(); +} uint8_t EightBit::Bus::peek(const uint16_t address) const { - bool rom; - return reference(address, rom); + return reference(address); +} + +void EightBit::Bus::poke(const uint8_t value) { + reference() = value; } void EightBit::Bus::poke(const uint16_t address, const uint8_t value) { - bool rom; - reference(address, rom) = value; + reference(address) = value; } uint16_t EightBit::Bus::peekWord(const uint16_t address) const { @@ -21,9 +25,9 @@ uint16_t EightBit::Bus::peekWord(const uint16_t address) const { } uint8_t EightBit::Bus::read() { - ReadingByte.fire(ADDRESS().word); + ReadingByte.fire(EventArgs::empty()); DATA() = reference(); - ReadByte.fire(ADDRESS().word); + ReadByte.fire(EventArgs::empty()); return DATA(); } @@ -38,9 +42,9 @@ uint8_t EightBit::Bus::read(const register16_t address) { } void EightBit::Bus::write() { - WritingByte.fire(ADDRESS().word); + WritingByte.fire(EventArgs::empty()); reference() = DATA(); - WrittenByte.fire(ADDRESS().word); + WrittenByte.fire(EventArgs::empty()); } void EightBit::Bus::write(const uint8_t value) { @@ -59,11 +63,9 @@ void EightBit::Bus::write(const register16_t address, const uint8_t value) { } uint8_t EightBit::Bus::reference() const { - bool rom; - return reference(ADDRESS().word, rom); + return reference(ADDRESS().word); } uint8_t& EightBit::Bus::reference() { - bool rom; - return reference(ADDRESS().word, rom); + return reference(ADDRESS().word); }