//////////////////////////////////////////////////////////////////////////
// Mapper076  Namcot 109 (女神転生)                                     //
//////////////////////////////////////////////////////////////////////////
using static VirtualNes.MMU;
using static VirtualNes.Core.CPU;
using INT = System.Int32;
using BYTE = System.Byte;
using System;
using Codice.CM.Client.Differences;

namespace VirtualNes.Core
{
	public class Mapper076 : Mapper
	{
		BYTE reg;
		public Mapper076(NES parent) : base(parent)
		{
		}

		public override void Reset()
		{
			SetPROM_32K_Bank(0, 1, PROM_8K_SIZE - 2, PROM_8K_SIZE - 1);

			if (VROM_1K_SIZE >= 8)
			{
				SetVROM_8K_Bank(0);
			}
		}

		//void Mapper076::Write(WORD addr, BYTE data)
		public override void Write(ushort addr, byte data)
		{
			switch (addr)
			{
				case 0x8000:
					reg = data;
					break;
				case 0x8001:
					switch (reg & 0x07)
					{
						case 2:
							SetVROM_2K_Bank(0, data);
							break;
						case 3:
							SetVROM_2K_Bank(2, data);
							break;
						case 4:
							SetVROM_2K_Bank(4, data);
							break;
						case 5:
							SetVROM_2K_Bank(6, data);
							break;
						case 6:
							SetPROM_8K_Bank(4, data);
							break;
						case 7:
							SetPROM_8K_Bank(5, data);
							break;
					}
					break;
			}
		}

		//void Mapper076::SaveState(LPBYTE p)
		public override void SaveState(byte[] p)
		{
			p[0] = reg;
		}

		//void Mapper076::LoadState(LPBYTE p)
		public override void LoadState(byte[] p)
		{
			reg = p[0];
		}


		public override bool IsStateSave()
		{
			return true;
		}
	}
}