Play-/Source/iop/Iop_FileIo.h

74 lines
1.6 KiB
C
Raw Permalink Normal View History

2015-01-25 19:35:21 -05:00
#pragma once
#include "Iop_SifMan.h"
#include "Iop_Module.h"
2016-03-19 12:06:40 -07:00
#include "zip/ZipArchiveWriter.h"
#include "zip/ZipArchiveReader.h"
class CIopBios;
namespace Iop
{
2015-01-25 19:35:21 -05:00
class CIoman;
class CFileIo : public CSifModule, public CModule
{
public:
class CHandler
2015-01-25 19:35:21 -05:00
{
public:
2018-04-30 21:01:23 +01:00
CHandler(CIoman*);
virtual ~CHandler() = default;
2015-01-25 19:35:21 -05:00
2022-03-31 12:37:39 -04:00
virtual void AllocateMemory(){};
virtual void ReleaseMemory(){};
virtual void Invoke(CMIPS&, unsigned int);
2019-09-13 11:16:16 -04:00
virtual bool Invoke(uint32, uint32*, uint32, uint32*, uint32, uint8*) = 0;
2016-03-20 13:29:58 -07:00
2018-04-30 21:01:23 +01:00
virtual void LoadState(Framework::CZipArchiveReader&){};
virtual void SaveState(Framework::CZipArchiveWriter&) const {};
2019-08-01 12:52:43 -04:00
virtual void ProcessCommands(CSifMan*){};
2015-01-25 19:35:21 -05:00
protected:
2018-04-30 21:01:23 +01:00
CIoman* m_ioman = nullptr;
2015-01-25 19:35:21 -05:00
};
enum SIF_MODULE_ID
{
2018-04-30 21:01:23 +01:00
SIF_MODULE_ID = 0x80000001
};
CFileIo(CIopBios&, uint8*, CSifMan&, CIoman&);
2018-04-30 21:01:23 +01:00
void SetModuleVersion(unsigned int);
2019-09-15 12:00:03 -04:00
std::string GetId() const override;
std::string GetFunctionName(unsigned int) const override;
void Invoke(CMIPS&, unsigned int) override;
bool Invoke(uint32, uint32*, uint32, uint32*, uint32, uint8*) override;
void LoadState(Framework::CZipArchiveReader&) override;
void SaveState(Framework::CZipArchiveWriter&) const override;
2016-03-19 12:06:40 -07:00
2019-08-01 12:52:43 -04:00
void ProcessCommands(Iop::CSifMan*);
static const char* g_moduleId;
2015-01-25 19:35:21 -05:00
private:
typedef std::unique_ptr<CHandler> HandlerPtr;
2022-03-31 12:37:39 -04:00
void SyncHandler();
CIopBios& m_bios;
uint8* m_ram = nullptr;
2018-04-30 21:01:23 +01:00
CSifMan& m_sifMan;
CIoman& m_ioman;
unsigned int m_moduleVersion = 0;
HandlerPtr m_handler;
2015-01-25 19:35:21 -05:00
};
typedef std::shared_ptr<CFileIo> FileIoPtr;
}