/// <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)); } }
/// <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); }
/// <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(); }