Beispiel #1
0
        public override void Invoke(AsmCommand cmd, VirtualMachine vm)
        {
            var add_left  = vm.Register[(Registers)(int)cmd[0]];
            var add_right = vm.Register[(Registers)(int)cmd[1]];

            vm.Register[Registers.ACC] = add_left + add_right;
        }
Beispiel #2
0
        public override void Invoke(AsmCommand cmd, VirtualMachine vm)
        {
            var fromReg = (Registers)(int)cmd[0];
            var toReg   = (Registers)(int)cmd[1];

            vm.Register[toReg] = vm.Register[fromReg];
        }
Beispiel #3
0
        public override void Invoke(AsmCommand cmd, VirtualMachine vm)
        {
            var in_addr = (int)cmd[0];
            var in_reg  = (Registers)(int)cmd[1];

            PortMappedDeviceManager.Read(in_addr, in_reg, vm);
        }
Beispiel #4
0
        public override void Invoke(AsmCommand cmd, VirtualMachine vm)
        {
            var out_addr  = (int)cmd[0];
            var out_value = (int)cmd[1];

            PortMappedDeviceManager.Write(out_addr, out_value, vm);
        }
Beispiel #5
0
        public override void Invoke(AsmCommand cmd, VirtualMachine vm)
        {
            var to   = cmd[0];
            var rval = vm.Stack.Pop();

            vm.Register[(Registers)to] = rval;
        }
Beispiel #6
0
        public void ParseInstruction(BinaryReader r)
        {
            var cmd = new AsmCommand();

            cmd.OpCode = (OpCode)r.ReadInt32();

            var argCount = r.ReadInt32();

            Register[Registers.IPR] += sizeof(int) * 2;

            for (int i = 0; i < argCount; i++)
            {
                var arg = new AsmCommandArg();
                arg.Value = r.ReadInt32();
                Register[Registers.IPR] += sizeof(int);

                cmd.Args.Add(arg);
            }

            if (!Debugger.HasBreakPoint(Register[Registers.IPR]))
            {
                if (!RunInstruction(cmd))
                {
                    Register[Registers.ERR] = 1;
                }
            }
        }
Beispiel #7
0
        public override void Invoke(AsmCommand cmd, VirtualMachine vm)
        {
            var reg = (int)cmd[0];
            var val = cmd[1];

            vm.Register[(Registers)reg] = (int)val;
        }
Beispiel #8
0
        public override void Invoke(AsmCommand cmd, VirtualMachine vm)
        {
            var cll = (int)cmd[0];

            vm.Stack.PushRegisters(vm.Register);
            vm.Register[Registers.IPR] = cll;
        }
Beispiel #9
0
        public override void Invoke(AsmCommand cmd, VirtualMachine vm)
        {
            var neq_f = (Registers)(int)cmd[0];
            var neq_s = (Registers)(int)cmd[1];

            vm.Register[Registers.BRR] = neq_f != neq_s ? 1 : 0;
        }
Beispiel #10
0
        public override void Invoke(AsmCommand cmd, VirtualMachine vm)
        {
            var e_addr = (int)cmd[0];

            if (vm.Register[Registers.BRR] != 0)
            {
                vm.Register[Registers.IPR] = e_addr;
            }
        }
Beispiel #11
0
        public override void Invoke(AsmCommand cmd, VirtualMachine vm)
        {
            var startIndex = (int)cmd[0];

            var section = vm.Assembly[AssemblySections.ReadOnly];
            var value   = BitConverter.ToInt32(section.Raw, startIndex);

            vm.Stack.Push(value);
        }
Beispiel #12
0
        public override void Invoke(AsmCommand cmd, VirtualMachine vm)
        {
            var startIndex = (int)cmd[0];
            var reg        = (Registers)(int)cmd[1];

            var section = vm.Assembly[AssemblySections.ReadOnly];
            var value   = BitConverter.ToInt32(section.Raw, startIndex);

            vm.Register[reg] = value;
        }
Beispiel #13
0
        private bool RunInstruction(AsmCommand cmd)
        {
            if (Instructions.ContainsKey(cmd.OpCode))
            {
                Instructions[cmd.OpCode].Invoke(cmd, this);
            }
            else
            {
                throw new Exception($"Instructon '{Enum.GetName(typeof(OpCode), cmd.OpCode)}' not found");
            }

            return(true);
        }
Beispiel #14
0
        public override void Invoke(AsmCommand cmd, VirtualMachine vm)
        {
            var jmp_index = (int)cmd[0];

            if (jmp_index < 0)
            {
                vm.Register[Registers.IPR] -= jmp_index;
            }
            else
            {
                vm.Register[Registers.IPR] += jmp_index;
            }
        }
Beispiel #15
0
 public abstract void Invoke(AsmCommand cmd, VirtualMachine vm);
Beispiel #16
0
 public override void Invoke(AsmCommand cmd, VirtualMachine vm)
 {
     vm.Stack.PopRegisters(vm.Register);
 }
			public Command(AsmCommand command)
			{
				this.name = command.Target;
				args = new string[command.OpCount][];
				for (int i = 0; i < command.OpCount; i++)
				{
					args[i] = new string[command.GetOp(i).TokenCount];
					for (int t = 0; t < command.GetOp(i).TokenCount; t++)
						args[i][t] = command.GetOp(i).GetToken(t);
				}
			}
Beispiel #18
0
        public override void Invoke(AsmCommand cmd, VirtualMachine vm)
        {
            var addr = (int)cmd[0];

            vm.Register[Registers.IPR] = addr;
        }
Beispiel #19
0
        public override void Invoke(AsmCommand cmd, VirtualMachine vm)
        {
            var interrupt = (int)cmd[0];

            InterruptTable.Interrupt(interrupt, vm);
        }
Beispiel #20
0
        public override void Invoke(AsmCommand cmd, VirtualMachine vm)
        {
            var push_lit = (int)cmd[0];

            vm.Stack.Push(push_lit);
        }
Beispiel #21
0
        public override void Invoke(AsmCommand cmd, VirtualMachine vm)
        {
            var from = (int)cmd[0];

            vm.Stack.Push(vm.Register[(Registers)from]);
        }
Beispiel #22
0
        public override void Invoke(AsmCommand cmd, VirtualMachine vm)
        {
            var reg = (Registers)(int)cmd[0];

            vm.Register[reg]--;
        }