Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
alexbevi
GitHub Repository: alexbevi/BizHawk
Path: blob/master/libsnes/bsnes/snes/memory/memory.hpp
2 views
1
struct Memory {
2
virtual inline unsigned size() const;
3
virtual uint8 read(unsigned addr) = 0;
4
virtual void write(unsigned addr, uint8 data) = 0;
5
};
6
7
struct StaticRAM : Memory {
8
inline uint8* data();
9
inline unsigned size() const;
10
11
inline uint8 read(unsigned addr);
12
inline void write(unsigned addr, uint8 n);
13
inline uint8& operator[](unsigned addr);
14
inline const uint8& operator[](unsigned addr) const;
15
16
inline StaticRAM(unsigned size);
17
inline ~StaticRAM();
18
19
private:
20
uint8 *data_;
21
unsigned size_;
22
};
23
24
struct MappedRAM : Memory {
25
inline void reset();
26
inline void map(uint8*, unsigned);
27
inline void copy(const uint8*, unsigned);
28
29
inline void write_protect(bool status);
30
inline uint8* data();
31
inline unsigned size() const;
32
33
inline uint8 read(unsigned addr);
34
inline void write(unsigned addr, uint8 n);
35
inline const uint8& operator[](unsigned addr) const;
36
inline MappedRAM(const char* name = NULL);
37
38
inline void setName(const char* name) { name_ = name; }
39
40
private:
41
uint8 *data_;
42
unsigned size_;
43
bool write_protect_;
44
const char* name_;
45
};
46
47
struct Bus {
48
unsigned mirror(unsigned addr, unsigned size);
49
50
alwaysinline uint8 read(unsigned addr);
51
alwaysinline void write(unsigned addr, uint8 data);
52
53
uint8 *lookup;
54
uint32 *target;
55
56
unsigned idcount;
57
function<uint8 (unsigned)> reader[256];
58
function<void (unsigned, uint8)> writer[256];
59
60
enum class MapMode : unsigned { Direct, Linear, Shadow };
61
void map(
62
MapMode mode,
63
unsigned bank_lo, unsigned bank_hi,
64
unsigned addr_lo, unsigned addr_hi,
65
const function<uint8 (unsigned)> &read,
66
const function<void (unsigned, uint8)> &write,
67
unsigned base = 0, unsigned length = 0
68
);
69
70
void map_reset();
71
void map_xml();
72
73
Bus();
74
~Bus();
75
};
76
77
extern Bus bus;
78
79