Esempio n. 1
0
 private void loadStartMenu()
 {
     startToolStripMenuItem.DropDownItems.Clear();
     for (int i = 0; i < file.Labels.Count; i++)
     {
         LabelInst         label    = file.Labels[i];
         ToolStripMenuItem menuItem = new ToolStripMenuItem(label.Op);
         menuItem.Click += (sender, e) => run(label); // yay for syntactic sugar
         if (i < FKeys.Length)
         {
             menuItem.ShortcutKeys = Keys.Control | FKeys[i];
         }
         startToolStripMenuItem.DropDownItems.Add(menuItem);
     }
 }
Esempio n. 2
0
        private bool run(LabelInst label)
        {
            if (InitStack == null)
            {
                MessageBox.Show("Initial stack has not been set yet!", "StackFish", MessageBoxButtons.OK, MessageBoxIcon.Warning);
                return(false);
            }

            // Recreate return address to rename callee to current label & set return address -1
            StackItem lastItem = InitStack[InitStack.Count - 1];

            if (lastItem is ReturnAddress)
            {
                ReturnAddress ra = lastItem as ReturnAddress;
                InitStack[InitStack.Count - 1] = new ReturnAddress(ra.CallerName, label.Name, -1);
            }

            // Create simulator
            this.simulator = new Simulator(file, InitStack); // TODO initial registers
            simulator.OnInstructionReady          += Simulator_OnInstructionReady;
            simulator.Registers.OnRegisterChanged += Registers_OnRegisterChanged;
            simulator.Registers.OnPointerChanged  += Registers_OnPointerChanged;
            simulator.Registers.OnFlagChanged     += Registers_OnFlagChanged;
            simulator.Stack.OnStackChanged        += Stack_OnStackChanged;
            simulator.Start(label.Index);

            // Update controls
            startToolStripMenuItem.Visible   = false;
            runningToolStripMenuItem.Visible = true;
            updateRegisters();
            updateFlags();
            drawStack();
            executed = 0;
            updateExecuted();
            setStatus("Started at " + label.Name + "! Press F5 to step forward, Shift+F5 to step backward");
            return(true);
        }