示例#1
0
        // write byte
        public void wb(ushort address, byte value)
        {
            if (address >= Address.Audio_L && address <= Address.Audio_H)
            {
                //audio.wb(address, value);
                return;
            }
            if (address <= Address.RomBank_H)
            {
                mbc.wb(address, value);
                return;
            }
            if ((address >= Address.RamBank_L) && (address <= Address.RamBank_H))
            {
                mbc.rwb((ushort)(address - Address.RamBank_L), value);
                return;
            }
            if (address == Address.Dma)
            {
                TransfertDMA(value);
                return;
            }
            if (address == Address.DividerTimer)
            {
                TrapDividerRegister();
                return;
            }

            byte[] memory;
            ushort resolvedAddress;

            ResolveMemoryAddress(address, out memory, out resolvedAddress);

            memory [resolvedAddress] = value;
        }
示例#2
0
        // write byte
        public void wb(ushort address, byte value)
        {
            switch (address)
            {
            case Address.Lcdc:
                gpu.lcdc = value;
                return;

            case Address.Stat:
                gpu.stat = value;
                return;

            case Address.Scy:
                gpu.scy = value;
                return;

            case Address.Scx:
                gpu.scx = value;
                return;

            case Address.Ly:
                gpu.ly = value;
                return;

            case Address.Lyc:
                gpu.lyc = value;
                return;

            case Address.Wy:
                gpu.wy = value;
                return;

            case Address.Wx:
                gpu.wx = value;
                return;

            case Address.Bgp:
                gpu.bgp = value;
                return;

            case Address.Obp0:
                gpu.obp0 = value;
                return;

            case Address.Obp1:
                gpu.obp1 = value;
                return;

            // keypad
            case Address.Keypad:
                keypad.memory = value;
                UnityEngine.Debug.LogFormat("W {0} {1}", Convert.ToString(value, 2).PadLeft(8, '0'), Convert.ToString(keypad.memory, 2).PadLeft(8, '0'));

                return;

            // timer
            case Address.TimerCounter:
                timer.counter = value;
                return;

            case Address.TimerDivider:
                TrapDividerRegister();
                return;

            case Address.TimerController:
                timer.controller = value;
                return;

            case Address.TimerModulator:
                timer.modulator = value;
                return;

            // interrupt
            case Address.InterruptRequest:
                ir = value;
                return;

            case Address.InterruptEnable:
                ie = value;
                return;

            // dma
            case Address.Dma:
                TransfertDma(value);
                return;
            }

            if (address >= Address.Apu_L && address <= Address.Apu_M)
            {
                //apu.wb(address, value);
                return;
            }
            if ((address >= Address.RomBank_L) && (address <= Address.RomBank_M))
            {
                mbc.wb((ushort)(address - Address.RomBank_L), value);
                return;
            }
            if ((address >= Address.RamBank_L) && (address <= Address.RamBank_M))
            {
                mbc.rwb((ushort)(address - Address.RamBank_L), value);
                return;
            }

            byte[] memory;
            ushort resolvedAddress;

            ResolveMemoryAddress(address, out memory, out resolvedAddress);

            memory [resolvedAddress] = value;
        }