#pragma once #include "stdafx.h" #include "IMemoryHandler.h" #include "CartTypes.h" #include "../Utilities/ISerializable.h" class BaseCoprocessor; class MemoryManager; class VirtualFile; class EmuSettings; class NecDsp; class Console; class BaseCartridge : public ISerializable { private: Console *_console; vector> _prgRomHandlers; vector> _saveRamHandlers; SnesCartInformation _cartInfo = {}; unique_ptr _coprocessor; NecDsp *_necDsp = nullptr; CartFlags::CartFlags _flags = CartFlags::CartFlags::None; CoprocessorType _coprocessorType = CoprocessorType::None; string _romPath; string _patchPath; uint8_t* _prgRom = nullptr; uint8_t* _saveRam = nullptr; uint32_t _prgRomSize = 0; uint32_t _saveRamSize = 0; void LoadBattery(); int32_t GetHeaderScore(uint32_t addr); void DisplayCartInfo(); CoprocessorType GetCoprocessorType(); CoprocessorType GetSt01xVersion(); CoprocessorType GetDspVersion(); bool MapSpecificCarts(MemoryManager &mm); void InitCoprocessor(MemoryManager &mm); string GetCartName(); string GetGameCode(); public: virtual ~BaseCartridge(); static shared_ptr CreateCartridge(Console* console, VirtualFile &romFile, VirtualFile &patchFile); void Init(); void Reset(); void SaveBattery(); RomInfo GetRomInfo(); string GetSha1Hash(); CartFlags::CartFlags GetCartFlags(); void RegisterHandlers(MemoryManager &mm); uint8_t* DebugGetPrgRom() { return _prgRom; } uint8_t* DebugGetSaveRam() { return _saveRam; } uint32_t DebugGetPrgRomSize() { return _prgRomSize; } uint32_t DebugGetSaveRamSize() { return _saveRamSize; } NecDsp* GetDsp(); BaseCoprocessor* GetCoprocessor(); void Serialize(Serializer &s) override; };