2008-10-21 22:33:11 +00:00
|
|
|
#ifndef _SPU2_H_
|
|
|
|
#define _SPU2_H_
|
|
|
|
|
2008-10-24 22:14:40 +00:00
|
|
|
#include <boost/utility.hpp>
|
2008-10-23 22:17:44 +00:00
|
|
|
#include <functional>
|
2008-11-07 23:50:47 +00:00
|
|
|
#include "Iop_Spu2_Core.h"
|
2008-10-21 22:33:11 +00:00
|
|
|
|
2008-11-06 23:48:40 +00:00
|
|
|
namespace Iop
|
2008-10-21 22:33:11 +00:00
|
|
|
{
|
2008-10-24 22:14:40 +00:00
|
|
|
class CSpu2 : boost::noncopyable
|
2008-10-21 22:33:11 +00:00
|
|
|
{
|
|
|
|
public:
|
2018-04-30 21:01:23 +01:00
|
|
|
CSpu2(CSpuBase&, CSpuBase&);
|
|
|
|
virtual ~CSpu2();
|
2008-10-21 22:33:11 +00:00
|
|
|
|
2018-04-30 21:01:23 +01:00
|
|
|
uint32 ReadRegister(uint32);
|
|
|
|
uint32 WriteRegister(uint32, uint32);
|
2008-10-21 22:33:11 +00:00
|
|
|
|
2018-04-30 21:01:23 +01:00
|
|
|
void Reset();
|
|
|
|
Spu2::CCore* GetCore(unsigned int);
|
2008-10-27 03:17:22 +00:00
|
|
|
|
2015-02-08 17:18:41 -05:00
|
|
|
enum
|
|
|
|
{
|
2018-04-30 21:01:23 +01:00
|
|
|
C_IRQINFO = 0x1F9007C2
|
2015-02-08 17:18:41 -05:00
|
|
|
};
|
|
|
|
|
2012-03-11 20:16:15 +00:00
|
|
|
enum
|
|
|
|
{
|
2018-04-30 21:01:23 +01:00
|
|
|
REGS_BEGIN = 0x1F900000,
|
|
|
|
REGS_END = 0x1F90FFFF,
|
2012-03-11 20:16:15 +00:00
|
|
|
};
|
2008-10-22 12:26:47 +00:00
|
|
|
|
2008-10-21 22:33:11 +00:00
|
|
|
private:
|
2018-04-30 21:01:23 +01:00
|
|
|
typedef std::function<uint32(uint32, uint32)> RegisterAccessFunction;
|
2015-02-08 17:18:41 -05:00
|
|
|
typedef std::unique_ptr<Spu2::CCore> CorePtr;
|
2008-10-21 22:33:11 +00:00
|
|
|
|
2008-10-23 22:17:44 +00:00
|
|
|
enum
|
|
|
|
{
|
|
|
|
CORE_NUM = 2
|
|
|
|
};
|
|
|
|
|
|
|
|
struct REGISTER_DISPATCH_INFO
|
|
|
|
{
|
|
|
|
RegisterAccessFunction global;
|
|
|
|
RegisterAccessFunction core[2];
|
|
|
|
};
|
|
|
|
|
2018-04-30 21:01:23 +01:00
|
|
|
uint32 ProcessRegisterAccess(const REGISTER_DISPATCH_INFO&, uint32, uint32);
|
|
|
|
uint32 ReadRegisterImpl(uint32, uint32);
|
|
|
|
uint32 WriteRegisterImpl(uint32, uint32);
|
|
|
|
void LogRead(uint32);
|
|
|
|
void LogWrite(uint32, uint32);
|
2008-10-23 22:17:44 +00:00
|
|
|
|
2018-04-30 21:01:23 +01:00
|
|
|
REGISTER_DISPATCH_INFO m_readDispatchInfo;
|
|
|
|
REGISTER_DISPATCH_INFO m_writeDispatchInfo;
|
|
|
|
CorePtr m_core[CORE_NUM];
|
2008-10-21 22:33:11 +00:00
|
|
|
};
|
|
|
|
}
|
|
|
|
|
|
|
|
#endif
|