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