//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); } } }
//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; } }