Example #1
0
        /// <summary><para>Ejecuta el cuarto subciclo de la microinstrucción.
        /// </para>
        /// <para>En él:
        ///    <list type="bullet">
        ///    <item><description>
        ///    Almacenamos el contenido de SH en el banco de registros.
        ///    </description></item>
        ///    <item><description>
        ///    Si es necesario copiamos SH a MBR.
        ///    </description></item>
        ///    <item><description>
        ///    Obtenemos en RDC la dirección de la siguiente microinstrucción
        ///    a ejecutar.
        ///    </description></item>
        ///    </list>
        /// </para></summary>



        private void EjecutarSubciclo4()
        {
            if (rmc.GetMBR() == 1)
            {
                _mbr = alu.LeerResultado();
            }
            if (rmc.GetENC() == 1)
            {
                registros.EscribirRegistro(rmc.GetC(), alu.LeerResultado());
            }
            //Opciones de salto.
            if (rmc.GetFIR() == 1)
            {
                RDC = (short)((registros.LeerRegistro
                                   (BancoRegistros.IR) >> 11) & (0x1F));
            }
            else if (Bifurca(rmc.GetCOND()))
            {
                RDC = (short)rmc.GetADDR();
            }
            else
            {
                RDC++;
            }

            repRdd.DibujarCiclo4(rmc, _mbr);
        }
Example #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);
            }
        }