예제 #1
0
        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);
                }
            }
        }
예제 #2
0
 public void ActivarDepuracion(int linea)
 {
     tipoEjecucion = TipoEjecucion.PasoPaso;
     ActualizarRegistros();
     ActualizarMemoriaDatos(MaquinaTiny.RAM_SIZE);
     lineaOperacionAterior = linea - 1;
     ResaltarFondoActivarLinea(lineaOperacionAterior, Color.CadetBlue);
     toggleMenu();
 }
예제 #3
0
        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);
            }
        }