コード例 #1
0
ファイル: core.cs プロジェクト: stillwwater/ava-lang
        internal static Cpu.Status FREE(Script vm)
        {
            var srx     = new SRX(vm, is_jump: false);
            int address = vm.cpu.registers[srx.dst];

            return(Heap.Free(vm, address));
        }
コード例 #2
0
ファイル: core.cs プロジェクト: stillwwater/ava-lang
        internal static Cpu.Status HALT(Script vm)
        {
            var srx         = new SRX(vm, is_jump: false);
            int status_code = vm.cpu.registers[srx.dst];

            vm.Halt(status_code);
            return(Cpu.Status.OK);
        }
コード例 #3
0
ファイル: core.cs プロジェクト: stillwwater/ava-lang
        internal static Cpu.Status NEGF(Script vm)
        {
            var   srx = new SRX(vm, is_jump: false);
            float f0  = Float32.FromInt(vm.cpu.registers[srx.dst]);

            vm.cpu.registers[srx.dst] = Float32.ToInt(-f0);
            return(Cpu.Status.OK);
        }
コード例 #4
0
ファイル: core.cs プロジェクト: stillwwater/ava-lang
        internal static Cpu.Status NEG(Script vm)
        {
            var srx = new SRX(vm, is_jump: false);
            int dst = vm.cpu.registers[srx.dst];

            vm.cpu.registers[srx.dst] = -dst;
            return(Cpu.Status.OK);
        }
コード例 #5
0
ファイル: core.cs プロジェクト: stillwwater/ava-lang
        internal static Cpu.Status ALLOC(Script vm)
        {
            var srx     = new SRX(vm, is_jump: false);
            int size    = vm.cpu.registers[srx.dst];
            int address = Heap.Alloc(vm, size);

            vm.cpu.registers[Registers.EAX] = address;
            return(Cpu.Status.OK);
        }
コード例 #6
0
ファイル: core.cs プロジェクト: stillwwater/ava-lang
        internal static Cpu.Status CVTFW(Script vm)
        {
            var   srx   = new SRX(vm, is_jump: false);
            float value = Float32.FromInt(vm.cpu.registers[srx.dst]);

            // Floor float value to convert to int
            vm.cpu.registers[srx.dst] = (int)value;
            return(Cpu.Status.OK);
        }
コード例 #7
0
ファイル: core.cs プロジェクト: stillwwater/ava-lang
        internal static Cpu.Status CVTWF(Script vm)
        {
            var srx = new SRX(vm, is_jump: false);
            // Convert word to floating point
            float value = (float)vm.cpu.registers[srx.dst];

            // Store floating point representation in int value
            vm.cpu.registers[srx.dst] = Float32.ToInt(value);
            return(Cpu.Status.OK);
        }
コード例 #8
0
ファイル: core.cs プロジェクト: stillwwater/ava-lang
        internal static Cpu.Status PUSH(Script vm)
        {
            var srx = new SRX(vm, is_jump: false);

            vm.cpu.registers[Registers.ESP] -= 1;
            int stack_ptr = vm.cpu.registers[Registers.ESP];

            int word = vm.cpu.registers[srx.dst];

            vm.WriteWord(word, stack_ptr);
            return(Cpu.Status.OK);
        }
コード例 #9
0
        private void VisualizeEnerdyButton_Click(object sender, RoutedEventArgs e)
        {
            SetUpSRXPropertirs();
            SRX = new SRX(random, SRXProperties, currentScope, false);
            var scopes = SRX.VisualizeEnergy();

            energyScope           = scopes[0];
            currentScope          = scopes[1];
            previousScope         = currentScope;
            EnergyImage.Source    = Converters.BitmapToImageSource(energyScope.StructureBitmap);
            StructureImage.Source = Converters.BitmapToImageSource(currentScope.StructureBitmap);
            EnableXRStart();
        }
コード例 #10
0
        private void StartSRXButton_Click(object sender, RoutedEventArgs e)
        {
            MCSelected  = false;
            SRXSelected = true;
            DisableCA();
            DisableMC();

            SetUpSRXPropertirs();
            this.SRX = new SRX(random, SRXProperties, currentScope, true);

            previousScope       = currentScope;
            currentScope.IsFull = false;

            dispatcherTimer.Start();
        }
コード例 #11
0
ファイル: core.cs プロジェクト: stillwwater/ava-lang
        internal static Cpu.Status POP(Script vm)
        {
            var srx       = new SRX(vm, is_jump: false);
            int stack_ptr = vm.cpu.registers[Registers.ESP];

            if (stack_ptr > Script.MAX_MEMORY)
            {
                return(Cpu.Status.STACK_UNDERFLOW);
            }

            int word = vm.ReadWord(stack_ptr);

            vm.cpu.registers[Registers.ESP] += 1;
            vm.cpu.registers[srx.dst]        = word;
            return(Cpu.Status.OK);
        }
コード例 #12
0
ファイル: core.cs プロジェクト: stillwwater/ava-lang
        internal static Cpu.Status RET(Script vm)
        {
            var srx     = new SRX(vm, is_jump: true);
            int address = vm.cpu.registers[srx.dst];

            if (address == -1)
            {
                // Returning to -1 address means the procedure
                // was called from native code, so we pause
                // then VM so that native code execution may continue.
                vm.cpu.status = Cpu.Status.OK;
                vm.cpu.eip   += SRX.SIZE;
                vm.Halt(1);
                return(Cpu.Status.OK);
            }

            vm.cpu.eip = address; // Jump to address
            return(Cpu.Status.OK);
        }