60 lines
1.4 KiB
C++
60 lines
1.4 KiB
C++
#pragma once
|
|
#include "MemoryHandler.h"
|
|
#include <Project64-core\Settings\GameSettings.h>
|
|
#include <Project64-core\Settings\DebugSettings.h>
|
|
#include <Project64-core\Logging.h>
|
|
#include <stdint.h>
|
|
|
|
class SPRegistersReg
|
|
{
|
|
protected:
|
|
SPRegistersReg(uint32_t * SignalProcessorInterface);
|
|
|
|
public:
|
|
uint32_t & SP_MEM_ADDR_REG;
|
|
uint32_t & SP_DRAM_ADDR_REG;
|
|
uint32_t & SP_RD_LEN_REG;
|
|
uint32_t & SP_WR_LEN_REG;
|
|
uint32_t & SP_STATUS_REG;
|
|
uint32_t & SP_DMA_FULL_REG;
|
|
uint32_t & SP_DMA_BUSY_REG;
|
|
uint32_t & SP_SEMAPHORE_REG;
|
|
uint32_t & SP_PC_REG;
|
|
uint32_t & SP_IBIST_REG;
|
|
|
|
private:
|
|
SPRegistersReg();
|
|
SPRegistersReg(const SPRegistersReg&);
|
|
SPRegistersReg& operator=(const SPRegistersReg&);
|
|
};
|
|
|
|
class CRegisters;
|
|
class CMipsMemoryVM;
|
|
class CN64System;
|
|
|
|
class SPRegistersHandler :
|
|
public MemoryHandler,
|
|
public SPRegistersReg,
|
|
private CGameSettings,
|
|
private CDebugSettings,
|
|
private CLogging
|
|
{
|
|
public:
|
|
SPRegistersHandler(CN64System & N64System, CMipsMemoryVM & MMU, CRegisters & Reg);
|
|
bool Read32(uint32_t Address, uint32_t & Value);
|
|
bool Write32(uint32_t Address, uint32_t Value, uint32_t Mask);
|
|
|
|
private:
|
|
SPRegistersHandler();
|
|
SPRegistersHandler(const SPRegistersHandler &);
|
|
SPRegistersHandler & operator=(const SPRegistersHandler &);
|
|
|
|
void SP_DMA_READ();
|
|
|
|
CN64System & m_System;
|
|
CMipsMemoryVM & m_MMU;
|
|
CRegisters & m_Reg;
|
|
uint32_t & m_RspIntrReg;
|
|
uint32_t & m_PC;
|
|
};
|