using System.IO;

namespace MyNes.Core
{
    [BoardInfo("74161/32", 96, 1, 32)]
    internal class Mapper096 : Board
    {
    	private int flag_c;

    	internal override string Issues => MNInterfaceLanguage.IssueMapper96;

    	internal override void HardReset()
    	{
    		base.HardReset();
    		flag_c = 0;
    		Switch04KCHR(3, CHRArea.Area1000);
    	}

    	internal override void WritePRG(ref ushort address, ref byte data)
    	{
    		Switch32KPRG(data & 3, PRGArea.Area8000);
    		flag_c = (((data & 4) == 4) ? 1 : 0);
    		Switch04KCHR(3, CHRArea.Area1000);
    	}

    	internal override void OnPPUAddressUpdate(ref ushort address)
    	{
    		if ((address & 0x3FF) < 960 && (address & 0x1000) == 0)
    		{
    			Switch04KCHR(((address & 0x300) >> 8) | flag_c, CHRArea.Area0000);
    		}
    	}

    	internal override void WriteStateData(ref BinaryWriter stream)
    	{
    		base.WriteStateData(ref stream);
    		stream.Write(flag_c);
    	}

    	internal override void ReadStateData(ref BinaryReader stream)
    	{
    		base.ReadStateData(ref stream);
    		flag_c = stream.ReadInt32();
    	}
    }
}