private SimulationModel ExecuteTest(Register16Table reg, bool write)
        {
            var ob = OpcodeByte.New(x: 1, z: 3,
                                    q: (byte)(write ? 0: 1), p: (byte)reg);

            var cpuZ80 = new CpuZ80();
            var buffer = write ?
                         new byte[] { 0xED, ob.Value, AddressLo, AddressHi, 0, 0, 0 }:
            new byte[] { 0xED, ob.Value, AddressLo, AddressHi, 0, ExpectedLo, ExpectedHi };
            var model = cpuZ80.Initialize(buffer);

            cpuZ80.FillRegisters();
            if (write)
            {
                if (reg == Register16Table.SP)
                {
                    cpuZ80.Registers.SP = Expected;
                }
                else
                {
                    cpuZ80.Registers[reg] = Expected;
                }
            }

            model.ClockGen.SquareWave(20);

            Console.WriteLine(model.LogicAnalyzer.ToWaveJson());

            return(model);
        }
Exemplo n.º 2
0
 private void AddIY16(Register16Table reg16)
 {
     if (reg16 == Register16Table.HL)
     {
         Registers.IY = Die.Alu.Add16(Registers.IY, Registers.IY);
     }
     else
     {
         Registers.IY = Die.Alu.Add16(Registers.IY, Registers[reg16]);
     }
 }
 private void AddIX16(Register16Table reg16)
 {
     if (reg16 == Register16Table.HL)
     {
         Registers.IX = Cpu.Alu.Add16(Registers.IX, Registers.IX);
     }
     else
     {
         Registers.IX = Cpu.Alu.Add16(Registers.IX, Registers[reg16]);
     }
 }
Exemplo n.º 4
0
        public ushort this[Register16Table register]
        {
            get
            {
                switch (register)
                {
                case Register16Table.BC:
                    return(BC);

                case Register16Table.DE:
                    return(DE);

                case Register16Table.HL:
                    return(HL);

                case Register16Table.SP:
                    return(SP);
                }

                throw new ArgumentException();
            }
            set
            {
                switch (register)
                {
                case Register16Table.BC:
                    BC = value;
                    break;

                case Register16Table.DE:
                    DE = value;
                    break;

                case Register16Table.HL:
                    HL = value;
                    break;

                case Register16Table.SP:
                    SP = value;
                    break;
                }
            }
        }
        private static CpuZ80 ExecuteTest(Register16Table reg16, bool carry)
        {
            var ob = OpcodeByte.New(x: 1, z: 2, q: 0, p: (byte)reg16);

            var cpuZ80 = new CpuZ80();

            byte[] buffer = new byte[] { 0xED, ob.Value };

            var model = cpuZ80.Initialize(buffer);

            cpuZ80.Registers.Flags.C = carry;
            cpuZ80.FillRegisters(hl: Value);
            cpuZ80.Registers[reg16] = ValueToSub;

            model.ClockGen.SquareWave(15);

            Console.WriteLine(model.LogicAnalyzer.ToWaveJson());

            return(cpuZ80);
        }
Exemplo n.º 6
0
 private void AddCarry16(Register16Table reg16)
 {
     Registers.HL = Die.Alu.Add16(Registers.HL, Registers[reg16], addCarry: true);
 }
Exemplo n.º 7
0
 private void Add16(Register16Table reg16)
 {
     Registers.HL = Die.Alu.Add16(Registers.HL, Registers[reg16]);
 }