1 #pragma once
2 
3 #include "Iop_Module.h"
4 
5 class CIopBios;
6 
7 namespace Iop
8 {
9 	class CThbase : public CModule
10 	{
11 	public:
12 		CThbase(CIopBios&, uint8*);
13 		virtual ~CThbase() = default;
14 
15 		std::string GetId() const override;
16 		std::string GetFunctionName(unsigned int) const override;
17 		void Invoke(CMIPS&, unsigned int) override;
18 
19 	private:
20 		struct THREAD
21 		{
22 			uint32 attributes;
23 			uint32 options;
24 			uint32 threadProc;
25 			uint32 stackSize;
26 			uint32 priority;
27 		};
28 
29 		uint32 CreateThread(const THREAD*);
30 		uint32 DeleteThread(uint32);
31 		int32 StartThread(uint32, uint32);
32 		int32 StartThreadArgs(uint32, uint32, uint32);
33 		uint32 ExitThread();
34 		uint32 TerminateThread(uint32);
35 		uint32 ChangeThreadPriority(uint32, uint32);
36 		int32 RotateThreadReadyQueue(uint32);
37 		int32 ReleaseWaitThread(uint32);
38 		int32 iReleaseWaitThread(uint32);
39 		uint32 GetThreadId();
40 		uint32 ReferThreadStatus(uint32, uint32);
41 		uint32 iReferThreadStatus(uint32, uint32);
42 		uint32 SleepThread();
43 		uint32 WakeupThread(uint32);
44 		uint32 iWakeupThread(uint32);
45 		int32 CancelWakeupThread(uint32);
46 		int32 iCancelWakeupThread(uint32);
47 		uint32 DelayThread(uint32);
48 		uint32 GetSystemTime(uint32);
49 		uint32 GetSystemTimeLow();
50 		uint32 SetAlarm(uint32, uint32, uint32);
51 		uint32 CancelAlarm(uint32, uint32);
52 		void USecToSysClock(uint32, uint32);
53 		void SysClockToUSec(uint32, uint32, uint32);
54 		uint32 GetCurrentThreadPriority();
55 
56 		uint8* m_ram;
57 		CIopBios& m_bios;
58 	};
59 }
60