diff --git a/Intel8080/test/Board.h b/Intel8080/test/Board.h index d101cf0..c6f2152 100644 --- a/Intel8080/test/Board.h +++ b/Intel8080/test/Board.h @@ -21,7 +21,7 @@ public: protected: virtual EightBit::MemoryMapping mapping(uint16_t address) final { - return { m_ram, 0x0000, EightBit::MemoryMapping::ReadWrite }; + return { m_ram, 0x0000, 0xffff, EightBit::MemoryMapping::ReadWrite }; } private: diff --git a/LR35902/fusetest_LR35902/FuseTestRunner.h b/LR35902/fusetest_LR35902/FuseTestRunner.h index 428dc51..e4b1634 100644 --- a/LR35902/fusetest_LR35902/FuseTestRunner.h +++ b/LR35902/fusetest_LR35902/FuseTestRunner.h @@ -38,7 +38,7 @@ namespace Fuse { protected: virtual EightBit::MemoryMapping mapping(uint16_t address) final { - return { m_ram, 0x0000, EightBit::MemoryMapping::ReadWrite }; + return { m_ram, 0x0000, 0xffff, EightBit::MemoryMapping::ReadWrite }; } public: diff --git a/LR35902/src/GameBoyBus.cpp b/LR35902/src/GameBoyBus.cpp index 1a38a12..d2e424e 100644 --- a/LR35902/src/GameBoyBus.cpp +++ b/LR35902/src/GameBoyBus.cpp @@ -164,31 +164,31 @@ void EightBit::GameBoy::Bus::validateCartridgeType() { EightBit::MemoryMapping EightBit::GameBoy::Bus::mapping(uint16_t address) { if ((address < 0x100) && IO().bootRomEnabled()) - return { m_bootRom, 0x0000, MemoryMapping::ReadOnly }; + return { m_bootRom, 0x0000, 0xffff, MemoryMapping::ReadOnly }; if ((address < 0x4000) && gameRomEnabled()) - return { m_gameRomBanks[0], 0x0000, MemoryMapping::ReadOnly }; + return { m_gameRomBanks[0], 0x0000, 0xffff, MemoryMapping::ReadOnly }; if ((address < 0x8000) && gameRomEnabled()) - return { m_gameRomBanks[m_romBank], 0x4000, MemoryMapping::ReadOnly }; + return { m_gameRomBanks[m_romBank], 0x4000, 0xffff, MemoryMapping::ReadOnly }; if (address < 0xa000) - return { VRAM(), 0x8000, MemoryMapping::ReadWrite }; + return { VRAM(), 0x8000, 0xffff, MemoryMapping::ReadWrite }; if (address < 0xc000) { if (m_ramBanks.size() == 0) - return { m_unmapped2000, 0xa000, MemoryMapping::ReadOnly }; + return { m_unmapped2000, 0xa000, 0xffff, MemoryMapping::ReadOnly }; else - return { m_ramBanks[m_ramBank], 0xa000, MemoryMapping::ReadWrite }; + return { m_ramBanks[m_ramBank], 0xa000, 0xffff, MemoryMapping::ReadWrite }; } if (address < 0xe000) - return { m_lowInternalRam, 0xc000, MemoryMapping::ReadWrite }; + return { m_lowInternalRam, 0xc000, 0xffff, MemoryMapping::ReadWrite }; if (address < 0xfe00) - return { m_lowInternalRam, 0xe000, MemoryMapping::ReadWrite }; // Low internal RAM mirror + return { m_lowInternalRam, 0xe000, 0xffff, MemoryMapping::ReadWrite }; // Low internal RAM mirror if (address < 0xfea0) - return { OAMRAM(), 0xfe00, MemoryMapping::ReadWrite }; + return { OAMRAM(), 0xfe00, 0xffff, MemoryMapping::ReadWrite }; if (address < IoRegisters::BASE) - return { m_unmapped60, 0xfea0, MemoryMapping::ReadOnly }; + return { m_unmapped60, 0xfea0, 0xffff, MemoryMapping::ReadOnly }; if (address < 0xff80) - return { IO(), IoRegisters::BASE, MemoryMapping::ReadWrite }; - return { m_highInternalRam, 0xff80, MemoryMapping::ReadWrite }; + return { IO(), IoRegisters::BASE, 0xffff, MemoryMapping::ReadWrite }; + return { m_highInternalRam, 0xff80, 0xffff, MemoryMapping::ReadWrite }; } int EightBit::GameBoy::Bus::runRasterLines() { diff --git a/M6502/test/Board.h b/M6502/test/Board.h index d14cf86..fd1f7ba 100644 --- a/M6502/test/Board.h +++ b/M6502/test/Board.h @@ -21,7 +21,7 @@ public: protected: virtual EightBit::MemoryMapping mapping(uint16_t address) final { - return { m_ram, 0x0000, EightBit::MemoryMapping::ReadWrite }; + return { m_ram, 0x0000, 0xffff, EightBit::MemoryMapping::ReadWrite }; } private: diff --git a/MC6809/test/Board.cpp b/MC6809/test/Board.cpp index 46b094b..56856fa 100644 --- a/MC6809/test/Board.cpp +++ b/MC6809/test/Board.cpp @@ -60,15 +60,15 @@ void Board::Cpu_ExecutedInstruction_Debug(EightBit::mc6809&) { EightBit::MemoryMapping Board::mapping(uint16_t address) { if (address < 0x8000) - return { m_ram, 0x0000, EightBit::MemoryMapping::ReadWrite }; + return { m_ram, 0x0000, 0xffff, EightBit::MemoryMapping::ReadWrite }; if (address < 0xa000) - return { m_unused2000, 0x8000, EightBit::MemoryMapping::ReadOnly }; + return { m_unused2000, 0x8000, 0xffff, EightBit::MemoryMapping::ReadOnly }; if (address < 0xc000) - return { m_io, 0xa000, EightBit::MemoryMapping::ReadWrite }; + return { m_io, 0xa000, 0xffff, EightBit::MemoryMapping::ReadWrite }; - return { m_rom, 0xc000, EightBit::MemoryMapping::ReadOnly }; + return { m_rom, 0xc000, 0xffff, EightBit::MemoryMapping::ReadOnly }; } void Board::Bus_WrittenByte_Acia(EightBit::EventArgs&) { diff --git a/MC6809/unittest/Board.cpp b/MC6809/unittest/Board.cpp index bd814cd..efb4514 100644 --- a/MC6809/unittest/Board.cpp +++ b/MC6809/unittest/Board.cpp @@ -13,5 +13,5 @@ void Board::initialise() { } EightBit::MemoryMapping Board::mapping(uint16_t) { - return { m_ram, 0x0000, EightBit::MemoryMapping::ReadWrite }; + return { m_ram, 0x0000, 0xffff, EightBit::MemoryMapping::ReadWrite }; } diff --git a/Z80/fusetest_Z80/FuseTestRunner.h b/Z80/fusetest_Z80/FuseTestRunner.h index cdfdd25..f49a36e 100644 --- a/Z80/fusetest_Z80/FuseTestRunner.h +++ b/Z80/fusetest_Z80/FuseTestRunner.h @@ -37,7 +37,7 @@ namespace Fuse { protected: virtual EightBit::MemoryMapping mapping(uint16_t address) final { - return { m_ram, 0x0000, EightBit::MemoryMapping::ReadWrite }; + return { m_ram, 0x0000, 0xffff, EightBit::MemoryMapping::ReadWrite }; } public: diff --git a/Z80/test/Board.h b/Z80/test/Board.h index 1b1b8d2..21ee4b7 100644 --- a/Z80/test/Board.h +++ b/Z80/test/Board.h @@ -22,7 +22,7 @@ public: protected: virtual EightBit::MemoryMapping mapping(uint16_t address) final { - return { m_ram, 0x0000, EightBit::MemoryMapping::ReadWrite }; + return { m_ram, 0x0000, 0xffff, EightBit::MemoryMapping::ReadWrite }; } private: diff --git a/inc/MemoryMapping.h b/inc/MemoryMapping.h index 1e2ab29..faa060f 100644 --- a/inc/MemoryMapping.h +++ b/inc/MemoryMapping.h @@ -11,6 +11,7 @@ namespace EightBit { Memory& memory; uint16_t begin = 0xffff; + uint16_t mask = 0U; AccessLevel access = Unknown; }; } diff --git a/src/Bus.cpp b/src/Bus.cpp index 99dfd72..f9c8be5 100644 --- a/src/Bus.cpp +++ b/src/Bus.cpp @@ -90,7 +90,7 @@ std::map> EightBit::Bus::parseHexFile(const std:: uint8_t& EightBit::Bus::reference(const uint16_t address) { const auto mapped = mapping(address); - const uint16_t offset = address - mapped.begin; + const uint16_t offset = (address - mapped.begin) & mapped.mask; if (mapped.access == MemoryMapping::ReadOnly) return DATA() = mapped.memory.peek(offset); Ram& ram = (Ram&)(mapped.memory);