コード例 #1
0
ファイル: Program.cs プロジェクト: Rohansi/LoonyVM
        public static void Main(string[] args)
        {
            Window = new RenderWindow(new VideoMode(640, 480), "", Styles.Close);
            Window.SetFramerateLimit(60);

            Window.Closed += (sender, eventArgs) => Window.Close();

            Window.Resized += (sender, eventArgs) =>
            {
                var view = new View();
                view.Size = new Vector2f(eventArgs.Width, eventArgs.Height);
                view.Center = view.Size / 2;
                Window.SetView(view);
            };

            Machine = new VirtualMachine(512 * 1024);

            var prog = File.ReadAllBytes("bios.bin");
            for (var i = 0; i < prog.Length; i++)
                Machine.Memory[i] = prog[i];

            var kbd = new Devices.Keyboard(0x02, Window);
            Machine.Attach(kbd);

            var display = new Devices.Display(0x06, Machine, Window);
            Machine.Attach(display);

            var hdd = new Devices.HardDrive(0x08, "disk.img");
            Machine.Attach(hdd);

            var running = true;

            var stepThread = new Thread(() =>
            {
                while (running)
                {
                    Machine.Step();
                }
            });

            stepThread.Start();

            while (Window.IsOpen())
            {
                Window.DispatchEvents();

                Window.Clear();
                Window.Draw(display);
                Window.Display();
            }

            running = false;
            stepThread.Join();
            Machine.Dispose();
        }
コード例 #2
0
ファイル: Computer.cs プロジェクト: Rohansi/FPCompo11
        public void Load(ShipCode code)
        {
            Vm = new VirtualMachine(4096);

            Vm.Attach(new Timer());

            Navigation = new Navigation(Body);
            Vm.Attach(Navigation);

            Radar = new Radar(this);
            Vm.Attach(Radar);

            Engines = new Engines();
            Vm.Attach(Engines);

            Guns = new Guns();
            Vm.Attach(Guns);

            Broadcast = new Broadcast(this);
            Vm.Attach(Broadcast);

            Code = code;

            for (var i = 0; i < Code.Length; i++)
            {
                Vm.Memory[i] = Code[i];
            }

            var ptr = 8;
            var varCount = Vm.Memory.ReadInt(ptr);
            ptr += sizeof(int);

            _variables.Clear();

            for (var i = 0; i < varCount; i++)
            {
                var varAddr = ptr;
                ptr += sizeof(int);

                var varType = Vm.Memory.ReadSByte(ptr);
                ptr += sizeof(sbyte);

                _variables.Add(new Variable((VariableType)varType, varAddr));
            }

            _programLen = Code.Length;
            _programOffset = ptr;
            _programDead = false;

            for (var i = 0; i < Vm.Registers.Length; i++)
            {
                Vm.Registers[i] = 0;
            }

            Vm.SP = Vm.Memory.Length;
        }