示例#1
0
        public byte WriteMemory8(ushort address, byte data)
        {
            if (address < 0x800)
            {
                scratchRam[0][address] = data;
            }
            else if (address < 0x1000)
            {
                scratchRam[1][address - 0x800] = data;
            }
            else if (address < 0x1800)
            {
                scratchRam[2][address - 0x1000] = data;
            }
            else if (address < 0x2000)
            {
                scratchRam[3][address - 0x1800] = data;
            }
            else if (address < 0x4000)
            {
                //address = (ushort)((address - 0x2000) % 8);
                switch (address)
                {
                case (0x2000): myPpu.ControlRegister1Write(data); break;

                case (0x2001): myPpu.ControlRegister2Write(data); break;

                case (0x2003): myPpu.SpriteRamAddressRegisterWrite(data); break;

                case (0x2004): myPpu.SpriteRamIORegisterWrite(data); break;

                case (0x2005): myPpu.VramAddressRegister1Write(data); break;

                case (0x2006): myPpu.VramAddressRegister2Write(data); break;

                case (0x2007): myPpu.VramIORegisterWrite(data); break;
                    //default: Console.WriteLine("UNKOWN CONTROL WRITE: {0}", address); break;
                }
            }
            else if (address < 0x6000)
            {
                switch (address)
                {
                case (0x4014): myPpu.SpriteRamDmaBegin(data); break;

                case (0x4016): myJoypad.Joypad1Write(data); break;

                case (0x4017): Joypad.Joypad2Write(/*data)*/); break;
                    //default: Console.WriteLine("UNKOWN WRITE: {0:x}", address); break;
                }
                if (myCartridge.Mapper == 5)
                {
                    myMapper.WritePrgRom(address, data);
                }
            }
            else if (address < 0x8000)
            {
                if (!isSaveRamReadOnly)
                {
                    saveRam[address - 0x6000] = data;
                }

                if (myCartridge.Mapper == 34)
                {
                    myMapper.WritePrgRom(address, data);
                }
            }
            else
            {
                myMapper.WritePrgRom(address, data);
            }
            return(1);
        }