Пример #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 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;
        }
Пример #3
0
        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();
            }
        }
Пример #4
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);
            }
        }
Пример #5
0
        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();
        }
Пример #6
0
        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);
            }
        }