2019-02-15 21:33:13 -05:00
|
|
|
#pragma once
|
|
|
|
#include "stdafx.h"
|
|
|
|
#include "IMemoryHandler.h"
|
2019-03-12 09:15:57 -04:00
|
|
|
#include "CartTypes.h"
|
|
|
|
#include "../Utilities/ISerializable.h"
|
2019-02-15 21:33:13 -05:00
|
|
|
|
2019-02-17 14:42:35 -05:00
|
|
|
class MemoryManager;
|
|
|
|
class VirtualFile;
|
|
|
|
|
|
|
|
namespace CartFlags
|
|
|
|
{
|
|
|
|
enum CartFlags
|
|
|
|
{
|
|
|
|
LoRom = 1,
|
|
|
|
HiRom = 2,
|
|
|
|
FastRom = 4,
|
|
|
|
ExLoRom = 8,
|
2019-03-11 00:37:31 -04:00
|
|
|
ExHiRom = 16,
|
|
|
|
CopierHeader = 32
|
2019-02-17 14:42:35 -05:00
|
|
|
};
|
|
|
|
}
|
|
|
|
|
2019-03-12 09:15:57 -04:00
|
|
|
class BaseCartridge : public ISerializable
|
2019-02-15 21:33:13 -05:00
|
|
|
{
|
|
|
|
private:
|
2019-02-17 14:42:35 -05:00
|
|
|
vector<unique_ptr<IMemoryHandler>> _prgRomHandlers;
|
|
|
|
vector<unique_ptr<IMemoryHandler>> _saveRamHandlers;
|
|
|
|
SnesCartInformation _cartInfo;
|
|
|
|
|
2019-03-08 20:18:13 -05:00
|
|
|
CartFlags::CartFlags _flags;
|
2019-02-24 20:04:59 -05:00
|
|
|
string _romPath;
|
|
|
|
|
2019-02-15 21:33:13 -05:00
|
|
|
uint8_t* _prgRom = nullptr;
|
|
|
|
uint8_t* _saveRam = nullptr;
|
|
|
|
|
|
|
|
uint32_t _prgRomSize = 0;
|
|
|
|
uint32_t _saveRamSize = 0;
|
|
|
|
|
2019-02-17 14:42:35 -05:00
|
|
|
void MapBanks(MemoryManager &mm, vector<unique_ptr<IMemoryHandler>> &handlers, uint8_t startBank, uint8_t endBank, uint16_t startPage = 0, uint16_t endPage = 0x0F, uint16_t pageIncrement = 0, bool mirror = false);
|
2019-02-24 20:04:59 -05:00
|
|
|
|
|
|
|
void LoadBattery();
|
2019-02-17 14:42:35 -05:00
|
|
|
|
2019-03-08 20:18:13 -05:00
|
|
|
int32_t GetHeaderScore(uint32_t addr);
|
2019-03-02 21:17:45 -05:00
|
|
|
void DisplayCartInfo();
|
|
|
|
|
2019-02-15 21:33:13 -05:00
|
|
|
public:
|
2019-03-31 14:50:12 -04:00
|
|
|
virtual ~BaseCartridge();
|
2019-02-16 01:16:57 -05:00
|
|
|
|
2019-02-17 14:42:35 -05:00
|
|
|
static shared_ptr<BaseCartridge> CreateCartridge(VirtualFile &romFile, VirtualFile &patchFile);
|
2019-02-15 21:33:13 -05:00
|
|
|
|
2019-02-17 14:42:35 -05:00
|
|
|
void Init();
|
|
|
|
|
2019-03-16 12:20:18 -04:00
|
|
|
void SaveBattery();
|
|
|
|
|
2019-02-26 22:27:09 -05:00
|
|
|
RomInfo GetRomInfo();
|
2019-03-12 09:15:57 -04:00
|
|
|
string GetSha1Hash();
|
2019-02-26 22:27:09 -05:00
|
|
|
|
2019-02-17 14:42:35 -05:00
|
|
|
void RegisterHandlers(MemoryManager &mm);
|
2019-02-15 21:33:13 -05:00
|
|
|
|
|
|
|
uint8_t* DebugGetPrgRom() { return _prgRom; }
|
|
|
|
uint8_t* DebugGetSaveRam() { return _saveRam; }
|
|
|
|
uint32_t DebugGetPrgRomSize() { return _prgRomSize; }
|
|
|
|
uint32_t DebugGetSaveRamSize() { return _saveRamSize; }
|
2019-03-12 09:15:57 -04:00
|
|
|
|
|
|
|
void Serialize(Serializer &s) override;
|
2019-02-15 21:33:13 -05:00
|
|
|
};
|