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