1 #pragma once
2 
3 #include "iop/Iop_SubSystem.h"
4 #include "PsfVmSubSystem.h"
5 
6 namespace Iop
7 {
8 	class CPsfSubSystem : public CPsfVmSubSystem
9 	{
10 	public:
11 		CPsfSubSystem(bool ps2Mode);
12 		virtual ~CPsfSubSystem() = default;
13 
14 		void Reset() override;
15 		CMIPS& GetCpu() override;
16 		uint8* GetRam() override;
17 		Iop::CSpuBase& GetSpuCore(unsigned int) override;
18 
19 #ifdef DEBUGGER_INCLUDED
20 		bool MustBreak() override;
21 		void DisableBreakpointsOnce() override;
22 		CBiosDebugInfoProvider* GetBiosDebugInfoProvider() override;
23 		void LoadDebugTags(Framework::Xml::CNode*) override;
24 		void SaveDebugTags(Framework::Xml::CNode*) override;
25 #endif
26 
27 		void Update(bool, CSoundHandler*) override;
28 
29 		Iop::CBiosBase* GetBios() const;
30 
31 	private:
32 		CSubSystem m_iop;
33 		uint32 m_frameTicks;
34 		uint32 m_spuUpdateTicks;
35 		int m_frameCounter;
36 		int m_spuUpdateCounter;
37 
38 		enum
39 		{
40 			SAMPLE_COUNT = 44,
41 			BLOCK_SIZE = SAMPLE_COUNT * 2,
42 			BLOCK_COUNT = 10,
43 		};
44 
45 		int16 m_samples[BLOCK_SIZE * BLOCK_COUNT];
46 		int m_currentBlock;
47 	};
48 
49 	typedef std::shared_ptr<CPsfSubSystem> PsfSubSystemPtr;
50 }
51