Play-/Source/iop/Iop_Spu2.h

63 lines
1.2 KiB
C
Raw Permalink Normal View History

#ifndef _SPU2_H_
#define _SPU2_H_
#include <functional>
#include "Iop_Spu2_Core.h"
namespace Iop
{
class CSpu2
{
public:
2018-04-30 21:01:23 +01:00
CSpu2(CSpuBase&, CSpuBase&);
2020-12-28 20:53:18 -05:00
virtual ~CSpu2() = default;
CSpu2(const CSpu2&) = delete;
CSpu2& operator=(const CSpu2&) = delete;
2018-04-30 21:01:23 +01:00
uint32 ReadRegister(uint32);
uint32 WriteRegister(uint32, uint32);
2018-04-30 21:01:23 +01:00
void Reset();
Spu2::CCore* GetCore(unsigned int);
enum
{
2018-04-30 21:01:23 +01:00
C_IRQINFO = 0x1F9007C2
};
enum
{
2018-04-30 21:01:23 +01:00
REGS_BEGIN = 0x1F900000,
REGS_END = 0x1F90FFFF,
};
private:
2018-04-30 21:01:23 +01:00
typedef std::function<uint32(uint32, uint32)> RegisterAccessFunction;
typedef std::unique_ptr<Spu2::CCore> CorePtr;
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);
2018-04-30 21:01:23 +01:00
REGISTER_DISPATCH_INFO m_readDispatchInfo;
REGISTER_DISPATCH_INFO m_writeDispatchInfo;
CorePtr m_core[CORE_NUM];
};
}
#endif