// BKMSTD10.h: interface for the CBKMSTD10 class.
//

#pragma once

#include "BKMPIDevice.h"

constexpr auto BRD_10_FOCAL_BNK = 5;
constexpr auto BRD_10_CUSTOM_BNK = 6;
constexpr auto BRD_10_TESTS_BNK = 7;
constexpr auto MSTD10RomListSize = 3;

class CBKMSTD10 : public CBKMPIDevice
{
		DECLARE_DYNAMIC(CBKMSTD10)
	protected:

		// Инициализация памяти
		virtual void        MemoryManager() override;
		virtual bool        OnInitDevice() override;

	public:
		CBKMSTD10();
		virtual ~CBKMSTD10() override;

		virtual BK_DEV_MPI GetBoardModel() const override
		{
			return BK_DEV_MPI::MSTD10;
		}

		virtual bool        InitDevice(const uint16_t addrStart) override;

		// Методы Set/Get byte/word - выход: false - надо делать throw
		virtual bool        GetByteT(const uint16_t addr, uint8_t *pValue, int &nTC) override;
		virtual bool        GetWordT(const uint16_t addr, uint16_t *pValue, int &nTC) override;
		virtual bool        SetByteTInternal(const uint16_t addr, uint8_t value, int &nTC) override;
		virtual bool        SetWordTInternal(const uint16_t addr, uint16_t value, int &nTC) override;

		// Методы для загрузки и сохранения состояния эмулятора
		virtual bool        RestoreMemory(DWORD id, CMSFManager *pMsf) override;
		virtual bool        RestoreMemoryMap(DWORD id, CMSFManager *pMsf) override;
};

/*
Блок МСТД
Организация массива памяти (делается один массив в 64Кб чтобы не делать лишних действий)
А из них используется только две страницы

32кб: пусто
000000--банк 0 ---страница 0 --- не используется
020000--банк 1 ---страница 1 --- не используется
040000--банк 2 ---страница 2 --- не используется
060000--банк 3 ---страница 3 --- не используется
32кб: ПЗУ
100000--банк 4 ---страница 4 --- не используется
120000--банк 5 ---страница 5---- фокал Focal.rom
140000--банк 6 ---страница 6 --- дырка
160000--банк 7 ---страница 7---- тесты мстд bk10_019_mstd.rom

Ничего никуда не ремапится. Лишний расход 48кб
*/

