1 #pragma once 2 3 #include "common/util.h" 4 #include "nes/interfaces/memory.h" 5 6 // Dead simple 16 bit ROM ADT 7 // (max 64K of ROM) 8 // Provides bounds-checked view into existing memory (zero heap allocation) 9 class ROM final : public Memory { 10 private: 11 const u8* rom; 12 uint size; 13 14 const char* label; 15 16 public: 17 ROM() = delete; 18 ROM(uint rom_size, const u8* content, const char* label = "?"); 19 20 // <Memory> 21 u8 read(u16 addr) override; 22 u8 peek(u16 addr) const override; 23 void write(u16 addr, u8 val) override; 24 // </Memory> 25 26 // Also provide a const read method (for when there is a `const ROM` type) 27 u8 read(u16 addr) const; 28 }; 29