/****************************************************************************
*                                                                           *
* Project 64 - A Nintendo 64 emulator.                                      *
* http://www.pj64-emu.com/                                                  *
* Copyright (C) 2012 Project64. All rights reserved.                        *
*                                                                           *
* License:                                                                  *
* GNU/GPLv2 http://www.gnu.org/licenses/gpl-2.0.html                        *
*                                                                           *
****************************************************************************/
#pragma once

class CPifRamSettings
{
protected:
	CPifRamSettings();
	virtual ~CPifRamSettings();
	
	inline bool  bShowPifRamErrors    ( void ) const { return m_bShowPifRamErrors; }

private:
	static void RefreshSettings ( void * );
	
	static bool  m_bShowPifRamErrors;

	static int  m_RefCount;

};

class CPifRam :
	private CPifRamSettings,
	private CEeprom
{
public:
	public:
	     CPifRam      ( bool SavesReadOnly );
		~CPifRam      ( void );

	void Reset        ( void );

	void PifRamWrite  ( void );
	void PifRamRead   ( void );

	void SI_DMA_READ  ( void );
	void SI_DMA_WRITE ( void );

protected:
	BYTE m_PifRom[0x7C0];
	BYTE m_PifRam[0x40];

private:
	#define CHALLENGE_LENGTH 0x20
	void ProcessControllerCommand ( int Control, BYTE * Command );
	void ReadControllerCommand    ( int Control, BYTE * Command );
	void LogControllerPakData     ( char * Description );
	void n64_cic_nus_6105		  (char challenge[], char response[], int length);
};
