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