//TODO: move this method to a base class public void LoadJEDEC(string fileName) { var assembly = Assembly.GetCallingAssembly(); using (var stream = assembly.GetManifestResourceStream(fileName)) { if (stream == null) { throw new Exception("Cannot find JEDEC data file, make sure it is set to Embedded Resource!"); } using (var reader = new StreamReader(stream)) { // find *L while (!reader.EndOfStream) { var line = reader.ReadLine(); if (line != null && line.Contains("*L")) { int address = int.Parse(line.Substring(2, 5)); //TODO: need to account for a possible 44 fuses? for (int i = 0; i < 32 && i + 8 < line.Length; i++) { if (line.Substring(i + 8, 1) == "0") { Fuses.Add(address + i); } } } } } } }
// handle PTD fuses (Product Term Disabled) private bool IsRowEnabled(int fuseNumber) { if (!HasPtdFuses) { return(true); } //2128 - 2191 PTD (GAL16v8) int ptdFuseNumber = (fuseNumber / FusesPerRow) + RowEnableStartFuse; // if the fuse is active, then the row is disabled return(!Fuses.Contains(ptdFuseNumber)); }
private void SetMode() { if (Fuses.Contains(2192) && Fuses.Contains(2193)) { // complex syn=1, ac0=1 _mode = GalModeEnum.Complex; } else if (Fuses.Contains(2192)) { // simple syn=1, ac0=0 _mode = GalModeEnum.Simple; } else { // registered syn=0, ac0=1 _mode = GalModeEnum.Registered; } }
private double ActiveLevel(int outputNumber, double outputVoltage) { int fuseNumber = 0; foreach (var o in OlmcUnits) { if (o.OutputPin == outputNumber) { fuseNumber = o.S0FuseNumber; break; } } if (Fuses.Contains(fuseNumber)) { return(outputVoltage.Inverted()); } return(outputVoltage); }