2018-08-21 13:28:32 +00:00
|
|
|
#ifndef NAOMI_CART_H
|
|
|
|
#define NAOMI_CART_H
|
|
|
|
|
2018-11-06 13:30:34 +00:00
|
|
|
#include <string>
|
2015-08-09 20:39:32 +00:00
|
|
|
#include "types.h"
|
|
|
|
|
2018-11-05 21:53:38 +00:00
|
|
|
class Cartridge
|
|
|
|
{
|
|
|
|
public:
|
|
|
|
Cartridge(u32 size);
|
|
|
|
virtual ~Cartridge();
|
|
|
|
|
2018-11-07 22:27:32 +00:00
|
|
|
virtual void Init() {}
|
2018-11-05 21:53:38 +00:00
|
|
|
virtual u32 ReadMem(u32 address, u32 size) = 0;
|
|
|
|
virtual void WriteMem(u32 address, u32 data, u32 size) = 0;
|
|
|
|
|
|
|
|
virtual bool Read(u32 offset, u32 size, void* dst);
|
|
|
|
virtual bool Write(u32 offset, u32 size, u32 data);
|
|
|
|
virtual void* GetPtr(u32 offset, u32& size);
|
|
|
|
virtual void* GetDmaPtr(u32 &size) = 0;
|
|
|
|
virtual void AdvancePtr(u32 size) = 0;
|
2018-11-06 13:30:34 +00:00
|
|
|
virtual std::string GetGameId();
|
2018-11-06 16:54:54 +00:00
|
|
|
virtual void Serialize(void **data, unsigned int *total_size) {}
|
|
|
|
virtual void Unserialize(void **data, unsigned int *total_size) {}
|
2018-11-07 22:27:32 +00:00
|
|
|
virtual void SetKey(u32 key) { }
|
|
|
|
virtual void SetKeyData(u8 *key_data) { }
|
2018-11-05 21:53:38 +00:00
|
|
|
|
|
|
|
protected:
|
|
|
|
u8* RomPtr;
|
|
|
|
u32 RomSize;
|
|
|
|
};
|
|
|
|
|
|
|
|
class NaomiCartridge : public Cartridge
|
|
|
|
{
|
|
|
|
public:
|
|
|
|
NaomiCartridge(u32 size) : Cartridge(size), RomPioOffset(0), RomPioAutoIncrement(0), DmaOffset(0), DmaCount(0xffff) {}
|
|
|
|
|
2018-11-14 19:50:22 +00:00
|
|
|
virtual u32 ReadMem(u32 address, u32 size) override;
|
|
|
|
virtual void WriteMem(u32 address, u32 data, u32 size) override;
|
|
|
|
virtual void* GetDmaPtr(u32 &size) override;
|
|
|
|
virtual void AdvancePtr(u32 size) override;
|
|
|
|
virtual void Serialize(void** data, unsigned int* total_size) override;
|
|
|
|
virtual void Unserialize(void** data, unsigned int* total_size) override;
|
2018-11-05 21:53:38 +00:00
|
|
|
|
2018-11-07 22:27:32 +00:00
|
|
|
void SetKey(u32 key) override { this->key = key; }
|
2018-11-05 21:53:38 +00:00
|
|
|
|
|
|
|
protected:
|
|
|
|
virtual void DmaOffsetChanged(u32 dma_offset) {}
|
|
|
|
virtual void PioOffsetChanged(u32 pio_offset) {}
|
|
|
|
u32 RomPioOffset;
|
|
|
|
bool RomPioAutoIncrement;
|
|
|
|
u32 DmaOffset;
|
|
|
|
u32 DmaCount;
|
|
|
|
u32 key;
|
|
|
|
};
|
|
|
|
|
|
|
|
class DecryptedCartridge : public NaomiCartridge
|
|
|
|
{
|
|
|
|
public:
|
|
|
|
DecryptedCartridge(u8 *rom_ptr, u32 size) : NaomiCartridge(size) { RomPtr = rom_ptr; }
|
2019-05-22 09:41:12 +00:00
|
|
|
virtual ~DecryptedCartridge() override;
|
2018-11-05 21:53:38 +00:00
|
|
|
};
|
|
|
|
|
|
|
|
class M2Cartridge : public NaomiCartridge
|
|
|
|
{
|
|
|
|
public:
|
|
|
|
M2Cartridge(u32 size) : NaomiCartridge(size) {}
|
|
|
|
|
2018-11-14 19:50:22 +00:00
|
|
|
virtual bool Read(u32 offset, u32 size, void* dst) override;
|
|
|
|
virtual bool Write(u32 offset, u32 size, u32 data) override;
|
2018-11-05 21:53:38 +00:00
|
|
|
u16 ReadCipheredData(u32 offset);
|
2018-11-14 19:50:22 +00:00
|
|
|
virtual void Serialize(void** data, unsigned int* total_size) override;
|
|
|
|
virtual void Unserialize(void** data, unsigned int* total_size) override;
|
|
|
|
virtual void* GetDmaPtr(u32& size) override;
|
2018-12-11 22:20:30 +00:00
|
|
|
virtual std::string GetGameId() override;
|
2018-11-05 21:53:38 +00:00
|
|
|
|
|
|
|
private:
|
|
|
|
u8 naomi_cart_ram[64 * 1024];
|
|
|
|
};
|
|
|
|
|
2019-06-26 17:06:30 +00:00
|
|
|
class NaomiCartException
|
|
|
|
{
|
|
|
|
public:
|
|
|
|
NaomiCartException(std::string reason) : reason(reason) {}
|
|
|
|
|
|
|
|
std::string reason;
|
|
|
|
};
|
|
|
|
|
2019-03-13 18:59:59 +00:00
|
|
|
bool naomi_cart_SelectFile();
|
|
|
|
void naomi_cart_Close();
|
2018-08-21 13:28:32 +00:00
|
|
|
|
2018-10-17 11:18:24 +00:00
|
|
|
extern char naomi_game_id[];
|
2018-11-19 15:43:41 +00:00
|
|
|
extern u8 *naomi_default_eeprom;
|
2018-10-17 11:18:24 +00:00
|
|
|
|
2018-11-05 21:53:38 +00:00
|
|
|
extern Cartridge *CurrentCartridge;
|
|
|
|
|
2018-11-14 13:13:42 +00:00
|
|
|
struct ButtonDescriptor
|
|
|
|
{
|
|
|
|
u32 mask;
|
|
|
|
const char *name;
|
2018-12-11 22:20:30 +00:00
|
|
|
u32 p2_mask;
|
2018-11-14 13:13:42 +00:00
|
|
|
};
|
|
|
|
|
|
|
|
enum AxisType {
|
|
|
|
Full,
|
|
|
|
Half
|
|
|
|
};
|
|
|
|
|
|
|
|
struct AxisDescriptor
|
|
|
|
{
|
|
|
|
const char *name;
|
|
|
|
AxisType type;
|
|
|
|
};
|
|
|
|
|
|
|
|
struct InputDescriptors
|
|
|
|
{
|
2018-12-11 22:20:30 +00:00
|
|
|
ButtonDescriptor buttons[18];
|
2018-11-14 13:13:42 +00:00
|
|
|
AxisDescriptor axes[8];
|
|
|
|
};
|
|
|
|
|
2019-04-06 17:36:57 +00:00
|
|
|
extern InputDescriptors *NaomiGameInputs;
|
2018-11-14 13:13:42 +00:00
|
|
|
|
2018-08-21 13:28:32 +00:00
|
|
|
#endif //NAOMI_CART_H
|