예제 #1
0
        /// <summary><para>Ejecuta el primer subciclo de la microinstrucción.
        /// </para>
        /// <para>En él, lo que hace es cargar en RMC la microinstrucción
        /// situada en la dirección indicada por RDC en la memoria de control.
        /// </para></summary>
        /// <exception cref="SimulacionFinalizadaException> cuando la
        /// simulación ha finalizado (se ha cargado la instrucción
        /// HALT = 0xF800 en el registro IR).</exception>

        private void EjecutarSubciclo1()
        {
            if ((registros.LeerRegistro(BancoRegistros.IR) & 0xF800) == 0xF800)
            {
                throw new SimulacionFinalizadaException("Fin normal");
            }

            //Leemos la siguiente microinstrucción de la memoria de control
            rmc = memoriaControl.LeerMicroInstruccion(RDC);

            repRdd.DibujarCiclo1(rmc, RDC);
        }
예제 #2
0
        /// <summary>Actualiza el contenido del registro MBR y de
        /// la memoria según la secuencia de mInstrucciones.</summary>
        /// <param name="inst"></param>

        private void ActualizarPeticionesMemoria(MicroInstruccion inst)
        {
            if ((inst.GetMAR() == 1) || (inst.GetMBR() == 1))
            {
                _petLecturaMemoria   = 0;
                _petEscrituraMemoria = 0;
            }

            if ((inst.GetWR() == 1) && (inst.GetRD() == 1))
            {
                _petEscrituraMemoria = 0;
                _petLecturaMemoria   = 0;
            }
            else if (inst.GetWR() == 1)
            {
                _petEscrituraMemoria++;
                _petLecturaMemoria = 0;
            }
            else if (inst.GetRD() == 1)
            {
                _petLecturaMemoria++;
                _petEscrituraMemoria = 0;
            }
            else
            {
                _petLecturaMemoria   = 0;
                _petEscrituraMemoria = 0;
            }
            if (_petLecturaMemoria > 1)
            {
                _mbr = mp.LeerDato(_mar);
            }
            if (_petEscrituraMemoria > 1)
            {
                mp.EscribirDato(_mar, _mbr);
            }
        }