struct Cartridge : property { enum class Mode : unsigned { Normal, BsxSlotted, Bsx, SufamiTurbo, SuperGameBoy, }; enum class Region : unsigned { NTSC, PAL, }; enum class Slot : unsigned { Base, Bsx, SufamiTurbo, SufamiTurboA, SufamiTurboB, GameBoy, }; MappedRAM rom; MappedRAM ram; readonly loaded; readonly crc32; readonly sha256; readonly mode; readonly region; readonly ram_size; readonly has_bsx_slot; readonly has_nss_dip; readonly has_superfx; readonly has_sa1; readonly has_necdsp; readonly has_hitachidsp; readonly has_armdsp; readonly has_srtc; readonly has_sdd1; readonly has_spc7110; readonly has_spc7110rtc; readonly has_obc1; readonly has_msu1; readonly has_link; struct NonVolatileRAM { const string id; uint8_t *data; unsigned size; Slot slot; NonVolatileRAM() : id(""), data(0), size(0), slot(Slot::Base) {} NonVolatileRAM(const string id, uint8_t *data, unsigned size, Slot slot = Slot::Base) : id(id), data(data), size(size), slot(slot) {} }; linear_vector nvram; struct Mapping { function read; function write; Bus::MapMode mode; unsigned banklo; unsigned bankhi; unsigned addrlo; unsigned addrhi; unsigned offset; unsigned size; Mapping(); Mapping(const function&, const function&); Mapping(Memory&); }; linear_vector mapping; struct Information { struct NSS { lstring setting; lstring option[16]; } nss; } information; void load(Mode, const char*); void unload(); void serialize(serializer&); Cartridge(); ~Cartridge(); private: void parse_markup(const char*); void parse_markup_map(Mapping&, XML::Node&); void parse_markup_rom(XML::Node&); void parse_markup_ram(XML::Node&); void parse_markup_nss(XML::Node&); void parse_markup_icd2(XML::Node&); void parse_markup_superfx(XML::Node&); void parse_markup_sa1(XML::Node&); void parse_markup_necdsp(XML::Node&); void parse_markup_hitachidsp(XML::Node&); void parse_markup_armdsp(XML::Node&); void parse_markup_bsx(XML::Node&); void parse_markup_sufamiturbo(XML::Node&); void parse_markup_srtc(XML::Node&); void parse_markup_sdd1(XML::Node&); void parse_markup_spc7110(XML::Node&); void parse_markup_obc1(XML::Node&); void parse_markup_msu1(XML::Node&); void parse_markup_link(XML::Node&); }; extern Cartridge cartridge;