コード例 #1
0
        public void TestToHexString()
        {
            MicroInstruccion mic = new MicroInstruccion(0x001A0A000600);

            Assert.AreEqual("001A 0A00 0600", mic.ToHexString());
            mic = new MicroInstruccion(0);
            Assert.AreEqual("0000 0000 0000", mic.ToHexString());
            mic = new MicroInstruccion(0x805300000400);
            Assert.AreEqual("8053 0000 0400", mic.ToHexString());
            mic = new MicroInstruccion(0x000000002000);
            Assert.AreEqual("0000 0000 2000", mic.ToHexString());
            mic = new MicroInstruccion(0x001060000000);
            Assert.AreEqual("0010 6000 0000", mic.ToHexString());
        }
コード例 #2
0
        /// <summary>Activa los elementos activos durante el subciclo 3.
        /// </summary>
        /// <param name="mic">La microinstrucción en ejecución.</param>
        /// <param name="vSH">El valor del registro SH.</param>
        /// <param name="vMAR">El valor del registro MAR.</param>
        /// <param name="vMBR">El valor del registro MBR.</param>
        /// <param name="valorC">El valor de la salida C de la ALU.</param>
        /// <param name="valorN">El valor de la salida N de la ALU.</param>
        /// <param name="valorZ">El valor de la salida Z de la ALU.</param>

        public void DibujarCiclo3
            (MicroInstruccion mic, short vSH, short vMAR,
            short vMBR, int valorC, int valorN, int valorZ)
        {
            PintarMicro(mic);
            etiqueta_ciclos.SetText("Ciclo:" + instruccion + " Subciclo 3");
            busA.Apagar();
            busB.Apagar();
            regs[mic.GetA()].Apagar();
            regs[mic.GetB()].Apagar();
            sh.Encender();

            mbr.SetText("MBR " + Conversiones.ToHexString(vMBR));
            mar.SetText("MAR " + Conversiones.ToHexString(vMAR));
            sh.SetText("SH " + Conversiones.ToHexString(vSH));
            et_s0.SetText("S2-S0 " +
                          Conversiones.ToBinaryString(mic.GetSH(), 3));
            et_a0.SetText("A0 " +
                          Conversiones.ToBinaryString(mic.GetAMUX(), 1));
            et_f0.SetText("F3-F0 " +
                          Conversiones.ToBinaryString(mic.GetALU(), 4));
            et_c.SetText("C " + valorC);
            et_n.SetText("N " + valorN);
            et_z.SetText("Z " + valorZ);


            if (mic.GetMAR() == 1)
            {
                //Activamos el cable que va de bufferB a MAR
                mar.Encender();
                cable_bufferB_mar.Encender();
            }
            if (mic.GetAMUX() == 1)
            {
                cable_mbr_mux.Encender();
                mbr.Encender();
            }
            else
            {
                cable_bufferA_mux.Encender();
            }
            cable_bufferB_alu.Encender();
            cable_alu_sh.Encender();
            alu.Encender();
            mux.Encender();
            cable_mux_alu.Encender();

            ActualizarTodo();
        }
コード例 #3
0
        /// <summary>Establece el texto de etiqueta_rmc con el contenido
        /// de la microinstrucción que se le pasa como parámetro.
        /// </summary>
        /// <param name="mic">La microinstruccion a escribir.</param>

        private void PintarMicro(MicroInstruccion mic)
        {
            etiqueta_rmc.SetText(
                "mInst = " + mic.ToHexString() +
                "\nAMUX=" + Conversiones.ToBinaryString(mic.GetAMUX(), 1) +
                "\nCOND=" + Conversiones.ToBinaryString(mic.GetCOND(), 3) +
                "\nSH=" + Conversiones.ToBinaryString(mic.GetSH(), 3) +
                "\nMBR=" + Conversiones.ToBinaryString(mic.GetMBR(), 1) +
                "\nMAR=" + Conversiones.ToBinaryString(mic.GetMAR(), 1) +
                "\nRD=" + Conversiones.ToBinaryString(mic.GetRD(), 1) +
                "\nWR=" + Conversiones.ToBinaryString(mic.GetWR(), 1) +
                "\nENC=" + Conversiones.ToBinaryString(mic.GetENC(), 1) +
                "\nC=" + Conversiones.ToBinaryString(mic.GetC(), 4) +
                "\nB=" + Conversiones.ToBinaryString(mic.GetB(), 4) +
                "\nA=" + Conversiones.ToBinaryString(mic.GetA(), 4) +
                "\nADDR=" + Conversiones.ToBinaryString(mic.GetADDR(), 10) +
                "\nFIR=" + Conversiones.ToBinaryString(mic.GetFIR(), 1) +
                "\nALU=" + Conversiones.ToBinaryString(mic.GetALU(), 4));
        }
コード例 #4
0
        /// <summary>Activa los elementos activos durante el subciclo 2.
        /// </summary>
        /// <param name="mic">La microinstrucción actualmente en ejecución.
        /// Nos indica los registros de origen.</param>
        /// <param name="regA">El contenido de BufferA.</param>
        /// <param name="regB">El contenido de BufferB.</param>

        public void DibujarCiclo2
            (MicroInstruccion mic, short regA, short regB)
        {
            PintarMicro(mic);
            etiqueta_ciclos.SetText("Ciclo:" + instruccion + " Subciclo 2");
            busA.Encender(mic.GetA());
            busB.Encender(mic.GetB());

            regs[mic.GetA()].Encender();
            regs[mic.GetB()].Encender();

            bufferA.SetText("BufferA " + Conversiones.ToHexString(regA));
            bufferB.SetText("BufferB " + Conversiones.ToHexString(regB));

            bufferA.Encender();
            bufferB.Encender();

            ActualizarTodo();
        }
コード例 #5
0
        public void TestGets()
        {
            MicroInstruccion mic = new MicroInstruccion(0x805300000400);

            Assert.AreEqual(1, mic.GetAMUX());
            Assert.AreEqual(0, mic.GetCOND());
            Assert.AreEqual(0, mic.GetSH());
            Assert.AreEqual(0, mic.GetMBR());
            Assert.AreEqual(0, mic.GetMAR());
            Assert.AreEqual(1, mic.GetRD());
            Assert.AreEqual(0, mic.GetWR());
            Assert.AreEqual(1, mic.GetENC());
            Assert.AreEqual(3, mic.GetC());
            Assert.AreEqual(0, mic.GetB());
            Assert.AreEqual(0, mic.GetA());
            Assert.AreEqual(0, mic.GetADDR());
            Assert.AreEqual(0, mic.GetFIR());
            Assert.AreEqual(2, mic.GetALU());
        }
コード例 #6
0
        /// <summary>Activa los elementos activos durante el subciclo 1.
        /// </summary>
        /// <param name="mic">La microinstrucción que se
        /// acaba de cargar.</param>
        /// <param name="rdc>La dirección de la memoria de control en la que
        /// se encuentra la microinstrucción.</param>

        public void DibujarCiclo1(MicroInstruccion mic, short rdc)
        {
            instruccion++;
            PintarMicro(mic);
            etiqueta_ciclos.SetText("Ciclo:" + instruccion + " Subciclo 1");
            cable_sh.Apagar();
            cable_sh_mbr.Apagar();
            mbr.Apagar();
            sh.Apagar();
            busC.Apagar();
            for (int i = 0; i < 16; i++)
            {
                regs[i].Apagar();
            }

            if ((rdc == 0) || ((rdc >= 1020) && (rdc < 1023)))
            {
                etiqueta_inst.SetText("Cargando sig. instrucción...");
            }
            ActualizarTodo();
        }
コード例 #7
0
        /// <summary>Activa los elementos activos durante el subciclo 4.
        /// </summary>
        /// <param name="mic">La microinstrucción en ejecución.</param>
        /// <param name="vMBR">El valor del registro MBR.</param>S

        public void DibujarCiclo4(MicroInstruccion mic, short vMBR)
        {
            PintarMicro(mic);
            etiqueta_ciclos.SetText("Ciclo:" + instruccion + " Subciclo 4");
            bufferA.Apagar();
            bufferB.Apagar();
            mar.Apagar();
            mbr.Apagar();
            mbr.SetText("MBR " + Conversiones.ToHexString(vMBR));
            cable_bufferB_mar.Apagar();
            cable_bufferB_alu.Apagar();
            alu.Apagar();
            mux.Apagar();
            cable_bufferA_mux.Apagar();
            cable_alu_sh.Apagar();
            cable_mux_alu.Apagar();
            cable_mbr_mux.Apagar();
            //Escribir el dato de salida en la ALU.
            //Activar los cables de salida necesarios.
            if (mic.GetENC() == 1)
            {
                busC.Encender(mic.GetC());
                regs[mic.GetC()].Encender();
            }
            if (mic.GetMBR() == 1)
            {
                //Activamos el cable que va de SH a MBR
                cable_sh_mbr.Encender();
                mbr.Encender();
            }
            if ((!(mic.GetENC() == 1)) && (!(mic.GetMBR() == 1)))
            {
                sh.Apagar();
            }
            else
            {
                cable_sh.Encender();
            }
            ActualizarTodo();
        }