1 #pragma once 2 3 #include "Iop_FileIo.h" 4 5 namespace Iop 6 { 7 class CFileIoHandler1000 : public CFileIo::CHandler 8 { 9 public: 10 CFileIoHandler1000(CIopBios&, uint8*, CIoman*, CSifMan&); 11 virtual ~CFileIoHandler1000(); 12 13 void Invoke(CMIPS&, uint32) override; 14 bool Invoke(uint32, uint32*, uint32, uint32*, uint32, uint8*) override; 15 16 private: 17 enum 18 { 19 TRAMPOLINE_SIZE = 0x80, 20 BUFFER_SIZE = 0x400, 21 }; 22 23 struct MODULEDATA 24 { 25 uint8 trampoline[TRAMPOLINE_SIZE]; 26 uint8 buffer[BUFFER_SIZE]; 27 uint32 method; 28 uint32 handle; 29 uint32 resultAddr; 30 uint32 eeBufferAddr; 31 uint32 size; 32 uint32 bytesProcessed; 33 }; 34 35 void LaunchOpenRequest(uint32*, uint32, uint32*, uint32, uint8*); 36 void LaunchCloseRequest(uint32*, uint32, uint32*, uint32, uint8*); 37 void LaunchReadRequest(uint32*, uint32, uint32*, uint32, uint8*); 38 void LaunchSeekRequest(uint32*, uint32, uint32*, uint32, uint8*); 39 40 std::pair<bool, int32> FinishReadRequest(MODULEDATA*, uint8*, int32); 41 42 void ExecuteRequest(CMIPS&); 43 void FinishRequest(CMIPS&); 44 void BuildExportTable(); 45 46 CIopBios& m_bios; 47 uint8* m_iopRam = nullptr; 48 CSifMan& m_sifMan; 49 uint32 m_moduleDataAddr = 0; 50 uint32 m_trampolineAddr = 0; 51 uint32 m_bufferAddr = 0; 52 }; 53 } 54