예제 #1
0
        /// <summary>Se llama cuando cambia el contenido de un registro.
        /// </summary>
        /// <param name="registro">El registro que ha cambiado.</param>
        /// <param name="newValue">El nuevo valor almacenado en
        /// <c>registro</c>.</param>

        public void RegisterChanged(int registro, short newValue)
        {
            regs[registro].SetText(
                BancoRegistros.GetNombreRegistro(registro) + " " +
                Conversiones.ToHexString(newValue));

            if (registro == BancoRegistros.IR)
            {
                regs[registro].SetText(
                    BancoRegistros.GetNombreRegistro(registro) + " " +
                    Desensamblador.Desensamblar(newValue));
                etiqueta_inst.SetText(
                    "Ejecutando:" + Desensamblador.Desensamblar(newValue));
            }
        }
예제 #2
0
        /// <summary>Crea una instancia de la clase.</summary>

        public PanelRegistros() : base(false, 0)
        {
            Gtk.Table tabla = new Gtk.Table(16, 5, true);
            VBox      vb    = new VBox(false, 0);

            for (int i = 0; i < 16; i++)
            {
                direcciones[i] =
                    new Gtk.Label(BancoRegistros.GetNombreRegistro(i));
                contenido[i] =
                    new Gtk.Label(Conversiones.ToHexString((short)0));
                tabla.Attach(direcciones[i], 1, 2, (uint)i, (uint)i + 1);
                tabla.Attach(contenido[i], 3, 4, (uint)i, (uint)i + 1);
            }
            vb.PackStart(new Gtk.Label
                             (Ventana.GetText("PReg_Contenido")));
            vb.PackStart(tabla);
            vb.PackStart(new Gtk.Label(""));
            this.PackStart(vb);
        }
예제 #3
0
        /// <summary>Crea una instancia de la clase.</summary>
        /// <param name="dibujo">Superficie sobre la que se dibujarán los
        /// objetos del simulador.</param>

        public RepresentacionRDD(InterfaceDibujo dibujo)
        {
            this.dibujo = dibujo;
            dibujo.SetRepresentacionRDD(this);

            etiqueta_ciclos =
                new Etiqueta(dibujo, 10, 10, "", EnuColor.Rojo, false);
            etiqueta_rmc =
                new Etiqueta(dibujo, 10, 50, "", EnuColor.Azul, false);
            etiqueta_inst =
                new Etiqueta(dibujo, 10, 30, "", EnuColor.Rojo, false);

            int x_deC1              = 350;
            int x_deC2              = 400;
            int y_deC               = 436;
            int anchoRegistro       = 110;
            int altoRegistro        = 15;
            int separacionRegistros = 3;
            int yreg1               = 15;
            int y_deB               = 310;
            int sepregA             = 40;
            int sepAB               = 30;
            int x_deA2              = x_deC2 + anchoRegistro + sepregA;
            int x_deB2              = x_deC2 + anchoRegistro + sepregA + sepAB;
            int y_deAlu             = 390;
            int x_deAlu             = 530;
            int anchoAlu            = 80;
            int y_deMUX             = 360;
            int y_deMAR             = 330;
            int x_deMAR             = 160;
            int ancho_MAR           = 90;
            int y_deMBR             = y_deMUX;


            et_busa = new Etiqueta(dibujo, x_deA2 - 5, yreg1 - 5, "Bus A");
            et_busb = new Etiqueta(dibujo, x_deB2 + 10, yreg1, "Bus B");
            et_busc = new Etiqueta(dibujo, x_deC1, yreg1 - 5, "Bus C");

            Cable[] cablesDeC = new Cable[16];

            for (int i = 0; i < 16; i++)
            {
                cablesDeC[i] = new CableUnidireccional(
                    dibujo, new int[] {
                    x_deC1,
                    y_deC,
                    x_deC1,
                    yreg1 + 5 + (altoRegistro + separacionRegistros) * i,
                    x_deC2,
                    yreg1 + 5 + (altoRegistro + separacionRegistros) * i
                }
                    );
            }
            busC = new Bus(cablesDeC);

            Cable[] cablesDeA = new Cable[16];

            for (int i = 0; i < 16; i++)
            {
                cablesDeA[i] = new CableUnidireccional(
                    dibujo, new int[] {
                    x_deC2 + anchoRegistro,
                    yreg1 + 5 + (altoRegistro + separacionRegistros) * i,
                    x_deA2,
                    yreg1 + 5 + (altoRegistro + separacionRegistros) * i,
                    x_deA2,
                    y_deB
                }
                    );
            }
            busA = new Bus(cablesDeA);

            Cable[] cablesDeB = new Cable[16];

            for (int i = 0; i < 16; i++)
            {
                cablesDeB[i] = new CableUnidireccional(
                    dibujo, new int[] {
                    x_deC2 + anchoRegistro,
                    yreg1 + 10 + (altoRegistro + separacionRegistros) * i,
                    x_deB2,
                    yreg1 + 10 + (altoRegistro + separacionRegistros) * i,
                    x_deB2,
                    y_deB
                }
                    );
            }
            busB = new Bus(cablesDeB);

            for (int i = 0; i < 16; i++)
            {
                regs[i] = new CajaRegistro(
                    dibujo,
                    x_deC2,
                    yreg1 + (altoRegistro + separacionRegistros) * i,
                    anchoRegistro,
                    altoRegistro,
                    BancoRegistros.GetNombreRegistro(i)
                    );
            }

            memoriappal = new CajaRegistro
                              (dibujo, 31, 330, 90, 100, " Memoria\nPrincipal\n2048x16");
            cable_rd =
                new CableUnidireccional(dibujo, new int[] { 65, 320, 65, 330 });
            cable_wr =
                new CableUnidireccional(dibujo, new int[] { 100, 320, 100, 330 });
            et_rd = new Etiqueta(dibujo, 65, 310, "RD");
            et_wr = new Etiqueta(dibujo, 100, 310, "WR");

            bufferA =
                new CajaRegistro(dibujo, 450, y_deB, 110, 16, "BufferA 0000");
            bufferB =
                new CajaRegistro(dibujo, 570, y_deB, 110, 16, "BufferB 0000");
            cable_l0 = new CableUnidireccional
                           (dibujo, new int[] { 440, y_deB + 8, 450, y_deB + 8 });
            cable_l1 = new CableUnidireccional
                           (dibujo, new int[] { 690, y_deB + 8, 680, y_deB + 8 });

            et_l0 = new Etiqueta(dibujo, 420, y_deB + 7, "L0");
            et_l1 = new Etiqueta(dibujo, 700, y_deB + 7, "L1");


            cable_bufferB_alu = new CableUnidireccional
                                    (dibujo, new int[] { 580, y_deB + 16, 580, y_deAlu });
            cable_bufferB_mar = new CableUnidireccional
                                    (dibujo, new int[] {
                580,
                y_deB + 16,
                580,
                y_deMAR + 8,
                x_deMAR + ancho_MAR,
                y_deMAR + 8
            });
            cable_bufferA_mux = new CableUnidireccional
                                    (dibujo, new int[] { 550, y_deB + 16, 550, y_deMUX });

            mux      = new CajaRegistro(dibujo, 500, y_deMUX, 60, 16, "MUX");
            cable_a0 = new CableUnidireccional
                           (dibujo, new int[] { 510, y_deMUX + 26, 510, y_deMUX + 16 });
            cable_mux_alu = new CableUnidireccional
                                (dibujo, new int[] { 550, y_deMUX + 16, 550, 390 });
            cable_alu_sh = new CableUnidireccional
                               (dibujo, new int[] { 570, 422, 570, 430 });

            et_a0 = new Etiqueta(dibujo, 510, y_deMUX + 33, "A0 0");

            mar = new CajaRegistro
                      (dibujo, x_deMAR, y_deMAR, ancho_MAR, 16, "MAR 0000");
            mbr = new CajaRegistro
                      (dibujo, x_deMAR, y_deMUX, ancho_MAR, 16, "MBR 0000");

            cable_m0 = new CableUnidireccional
                           (dibujo, new int[] { 190, y_deMAR - 10, 190, y_deMAR });
            cable_m1 = new CableUnidireccional
                           (dibujo, new int[] { 170, y_deMBR + 26, 170, y_deMBR + 16 });

            et_m0 = new Etiqueta(dibujo, 190, y_deMAR - 17, "M0");
            et_m1 = new Etiqueta(dibujo, 170, y_deMBR + 32, "M1");

            cable_mbr_mux = new CableUnidireccional
                                (dibujo, new int[] {
                x_deMAR + ancho_MAR, y_deMUX + 8, 500, y_deMUX + 8
            });
            cable_mar_ppal = new CableUnidireccional
                                 (dibujo, new int[] { x_deMAR, y_deMAR + 8, 121, y_deMAR + 8 });
            cable_mbr_ppal = new CableBidireccional
                                 (dibujo, new int[] { 121, y_deMUX + 8, x_deMAR, y_deMUX + 8 });

            sh          = new CajaRegistro(dibujo, x_deAlu, 430, anchoAlu, 16, "SH 0000");
            cable_s2_s0 = new CableUnidireccional
                              (dibujo, new int[]
                              { x_deAlu + anchoAlu + 10, 438, x_deAlu + anchoAlu, 438 });
            et_s0 =
                new Etiqueta(dibujo, x_deAlu + anchoAlu + 50, 438, "S2-S0 000");

            cable_sh_mbr = new CableUnidireccional
                               (dibujo, new int[] { x_deC1, y_deC, 190, y_deC, 190, y_deMUX + 16 });
            cable_sh = new Cable
                           (dibujo, new int[] { x_deAlu, y_deC, x_deC1, y_deC });


            alu = new CajaRegistro(dibujo, x_deAlu, y_deAlu, anchoAlu, 32, "ALU");


            cable_c = new CableUnidireccional
                          (dibujo, new int[]
                          { x_deAlu + anchoAlu, 395, x_deAlu + anchoAlu + 10, 395 });
            cable_n = new CableUnidireccional
                          (dibujo, new int[]
                          { x_deAlu + anchoAlu, 405, x_deAlu + anchoAlu + 10, 405 });
            cable_z = new CableUnidireccional
                          (dibujo, new int[]
                          { x_deAlu + anchoAlu, 415, x_deAlu + anchoAlu + 10, 415 });
            cable_f3_f0 = new CableUnidireccional
                              (dibujo, new int[] { x_deAlu - 10, 415, x_deAlu, 415 });
            et_f0 = new Etiqueta(dibujo, x_deAlu - 50, 415, "F3-F0 0000");
            et_c  = new Etiqueta(dibujo, x_deAlu + anchoAlu + 25, 395, "C 0");
            et_n  = new Etiqueta(dibujo, x_deAlu + anchoAlu + 25, 405, "N 0");
            et_z  = new Etiqueta(dibujo, x_deAlu + anchoAlu + 25, 415, "Z 0");

            ActualizarTodo();
        }