private void siguientePasoToolStripMenuItem_Click(object sender, EventArgs e) { if (statusCPU == CPU.EjecucionStatus.HALT) { MessageBox.Show("La ejecución del programa ha finalizado, debe reiniciarlo para continuar"); } else { //TODO: hay que hacer un try catch try { tipoEjecucion = TipoEjecucion.PasoPaso; machine.EjecutarInstruccion(); //Desmarcar la línea anterior y marcar la actual; DesmarcarLineaAnterior(); if (statusCPU == CPU.EjecucionStatus.OK && machine.IMem.Instrucciones.ContainsKey(machine.Cpu.Registros[CPU.PC_REG])) { lineaOperacionAterior = machine.IMem.Instrucciones[machine.Cpu.Registros[CPU.PC_REG]].Opcode.left - 1; ResaltarFondoActivarLinea(lineaOperacionAterior, Color.CadetBlue); } } catch (Exception ex) { statusCPU = CPU.EjecucionStatus.HALT; DesmarcarLineaAnterior(); toggleMenu(); MessageBox.Show(ex.Message, "El programa ha generado una excepción y debe detenerse", MessageBoxButtons.OK, MessageBoxIcon.Error); } } }
public Form1() { InitializeComponent(); registros = new TextBox[] { reg0, reg1, reg2, reg3, reg4, reg5, reg6, reg7 }; machine = new MaquinaTiny(); puntosInterrupcion = new List <int>(); archivoActual = ""; machine.LeerValorEvent = LeerValor; machine.MostrarValorEvent = MostrarValor; machine.ResultadoInstruccionEvent = SincronizarEstadoMaquina; machine.ActivarDepuracionEvent = ActivarDepuracion; statusCPU = CPU.EjecucionStatus.HALT; }
internal void SincronizarEstadoMaquina(CPU.ResultadoEjecucion result) { int i = result.Info; if (result.TipoAcceso == CPU.TipoOperacionAcceso.MEMORIA_CAMBIADA) { ActualizarMemoriaDatos(i); } statusCPU = result.Status; ActualizarRegistros(); if (statusCPU == CPU.EjecucionStatus.HALT) { toggleMenu(); } }
private void iniciarToolStripMenuItem_Click(object sender, EventArgs e) { try { statusCPU = CPU.EjecucionStatus.HALT; consola.Text = ""; if (archivoActual.Equals(machine.ProgramaActual)) { machine.ResetSoftware(); } else { machine.cargarPrograma(archivoActual); } LlenarMemoriaDatos(); ActualizarRegistros(); statusCPU = CPU.EjecucionStatus.OK; tipoEjecucion = TipoEjecucion.Continua; } catch (Exception ex) { StringBuilder memoryText = new StringBuilder(); foreach (string error in util.Utilidades.errorList) { memoryText.AppendLine(error); } memoryText.AppendLine(); memoryText.AppendLine("Se encontraron errores en el código"); consola.Text = memoryText.ToString(); } try { if (statusCPU == CPU.EjecucionStatus.OK) { machine.EjecutarHastaFin(puntosInterrupcion); } }catch (Exception ex) { statusCPU = CPU.EjecucionStatus.HALT; toggleMenu(); MessageBox.Show(ex.Message, "El programa ha generado una excepción y debe detenerse", MessageBoxButtons.OK, MessageBoxIcon.Error); } }
public void limpiarControles() { codigoFuente.Clear(); dMem.Rows.Clear(); lecturaActivada = false; textoLeido = ""; archivoActual = ""; puntosInterrupcion.Clear(); statusCPU = CPU.EjecucionStatus.HALT; lineaOperacionAterior = 0; consola.Clear(); for (int i = 0; i < registros.Length; i++) { registros[i].Clear(); } machine.ResetHardware(); toggleMenu(); }
private void continuarToolStripMenuItem_Click(object sender, EventArgs e) { if (statusCPU == CPU.EjecucionStatus.HALT) { MessageBox.Show("La ejecución del programa ha finalizado, debe reiniciarlo para continuar"); } //TODO: hay que hacer un try catch try { DesmarcarLineaAnterior(); machine.EjecutarHastaFin(puntosInterrupcion); } catch (Exception ex) { statusCPU = CPU.EjecucionStatus.HALT; toggleMenu(); MessageBox.Show(ex.Message, "El programa ha generado una excepción y debe detenerse", MessageBoxButtons.OK, MessageBoxIcon.Error); } }