bsnes/higan/ws/cartridge/cartridge.hpp

96 lines
2.0 KiB
C++

struct Cartridge : Thread, IO {
auto pathID() const -> uint { return information.pathID; }
static auto Enter() -> void;
auto main() -> void;
auto step(uint clocks) -> void;
auto power() -> void;
auto load() -> bool;
auto save() -> void;
auto unload() -> void;
//memory.cpp
auto romRead(uint20 addr) -> uint8;
auto romWrite(uint20 addr, uint8 data) -> void;
auto ramRead(uint20 addr) -> uint8;
auto ramWrite(uint20 addr, uint8 data) -> void;
//rtc.cpp
auto rtcLoad() -> void;
auto rtcSave() -> void;
auto rtcTickSecond() -> void;
auto rtcCheckAlarm() -> void;
auto rtcStatus() -> uint8;
auto rtcCommand(uint8 data) -> void;
auto rtcRead() -> uint8;
auto rtcWrite(uint8 data) -> void;
//io.cpp
auto portRead(uint16 addr) -> uint8 override;
auto portWrite(uint16 addr, uint8 data) -> void override;
//serialization.cpp
auto serialize(serializer&) -> void;
struct Information {
uint pathID = 0;
string sha256;
string manifest;
string title;
boolean orientation; //0 = horizontal; 1 = vertical
} information;
struct Registers {
//$00c0 BANK_ROM2
uint8 romBank2;
//$00c1 BANK_SRAM
uint8 sramBank;
//$00c2 BANK_ROM0
uint8 romBank0;
//$00c3 BANK_ROM1
uint8 romBank1;
//$00cc GPO_EN
uint8 gpoEnable;
//$00cd GPO_DATA
uint8 gpoData;
} r;
struct Memory {
uint8* data = nullptr;
uint size = 0;
uint mask = 0;
string name;
};
struct RTC : Memory {
uint8 command;
uint4 index;
uint8 alarm;
uint8 alarmHour;
uint8 alarmMinute;
auto year() -> uint8& { return data[0]; }
auto month() -> uint8& { return data[1]; }
auto day() -> uint8& { return data[2]; }
auto weekday() -> uint8& { return data[3]; }
auto hour() -> uint8& { return data[4]; }
auto minute() -> uint8& { return data[5]; }
auto second() -> uint8& { return data[6]; }
};
Memory rom;
Memory ram;
EEPROM eeprom;
RTC rtc;
};
extern Cartridge cartridge;