1 #pragma once 2 3 #include "Iop_SifMan.h" 4 #include "Iop_Module.h" 5 #include "zip/ZipArchiveWriter.h" 6 #include "zip/ZipArchiveReader.h" 7 8 class CIopBios; 9 10 namespace Iop 11 { 12 class CIoman; 13 14 class CFileIo : public CSifModule, public CModule 15 { 16 public: 17 class CHandler 18 { 19 public: 20 CHandler(CIoman*); 21 virtual ~CHandler() = default; 22 23 virtual void Invoke(CMIPS&, unsigned int); 24 virtual bool Invoke(uint32, uint32*, uint32, uint32*, uint32, uint8*) = 0; 25 LoadState(Framework::CZipArchiveReader &)26 virtual void LoadState(Framework::CZipArchiveReader&){}; SaveState(Framework::CZipArchiveWriter &)27 virtual void SaveState(Framework::CZipArchiveWriter&) const {}; 28 ProcessCommands(CSifMan *)29 virtual void ProcessCommands(CSifMan*){}; 30 31 protected: 32 CIoman* m_ioman = nullptr; 33 }; 34 35 enum SIF_MODULE_ID 36 { 37 SIF_MODULE_ID = 0x80000001 38 }; 39 40 CFileIo(CIopBios&, uint8*, CSifMan&, CIoman&); 41 42 void SetModuleVersion(unsigned int); 43 44 std::string GetId() const override; 45 std::string GetFunctionName(unsigned int) const override; 46 void Invoke(CMIPS&, unsigned int) override; 47 bool Invoke(uint32, uint32*, uint32, uint32*, uint32, uint8*) override; 48 49 void LoadState(Framework::CZipArchiveReader&) override; 50 void SaveState(Framework::CZipArchiveWriter&) const override; 51 52 void ProcessCommands(Iop::CSifMan*); 53 54 static const char* g_moduleId; 55 56 private: 57 typedef std::unique_ptr<CHandler> HandlerPtr; 58 59 CIopBios& m_bios; 60 uint8* m_ram = nullptr; 61 CSifMan& m_sifMan; 62 CIoman& m_ioman; 63 unsigned int m_moduleVersion = 0; 64 HandlerPtr m_handler; 65 }; 66 67 typedef std::shared_ptr<CFileIo> FileIoPtr; 68 } 69