#pragma once

#include "FDDStd326Mem.h"

#include "HDD.h"

class CFDD_Samara :
	public CFDDStd326Mem
{
		struct CustomData_t
		{
			bool b10; // флаг, что подключено к БК10
		};

		CATA_IDE        m_ATA_IDE;
		CustomData_t    m_sCustom;

	protected:
		virtual void        MemoryManager() override;
		virtual bool        OnInitDevice() override;

	public:
		CFDD_Samara();
		virtual ~CFDD_Samara() override;
		virtual BK_DEV_MPI  GetBoardModel() override;

		// Virtual method called after reset command
		virtual void        OnReset() override;
		// Методы, эмулирующие поведение регистров
		virtual bool        GetSystemRegister(register uint16_t addr, register void *pDst, register bool bByteOperation = false);
		virtual bool        SetSystemRegister(register uint16_t addr, register uint16_t value, register bool bByteOperation = false);

		// Methods for Set/Get byte/word
		virtual bool        GetByteT(register uint16_t addr, register uint8_t *pValue, int &nTC) override;
		virtual bool        GetWordT(register uint16_t addr, register uint16_t *pValue, int &nTC) override;
		virtual bool        SetByteT(register uint16_t addr, register uint8_t value, int &nTC) override;
		virtual bool        SetWordT(register uint16_t addr, register uint16_t value, int &nTC) override;

		virtual bool        RestoreCustomData(DWORD id, CMSFManager *pMsf) override;

		virtual void        DetachDrives() override;
		virtual void        AttachDrives() override;

		bool                WriteHDDRegisters(register uint16_t num, register uint16_t data);     // запись в регистры HDD
		bool                ReadHDDRegisters(register uint16_t num, register uint16_t &data);     // чтение из регистров HDD
		uint16_t            ReadDebugHDDRegisters(int nDrive, HDD_REGISTER num, bool bReadMode); // отладочное чтение из регистров HDD
};

