// rev 1.03
#pragma once
#include "qbus_device.h"

/*
Модуль памяти, которая не обрабатывается ВП1-037
Это как правило ПЗУ. Но пока ОЗУ, для того, чтобы тест 791404 проходил
*/


constexpr auto MEM_SIZE10_B = 072000;
constexpr auto MEM_SIZE11_B = 032000;

class QBUS_Memory10 : public QBUS_Device
{
		friend class CDebugger;

	protected:
		size_t          m_nMemStart;
		size_t          m_nMemEnd;
		size_t          m_nMemSize;
		//массив ячеек памяти
		union
		{
			uint16_t m_memw[MEM_SIZE10_B / 2];
			uint8_t  m_memb[MEM_SIZE10_B];
		};

		/* дешифрация адреса
		выход:  true - адрес принадлежит устройству
		        false - не принадлежит
		*/
		virtual bool    DecodeAddr() override;
		virtual bool    WriteOp() override; //операция производимая при операции записи
		virtual bool    ReadOp() override; //операция производимая при операции чтения
		virtual bool    InitOp() override
		{
			return true;    //инициализации нет, т.е. делать нечего
		}

		QBUS_Memory10(size_t nStart, size_t nSizeB);

	public:
		QBUS_Memory10();
		virtual ~QBUS_Memory10() override;
		virtual void    AttachDebugger(CDebugger *pDbg);
};

class QBUS_Memory11 : public QBUS_Memory10
{
	public:
		QBUS_Memory11();
		virtual ~QBUS_Memory11() override;
};

