示例#1
0
        protected int Jmp(int opcode)
        {
            IOperand op = cpu.ResolveSrcEA((opcode >> 3) & 0x07, (opcode & 0x07), Size.SizeLong);

            cpu.SetPC(op.GetComputedAddress());
            return(TIMING[op.Index()]);
        }
示例#2
0
        protected int MoveaWord(int opcode)
        {
            IOperand src = cpu.ResolveSrcEA((opcode >> 3) & 0x07, opcode & 0x07, Size.Word);

            cpu.SetAddrRegisterLong((opcode >> 9) & 0x07, src.GetWordSigned());
            return(MOVE.ShortExecutionTime[src.Index()][1]);
        }
示例#3
0
        protected int MoveaLong(int opcode)
        {
            IOperand src = cpu.ResolveSrcEA((opcode >> 3) & 0x07, opcode & 0x07, Size.SizeLong);

            cpu.SetAddrRegisterLong((opcode >> 9) & 0x07, src.GetLong());
            return(MOVE.LongExecutionTime[src.Index()][1]);
        }
示例#4
0
        protected int Lea(int opcode)
        {
            IOperand src = cpu.ResolveSrcEA((opcode >> 3) & 0x07, opcode & 0x07, Size.SizeLong);

            cpu.SetAddrRegisterLong((opcode >> 9) & 0x07, src.GetComputedAddress());
            return(TIMING[src.Index()]);
        }
示例#5
0
        protected int Pea(int opcode)
        {
            IOperand src = cpu.ResolveSrcEA((opcode >> 3) & 0x07, opcode & 0x07, Size.SizeLong);

            cpu.PushLong(src.GetComputedAddress());
            return(TIMING[src.Index()]);
        }
示例#6
0
        protected int MoveWord(int opcode)
        {
            IOperand src = cpu.ResolveSrcEA((opcode >> 3) & 0x07, opcode & 0x07, Size.Word);
            IOperand dst = cpu.ResolveDstEA((opcode >> 6) & 0x07, (opcode >> 9) & 0x07, Size.Word);
            int      s   = src.GetWord();

            dst.SetWord(s);
            cpu.CalcFlags(InstructionType.MOVE, s, s, s, Size.Word);
            return(ShortExecutionTime[src.Index()][dst.Index()]);
        }
示例#7
0
        protected int MovemWordR2m(int opcode)
        {
            int      reglist = cpu.FetchPCWord();
            IOperand dst     = cpu.ResolveDstEA((opcode >> 3) & 0x07, opcode & 0x07, Size.Word);
            int      address = dst.GetComputedAddress();
            int      count;

            if (((opcode >> 3) & 0x07) == 4)
            {
                count = PutMultipleWordPreDec(opcode & 0x07, reglist, address);
            }
            else
            {
                count = PutMultipleWord(reglist, address);
            }

            return(R2M_Timing[dst.Index()] + (count << 2));
        }
示例#8
0
        protected int MovemWordM2r(int opcode)
        {
            int      reglist = cpu.FetchPCWord();
            IOperand src     = cpu.ResolveSrcEA((opcode >> 3) & 0x07, opcode & 0x07, Size.Word);
            int      address = src.GetComputedAddress();
            int      count;

            if (((opcode >> 3) & 0x07) == 3)
            {
                count = GetMultipleWordPostInc(opcode & 0x07, reglist, address);
            }
            else
            {
                count = GetMultipleWord(reglist, address);
            }

            return(M2R_Timing[src.Index()] + (count << 2));
        }