示例#1
0
        //stores word to memory address:
        public override void Execute(uint Rn, uint Rd, Offset offst)
        {
            int EA = GetEffAddr(Rn, offst);        //((int)Rn + (U == 1 ? offst.GetValue() : -offst.GetValue())) & 0xFFFFFFFF;

            if (EA == 0x100000)
            {
                I_Console_Ref.Append((char)CPU.GetRegr(I_Reg, (int)Rd));
            }
            else
            {
                if (B == 1)
                {
                    byte b = Convert.ToByte(CPU.GetRegr(I_Reg, (int)Rd) & 0xFF);
                    I_RAM.WriteByte(b, EA);
                }
                else
                {
                    I_RAM.WriteWord(CPU.GetRegr(I_Reg, (int)Rd), EA);
                }

                if (W == 1)
                {
                    CPU.SetReg(I_Reg, (int)Rn, EA);
                }
            }
        }
示例#2
0
        //pushes register list onto stack
        public override void Execute(uint Rn, List <int> Reglist)
        {
            int EA = CPU.GetRegr(I_Reg, (int)Rn);

            EA -= (4 * Reglist.Count);

            if (W == 1)
            {
                CPU.SetReg(I_Reg, (int)Rn, EA);
            }

            foreach (int i in Reglist)
            {
                int val = CPU.GetRegr(I_Reg, i);
                I_RAM.WriteWord(val, EA);
                EA += 4;
            }
        }