1 #ifndef _IOP_INTC_H_
2 #define _IOP_INTC_H_
3 
4 #include "Types.h"
5 #include "BasicUnion.h"
6 #include "zip/ZipArchiveWriter.h"
7 #include "zip/ZipArchiveReader.h"
8 
9 namespace Iop
10 {
11 	class CIntc
12 	{
13 	public:
14 		enum LINES
15 		{
16 			LINE_VBLANK = 0x00,
17 			LINE_SBUS = 0x01,
18 			LINE_CDROM = 0x02,
19 			LINE_DMAC = 0x03,
20 			LINE_RTC0 = 0x04,
21 			LINE_RTC1 = 0x05,
22 			LINE_RTC2 = 0x06,
23 			LINE_SPU2 = 0x09,
24 			LINE_EVBLANK = 0x0B,
25 			LINE_DEV9 = 0x0D,
26 			LINE_RTC3 = 0x0E,
27 			LINE_RTC4 = 0x0F,
28 			LINE_RTC5 = 0x10,
29 			LINE_SIO2 = 0x11,
30 			LINE_USB = 0x16,
31 			LINE_ILINK = 0x18,
32 			LINE_DMA_BASE = 0x20,
33 			LINE_DMA2 = 0x22,
34 			LINE_DMA4 = 0x24, //spu2 core0
35 			LINE_DMA8 = 0x28, //spu2 core1
36 			LINE_DMA_DEV9 = 0x29,
37 			LINE_DMA9 = 0x2A,  //sif0
38 			LINE_DMA10 = 0x2B, //sif1
39 			LINES_MAX
40 		};
41 
42 		enum
43 		{
44 			ADDR_BEGIN = 0x1F801070,
45 			ADDR_END = 0x1F80107F
46 		};
47 
48 		enum
49 		{
50 			STATUS0 = 0x1F801070,
51 			MASK0 = 0x1F801074,
52 			STATUS1 = 0x1F801078,
53 			MASK1 = 0x1F80107C,
54 		};
55 
56 		CIntc();
57 		virtual ~CIntc();
58 
59 		void Reset();
60 
61 		void LoadState(Framework::CZipArchiveReader&);
62 		void SaveState(Framework::CZipArchiveWriter&);
63 
64 		uint32 ReadRegister(uint32);
65 		uint32 WriteRegister(uint32, uint32);
66 
67 		void AssertLine(unsigned int);
68 		void ClearLine(unsigned int);
69 		void SetStatus(uint64);
70 		void SetMask(uint64);
71 		bool HasPendingInterrupt();
72 
73 	private:
74 		UNION64_32 m_status;
75 		UNION64_32 m_mask;
76 	};
77 }
78 
79 #endif
80