private void assembleToolStripMenuItem_Click(object sender, EventArgs e) { SimulatorDisplayQueue.Clear(); SimulatorList.ListToExecute.Clear(); SimulatorParameters.ResetCounter(); txtBoxMachineCode.Clear(); txtBoxErrors.Clear(); for (int i = 0; i < txtBoxMnemonics.Lines.Count(); i++) { string text = txtBoxMnemonics.Lines[i]; if (!String.IsNullOrEmpty(text)) { try { text = TextParser.LineParse(text); txtBoxMachineCode.AppendText(text); } catch (InstructionException ex) { FormatErrorText(ex.Message, i); } catch (ParameterException ex) { FormatErrorText(ex.Message, i); } txtBoxMachineCode.AppendText(Environment.NewLine); } } }
private static void sub(SimulatorParameters Sim) { int _rs = Convert.ToInt32(Sim.rs_value); int _rt = Convert.ToInt32(Sim.rt_value); Sim.rd_value = Convert.ToString(_rs - _rt); Sim.immediate = ""; }
private static void jump(SimulatorParameters Sim) { try { Sim.immediate = Convert.ToInt32(Sim.immediate, 2).ToString(); } catch (Exception) { //in cazul instructiunilor jump adresa immediate primita in binar este //convertita in zecimal la prima executare a instructiunii si //se arunca exceptie la urmatoarele executari deoarece stringul nu mai e in binar } }
private void NewToolStripMenuItem_Click(object sender, EventArgs e) { SimulatorDisplayQueue.Clear(); SimulatorList.ListToExecute.Clear(); SimulatorParameters.ResetCounter(); DialogResult dialogResult = MessageBox.Show("Any unsaved changes will be lost. Continue?", "New File", MessageBoxButtons.YesNo); if (dialogResult == DialogResult.Yes) { txtBoxMnemonics.Clear(); txtBoxMachineCode.Clear(); txtBoxErrors.Clear(); } }
private void btnExecute_Click(object sender, EventArgs e) { SimulatorParameters sim = SimulatorList.ListToExecute[i]; if (!String.IsNullOrEmpty(sim.rt_name) && !String.Equals(TextParser.GetGenericRegisterName(), sim.rt_name)) { controls = this.Controls.Find(sim.rt_name, true); sim.rt_value = HexToDecimal(controls[0].Text); } if (!String.IsNullOrEmpty(sim.rs_name) && !String.Equals(TextParser.GetGenericRegisterName(), sim.rt_name)) { controls = this.Controls.Find(sim.rs_name, true); sim.rs_value = HexToDecimal(controls[0].Text); } try { SimulatorDictionary.Dict[sim.operation].Invoke(sim); } catch (Exception) { lblDebugger.Text = "Unimplemented instruction " + sim.operation; } if (!String.IsNullOrEmpty(sim.rd_name) && !String.Equals(TextParser.GetGenericRegisterName(), sim.rt_name)) { controls = this.Controls.Find(sim.rd_name, true); controls[0].Text = DecimalToHex(sim.rd_value); } if (String.IsNullOrEmpty(sim.immediate)) { i++; } else { i = (SimulatorList.ListToExecute.FindIndex(delegate(SimulatorParameters find) { return(DecimalToHex(find.pc.ToString()) == DecimalToHex(sim.immediate)); })); } try { pc.Text = DecimalToHex(SimulatorList.ListToExecute[i].pc); } catch (Exception ex) { lblDebugger.Text = "Reached end of instructions"; btnExecute.Enabled = false; } ColorCurrentLine(i, Color.Red); }
private static void ori(SimulatorParameters Sim) { if (!String.IsNullOrEmpty(Sim.immediate)) { Sim.immediate_as_value = Sim.immediate; Sim.immediate = null; } Sim.rd_name = Sim.rt_name; string rs_value_binary = Convert.ToString(Convert.ToInt32(Sim.rs_value), 2); if (Sim.immediate_as_value.Length != rs_value_binary.Length) { if (Sim.immediate_as_value.Length > rs_value_binary.Length) { rs_value_binary = rs_value_binary.PadLeft(Sim.immediate_as_value.Length, '0'); } else { Sim.immediate_as_value = Sim.immediate_as_value.PadLeft(rs_value_binary.Length, '0'); } } char[] immediate_as_value = Sim.immediate_as_value.ToCharArray(); char[] rs_value = rs_value_binary.ToCharArray(); char[] result_char = new char[immediate_as_value.Length]; for (int i = 0; i < result_char.Length; i++) { result_char[i] = Convert.ToChar(Convert.ToInt32(immediate_as_value[i]) | Convert.ToInt32(rs_value[i])); } string result_string = new string(result_char); while (result_string.StartsWith("0")) { result_string = result_string.Remove(0, 1); } Sim.rd_value = Convert.ToString(Convert.ToInt32(result_string, 2)); }