Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
alexbevi
GitHub Repository: alexbevi/BizHawk
Path: blob/master/libsnes/bsnes/snes/cartridge/cartridge.hpp
2 views
1
struct Cartridge : property<Cartridge> {
2
enum class Mode : unsigned {
3
Normal,
4
BsxSlotted,
5
Bsx,
6
SufamiTurbo,
7
SuperGameBoy,
8
};
9
10
enum class Region : unsigned {
11
NTSC,
12
PAL,
13
};
14
15
enum class Slot : unsigned {
16
Base,
17
Bsx,
18
SufamiTurbo,
19
SufamiTurboA,
20
SufamiTurboB,
21
GameBoy,
22
};
23
24
MappedRAM rom;
25
MappedRAM ram;
26
27
readonly<bool> loaded;
28
readonly<unsigned> crc32;
29
readonly<string> sha256;
30
31
readonly<Mode> mode;
32
readonly<Region> region;
33
readonly<unsigned> ram_size;
34
35
readonly<bool> has_bsx_slot;
36
readonly<bool> has_nss_dip;
37
readonly<bool> has_superfx;
38
readonly<bool> has_sa1;
39
readonly<bool> has_necdsp;
40
readonly<bool> has_hitachidsp;
41
readonly<bool> has_armdsp;
42
readonly<bool> has_srtc;
43
readonly<bool> has_sdd1;
44
readonly<bool> has_spc7110;
45
readonly<bool> has_spc7110rtc;
46
readonly<bool> has_obc1;
47
readonly<bool> has_msu1;
48
readonly<bool> has_link;
49
50
struct NonVolatileRAM {
51
const string id;
52
uint8_t *data;
53
unsigned size;
54
Slot slot;
55
NonVolatileRAM() : id(""), data(0), size(0), slot(Slot::Base) {}
56
NonVolatileRAM(const string id, uint8_t *data, unsigned size, Slot slot = Slot::Base)
57
: id(id), data(data), size(size), slot(slot) {}
58
};
59
linear_vector<NonVolatileRAM> nvram;
60
61
struct Mapping {
62
function<uint8 (unsigned)> read;
63
function<void (unsigned, uint8)> write;
64
Bus::MapMode mode;
65
unsigned banklo;
66
unsigned bankhi;
67
unsigned addrlo;
68
unsigned addrhi;
69
unsigned offset;
70
unsigned size;
71
72
Mapping();
73
Mapping(const function<uint8 (unsigned)>&, const function<void (unsigned, uint8)>&);
74
Mapping(Memory&);
75
};
76
linear_vector<Mapping> mapping;
77
78
struct Information {
79
struct NSS {
80
lstring setting;
81
lstring option[16];
82
} nss;
83
} information;
84
85
void load(Mode, const char*);
86
void unload();
87
88
void serialize(serializer&);
89
Cartridge();
90
~Cartridge();
91
92
private:
93
void parse_markup(const char*);
94
void parse_markup_map(Mapping&, XML::Node&);
95
96
void parse_markup_rom(XML::Node&);
97
void parse_markup_ram(XML::Node&);
98
void parse_markup_nss(XML::Node&);
99
void parse_markup_icd2(XML::Node&);
100
void parse_markup_superfx(XML::Node&);
101
void parse_markup_sa1(XML::Node&);
102
void parse_markup_necdsp(XML::Node&);
103
void parse_markup_hitachidsp(XML::Node&);
104
void parse_markup_armdsp(XML::Node&);
105
void parse_markup_bsx(XML::Node&);
106
void parse_markup_sufamiturbo(XML::Node&);
107
void parse_markup_srtc(XML::Node&);
108
void parse_markup_sdd1(XML::Node&);
109
void parse_markup_spc7110(XML::Node&);
110
void parse_markup_obc1(XML::Node&);
111
void parse_markup_msu1(XML::Node&);
112
void parse_markup_link(XML::Node&);
113
114
inline uint8 rom_read(unsigned addr);
115
inline void rom_write(unsigned addr, uint8 n);
116
inline uint8 ram_read(unsigned addr);
117
inline void ram_write(unsigned addr, uint8 n);
118
};
119
120
extern Cartridge cartridge;
121
122