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:
|
2008-11-06 23:48:40 +00:00
|
|
|
CSpu2(CSpuBase&, CSpuBase&);
|
2008-10-21 22:33:11 +00:00
|
|
|
virtual ~CSpu2();
|
|
|
|
|
|
|
|
uint32 ReadRegister(uint32);
|
|
|
|
uint32 WriteRegister(uint32, uint32);
|
|
|
|
|
2008-11-03 00:38:24 +00:00
|
|
|
void Reset();
|
2008-10-27 03:17:22 +00:00
|
|
|
Spu2::CCore* GetCore(unsigned int);
|
|
|
|
|
2008-10-22 12:26:47 +00:00
|
|
|
enum
|
|
|
|
{
|
|
|
|
REGS_BEGIN = 0x1F900000,
|
|
|
|
REGS_END = 0x1F90FFFF,
|
|
|
|
};
|
|
|
|
|
2008-10-21 22:33:11 +00:00
|
|
|
private:
|
2008-10-23 22:17:44 +00:00
|
|
|
typedef std::tr1::function<uint32 (uint32, uint32)> RegisterAccessFunction;
|
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];
|
|
|
|
};
|
|
|
|
|
|
|
|
uint32 ProcessRegisterAccess(const REGISTER_DISPATCH_INFO&, uint32, uint32);
|
|
|
|
uint32 ReadRegisterImpl(uint32, uint32);
|
|
|
|
uint32 WriteRegisterImpl(uint32, uint32);
|
|
|
|
void LogRead(uint32);
|
|
|
|
void LogWrite(uint32, uint32);
|
|
|
|
|
|
|
|
REGISTER_DISPATCH_INFO m_readDispatchInfo;
|
|
|
|
REGISTER_DISPATCH_INFO m_writeDispatchInfo;
|
2008-10-24 22:14:40 +00:00
|
|
|
Spu2::CCore* m_core[CORE_NUM];
|
2008-10-21 22:33:11 +00:00
|
|
|
};
|
|
|
|
}
|
|
|
|
|
|
|
|
#endif
|