From 752d79a27b3be581e00a4665f16eb10f41a9956b Mon Sep 17 00:00:00 2001 From: radiomanV Date: Fri, 7 Sep 2018 11:17:01 +0300 Subject: [PATCH] Update program --- InfoIcDump/Form1.Designer.cs | 32 +++ InfoIcDump/Form1.cs | 269 ++++++++++++++--- InfoIcDump/binary/InfoIcDump.exe | Bin 72704 -> 76288 bytes InfoIcDump/binary/atmel.csv | 130 +++++++++ InfoIcDump/binary/microchip.csv | 475 +++++++++++++++++++++++++++++++ 5 files changed, 864 insertions(+), 42 deletions(-) create mode 100644 InfoIcDump/binary/atmel.csv create mode 100644 InfoIcDump/binary/microchip.csv diff --git a/InfoIcDump/Form1.Designer.cs b/InfoIcDump/Form1.Designer.cs index 744e0aa..40a7748 100644 --- a/InfoIcDump/Form1.Designer.cs +++ b/InfoIcDump/Form1.Designer.cs @@ -59,6 +59,8 @@ namespace InfoIcDump this.label_devs = new System.Windows.Forms.Label(); this.label6 = new System.Windows.Forms.Label(); this.button2 = new System.Windows.Forms.Button(); + this.checkBox5 = new System.Windows.Forms.CheckBox(); + this.checkBox6 = new System.Windows.Forms.CheckBox(); ((System.ComponentModel.ISupportInitialize)(this.LogoImage)).BeginInit(); this.GroupBox1.SuspendLayout(); this.SuspendLayout(); @@ -359,11 +361,39 @@ namespace InfoIcDump this.button2.UseVisualStyleBackColor = true; this.button2.Click += new System.EventHandler(this.button2_Click); // + // checkBox5 + // + this.checkBox5.AutoSize = true; + this.checkBox5.Checked = true; + this.checkBox5.CheckState = System.Windows.Forms.CheckState.Checked; + this.checkBox5.Font = new System.Drawing.Font("Arial", 9.75F); + this.checkBox5.Location = new System.Drawing.Point(587, 395); + this.checkBox5.Name = "checkBox5"; + this.checkBox5.Size = new System.Drawing.Size(170, 20); + this.checkBox5.TabIndex = 18; + this.checkBox5.Text = "Remove duplicates(slow)"; + this.checkBox5.UseVisualStyleBackColor = true; + // + // checkBox6 + // + this.checkBox6.AutoSize = true; + this.checkBox6.Checked = true; + this.checkBox6.CheckState = System.Windows.Forms.CheckState.Checked; + this.checkBox6.Font = new System.Drawing.Font("Arial", 9.75F); + this.checkBox6.Location = new System.Drawing.Point(774, 395); + this.checkBox6.Name = "checkBox6"; + this.checkBox6.Size = new System.Drawing.Size(98, 20); + this.checkBox6.TabIndex = 19; + this.checkBox6.Text = "Sort by type"; + this.checkBox6.UseVisualStyleBackColor = true; + // // Form1 // this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; this.ClientSize = new System.Drawing.Size(977, 430); + this.Controls.Add(this.checkBox6); + this.Controls.Add(this.checkBox5); this.Controls.Add(this.button2); this.Controls.Add(this.label6); this.Controls.Add(this.label_devs); @@ -421,5 +451,7 @@ namespace InfoIcDump private Label label_devs; private Label label6; private Button button2; + private CheckBox checkBox5; + private CheckBox checkBox6; } } diff --git a/InfoIcDump/Form1.cs b/InfoIcDump/Form1.cs index bc8bb6b..c9ff0d0 100644 --- a/InfoIcDump/Form1.cs +++ b/InfoIcDump/Form1.cs @@ -10,6 +10,7 @@ using System.Runtime.InteropServices; using System.IO; using System.Xml.Serialization; using System.Xml; +using System.Diagnostics; namespace InfoIcDump @@ -118,8 +119,26 @@ namespace InfoIcDump public string opts7; [XmlAttribute("package_details")] public string package_details; + [XmlAttribute("fuses")] + public string fuses; } + public struct MICROCHIP_CSV + { + public uint DeviceID; + public uint DeviceIDMask; + public string fuses; + }; + + public struct ATMEL_CSV + { + public uint DeviceID; + public string fuses; + }; + + SortedDictionary microchip_csv_list = new SortedDictionary(); + SortedDictionary atmel_csv_list = new SortedDictionary(); + //constructor public Form1() { @@ -128,10 +147,53 @@ namespace InfoIcDump { if (MessageBox.Show(this, "InfoIc.dll was not found!\n Do you want to load it from other place?", "Load error", MessageBoxButtons.YesNo, MessageBoxIcon.Exclamation) == System.Windows.Forms.DialogResult.Yes) - load_infoic(); + load_infoic(); } InitializeComponent(); + try + { + using (StreamReader stream_reader = new StreamReader("microchip.csv")) + { + string line; + MICROCHIP_CSV csv = new MICROCHIP_CSV(); + while ((line = stream_reader.ReadLine()) != null) + { + csv.DeviceID = UInt32.Parse(line.Split(';')[1]); + csv.DeviceIDMask = UInt32.Parse(line.Split(';')[2]); + csv.fuses = line.Split(';')[3]; + microchip_csv_list.Add(line.Split(';')[0], csv); + } + } + + } + catch (Exception ex) + { + MessageBox.Show(ex.Message, "Error", MessageBoxButtons.OK, MessageBoxIcon.Error); + Button1.Enabled = false; + } + + + try + { + using (StreamReader stream_reader = new StreamReader("atmel.csv")) + { + string line; + ATMEL_CSV csv = new ATMEL_CSV(); + while ((line = stream_reader.ReadLine()) != null) + { + csv.DeviceID = UInt32.Parse(line.Split(';')[1]); + csv.fuses = line.Split(';')[2]; + atmel_csv_list.Add(line.Split(';')[0], csv); + } + } + + } + catch (Exception ex) + { + MessageBox.Show(ex.Message, "Error", MessageBoxButtons.OK, MessageBoxIcon.Error); + Button1.Enabled = false; + } populate_mfc_list(); } @@ -146,11 +208,11 @@ namespace InfoIcDump if (dlg.ShowDialog() == DialogResult.OK) { //Workaround to unload the infoic.dll - while(FreeLibrary(GetModuleHandle("InfoIc.dll"))); - FreeLibrary(GetModuleHandle("InfoIc.dll")); + while (FreeLibrary(GetModuleHandle("InfoIc.dll"))) ; + FreeLibrary(GetModuleHandle("InfoIc.dll")); //Load the new library - IntPtr Hmodule = LoadLibrary(dlg.FileName); + IntPtr Hmodule = LoadLibrary(dlg.FileName); if (Hmodule == IntPtr.Zero) MessageBox.Show(this, "Error loading the " + dlg.FileName, "Error", MessageBoxButtons.OK, MessageBoxIcon.Error); @@ -192,14 +254,14 @@ namespace InfoIcDump uint[] tag1 = (uint[])MfcList.Tag; uint[] tag2 = (uint[])DeviceList.Tag; GetIcStru(tag1[MfcList.SelectedIndex], tag2[DeviceList.SelectedIndex], ref device); - txt_info.Text = get_ic_string_ini(tag1[MfcList.SelectedIndex], tag2[DeviceList.SelectedIndex], ref device).ToString(); + txt_info.Text = get_ic_string_ini(device).ToString(); label_devs.Text = "Devices:" + DeviceList.Items.Count.ToString(); } //export type selection was changed private void checkBox_CheckedChanged(object sender, EventArgs e) { - Button1.Enabled = (checkBox1.Checked || checkBox2.Checked || checkBox3.Checked || checkBox4.Checked); + Button1.Enabled = ((checkBox1.Checked || checkBox2.Checked || checkBox3.Checked || checkBox4.Checked) && Button1.Enabled); } @@ -258,7 +320,7 @@ namespace InfoIcDump { foreach (Control control in this.Controls) { - control.Enabled = false; + control.Enabled = false; } } } @@ -267,7 +329,7 @@ namespace InfoIcDump /*/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////*/ uint change_endianess(uint value, uint size) { - if (value == 0 || size == 0) return 0;// This is a database bug. Size is zero and id garabge bytes + if (value == 0 || size == 0) return 0;// This is a database bug. Size is zero and id garbage bytes return (uint)((((int)value & 0xff) << 24) + (((uint)value & 0xff00) << 8) + (((uint)value & 0xff0000) >> 8) + @@ -275,12 +337,20 @@ namespace InfoIcDump >> (int)(8 * (4 - size)); } + private string get_fuse_name(string name) + { + string key = name.Split('@')[0]; + key = key.Split('(')[0]; + if (microchip_csv_list.ContainsKey(key)) + return microchip_csv_list[key].fuses; + if (atmel_csv_list.ContainsKey(key)) + return atmel_csv_list[key].fuses; + return "NULL"; + } //Get device info in ini format - private string get_ic_string_ini(uint manufacturer, uint device_index, ref DevStruct devstruct) + private string get_ic_string_ini(DevStruct devstruct) { - GetIcStru(manufacturer, device_index, ref devstruct); - //Change endianess for the chip_id devstruct.chip_id = change_endianess(devstruct.chip_id, devstruct.chip_id_size); return string.Format( @"[{0}] @@ -291,7 +361,7 @@ write_buffer_size = 0x{4:x2} code_memory_size = 0x{5:x2} data_memory_size = 0x{6:x2} data_memory2_size = 0x{7:x2} -chip_id = 0x{8:x2} +chip_id = 0x{8:x4} chip_id_size = 0x{9:x2} opts1 = 0x{10:x2} opts2 = 0x{11:x2} @@ -300,19 +370,19 @@ opts4 = 0x{13:x2} opts5 = 0x{14:x2} opts6 = 0x{15:x2} opts7 = 0x{16:x2} -package_details = 0x{17:x2}", +package_details = 0x{17:x8} +fuses = {18}", devstruct.name.Trim(), devstruct.protocol, devstruct.type, devstruct.read_buffer_size, devstruct.write_buffer_size, devstruct.code_memory_size, devstruct.data_memory_size, devstruct.data_memory2_size, devstruct.chip_id, devstruct.chip_id_size, devstruct.opts1, devstruct.opts2, devstruct.opts3, devstruct.opts4, devstruct.opts5, - devstruct.opts6, devstruct.opts7, devstruct.package_details); + devstruct.opts6, devstruct.opts7, devstruct.package_details, get_fuse_name(devstruct.name.Trim())); } //Get device info in c header format - private string get_ic_string_c(uint manufacturer, uint device_index, ref DevStruct devstruct) + private string get_ic_string_c(DevStruct devstruct) { - GetIcStru(manufacturer, device_index, ref devstruct); devstruct.chip_id = change_endianess(devstruct.chip_id, devstruct.chip_id_size); return string.Format( @"{{ @@ -324,7 +394,7 @@ package_details = 0x{17:x2}", .code_memory_size = 0x{5:x2}, .data_memory_size = 0x{6:x2}, .data_memory2_size = 0x{7:x2}, - .chip_id = 0x{8:x2}, + .chip_id = 0x{8:x4}, .chip_id_size = 0x{9:x2}, .opts1 = 0x{10:x2}, .opts2 = 0x{11:x2}, @@ -333,32 +403,32 @@ package_details = 0x{17:x2}", .opts5 = 0x{14:x2}, .opts6 = 0x{15:x2}, .opts7 = 0x{16:x2}, - .package_details = 0x{17:x2} + .package_details = 0x{17:x8} + .fuses = {18} }},", devstruct.name.Trim(), devstruct.protocol, devstruct.type, devstruct.read_buffer_size, devstruct.write_buffer_size, devstruct.code_memory_size, devstruct.data_memory_size, devstruct.data_memory2_size, devstruct.chip_id, devstruct.chip_id_size, devstruct.opts1, devstruct.opts2, devstruct.opts3, devstruct.opts4, devstruct.opts5, - devstruct.opts6, devstruct.opts7, devstruct.package_details); + devstruct.opts6, devstruct.opts7, devstruct.package_details,get_fuse_name(devstruct.name.Trim())); } //Get device info in xml format - private device get_ic_xml(uint manufacturer, uint device_index, ref DevStruct devstruct) + private device get_ic_xml(DevStruct devstruct) { + devstruct.chip_id = change_endianess(devstruct.chip_id, devstruct.chip_id_size); device xml_chip = new device(); - GetIcStru(manufacturer, device_index, ref devstruct); xml_chip.icname = devstruct.name.Trim(); xml_chip.protocol = "0x" + devstruct.protocol.ToString("x2"); xml_chip.type = "0x" + devstruct.type.ToString("x2"); - xml_chip.type = "0x" + devstruct.type.ToString("x2"); xml_chip.read_buffer_size = "0x" + devstruct.read_buffer_size.ToString("x2"); xml_chip.write_buffer_size = "0x" + devstruct.write_buffer_size.ToString("x2"); xml_chip.code_memory_size = "0x" + devstruct.code_memory_size.ToString("x2"); xml_chip.data_memory_size = "0x" + devstruct.data_memory_size.ToString("x2"); xml_chip.data_memory2_size = "0x" + devstruct.data_memory2_size.ToString("x2"); - xml_chip.chip_id = "0x" + devstruct.chip_id.ToString("x2"); + xml_chip.chip_id = "0x" + devstruct.chip_id.ToString("x4"); xml_chip.chip_id_size = "0x" + devstruct.chip_id_size.ToString("x2"); xml_chip.opts1 = "0x" + devstruct.opts1.ToString("x2"); xml_chip.opts2 = "0x" + devstruct.opts2.ToString("x2"); @@ -367,11 +437,46 @@ package_details = 0x{17:x2}", xml_chip.opts5 = "0x" + devstruct.opts5.ToString("x2"); xml_chip.opts6 = "0x" + devstruct.opts6.ToString("x2"); xml_chip.opts7 = "0x" + devstruct.opts7.ToString("x2"); - xml_chip.package_details = "0x" + devstruct.package_details.ToString("x2"); + xml_chip.package_details = "0x" + devstruct.package_details.ToString("x8"); + xml_chip.fuses = get_fuse_name(devstruct.name.Trim()); return xml_chip; } + bool compare_devices(DevStruct device1, DevStruct device2) + { + return (string.Compare(device1.name.Split('@')[0], device2.name.Split('@')[0], true) == 0) && + (device1.protocol == device2.protocol) && + (device1.type == device2.type) && + (device1.read_buffer_size == device2.read_buffer_size) && + (device1.write_buffer_size == device2.write_buffer_size) && + (device1.code_memory_size == device2.code_memory_size) && + (device1.data_memory_size == device2.data_memory_size) && + (device1.data_memory2_size == device2.data_memory2_size) && + (device1.chip_id == device2.chip_id) && + (device1.chip_id_size == device2.chip_id_size) && + (device1.opts1 == device2.opts1) && + (device1.opts2 == device2.opts2) && + (device1.opts3 == device2.opts3) && + (device1.opts4 == device2.opts4) && + (device1.opts5 == device2.opts5) && + (device1.opts6 == device2.opts6) && + (device1.opts7 == device2.opts7); + } + bool is_duplicate(List devices_list, DevStruct device) + { + foreach (DevStruct d in devices_list) + { + if (compare_devices(d, device) && + (((device.package_details & 0X80000000) != 0) && + ((device.package_details & 0X7FFFFFFF) == (d.package_details & 0X7FFFFFFF))) || + (compare_devices(d, device) && + ((device.package_details & 0X00FFFF00) == (d.package_details & 0X00FFFF00))) + ) + return true; + } + return false; + } //Perform the infoic.dll dump @@ -380,13 +485,14 @@ package_details = 0x{17:x2}", uint[] manufacturers = new uint[4096]; uint[] devices = new uint[4096]; DevStruct devstruct = new DevStruct(); + List devices_list = new List(); + List duplicates = new List(); List device_list_xml = new List(); List device_list_ini = new List(); List device_list_c = new List(); SortedDictionary total = new SortedDictionary(); progressBar.Maximum = (int)GetIcMFC("", manufacturers, 0); - uint total_count = 0; //Iterate over the entire manufacturers for (uint i = 0; i < GetIcMFC("", manufacturers, 0); i++) @@ -394,31 +500,102 @@ package_details = 0x{17:x2}", //Iterate over the entire devices in the curent manufacturer for (uint k = 0; k < GetIcList("", devices, manufacturers[i], 0); k++) { - //Log the device - if (total.ContainsKey(devstruct.protocol)) - total[devstruct.protocol] += devstruct.name + Environment.NewLine; - else - total.Add(devstruct.protocol, devstruct.name); + //Get the device struct + GetIcStru(manufacturers[i], devices[k], ref devstruct); - //Get the element in ini format - if (checkBox2.Checked) - device_list_ini.Add(get_ic_string_ini(manufacturers[i], devices[k], ref devstruct) + Environment.NewLine); + //Remove spaces + devstruct.name = devstruct.name.Replace(" ", ""); - //Get the element in C header format - if (checkBox1.Checked) - device_list_c.Add(get_ic_string_c(manufacturers[i], devices[k], ref devstruct)); - - //Get the element in xml format - if (checkBox3.Checked) + //If not duplicate process the chip + if (checkBox5.Checked == false || !is_duplicate(devices_list, devstruct)) { - device_list_xml.Add(get_ic_xml(manufacturers[i], devices[k], ref devstruct)); + //Log the device + if (total.ContainsKey(devstruct.protocol)) + total[devstruct.protocol] += devstruct.name + Environment.NewLine; + else + total.Add(devstruct.protocol, devstruct.name + Environment.NewLine); + + if (checkBox5.Checked == true) + { + //Rename specific adapter to generic + switch (devstruct.package_details & 0xFF) + { + case 1: + case 2: + case 6: + devstruct.name = devstruct.name.Split('@')[0] + "@TSOP"; + break; + } + } + + devices_list.Add(devstruct); } - total_count++; + else + duplicates.Add(devstruct.name); } progressBar.Value += 1; Application.DoEvents(); } progressBar.Value = progressBar.Maximum; + + List tmp_list = new List(); + + foreach (DevStruct d in devices_list) + { + devstruct = d; + //Patch Microchip and Atmel controllers + if (devstruct.category == 2) + { + string key = devstruct.name.Split('@')[0]; + key = key.Split('(')[0]; + if (microchip_csv_list.ContainsKey(key)) + { + devstruct.chip_id = microchip_csv_list[key].DeviceID; + devstruct.opts3 = microchip_csv_list[key].DeviceIDMask; + } + else if (atmel_csv_list.ContainsKey(key)) + { + devstruct.chip_id = atmel_csv_list[key].DeviceID; + } + } + tmp_list.Add(devstruct); + } + devices_list = tmp_list; + tmp_list = new List(); + + + + //Sort the list by category + if (checkBox6.Checked == true) + { + for (uint i = 1; i < 6; i++) + { + foreach (DevStruct d in devices_list) + { + if (d.category == i) + tmp_list.Add(d); + } + } + devices_list = tmp_list; + } + + //Convert + for (int i = 0; i < devices_list.Count; i++) + { + //Get the element in ini format + if (checkBox2.Checked) + device_list_ini.Add(get_ic_string_ini(devices_list[i]) + Environment.NewLine); + + //Get the element in C header format + if (checkBox1.Checked) + device_list_c.Add(get_ic_string_c(devices_list[i])); + + //Get the element in xml format + if (checkBox3.Checked) + { + device_list_xml.Add(get_ic_xml(devices_list[i])); + } + } try { //Write the devices.h file @@ -464,10 +641,18 @@ package_details = 0x{17:x2}", stream_writer.WriteLine("Protocol:0x" + key.Key.ToString("X2") + Environment.NewLine + key.Value); } stream_writer.Write(Environment.NewLine + - total_count.ToString() + " devices in " + + devices_list.Count.ToString() + " devices in " + total.Count.ToString() + " protocols."); } + + using (StreamWriter stream_writer = new StreamWriter("duplicates.txt")) + { + foreach (string d in duplicates) + { + stream_writer.WriteLine(d); + } + } } } catch (Exception ex) diff --git a/InfoIcDump/binary/InfoIcDump.exe b/InfoIcDump/binary/InfoIcDump.exe index 41ce8fdc937a04009fd4ca3c08c901218395f854..8c68c6d135bedb9e10e340845fbc63838b8b2e4a 100644 GIT binary patch delta 17753 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 diff --git a/InfoIcDump/binary/atmel.csv b/InfoIcDump/binary/atmel.csv new file mode 100644 index 0000000..65d77cd --- /dev/null +++ b/InfoIcDump/binary/atmel.csv @@ -0,0 +1,130 @@ +AT89C1051;7697;atmel_lock +AT89C1051U;7698;atmel_lock +AT89C2051;7713;atmel_lock +AT89C2051x2;7714;atmel_lock +AT89C4051;7745;atmel_lock +AT89C51;1987071;atmel_lock +AT89C51RC;1986823;atmel_lock +AT89C52;1987327;atmel_lock +AT89C55;1988095;atmel_lock +AT89C55WD;1987846;atmel_lock +AT89LS51;1986822;atmel_lock +AT89LS52;1987078;atmel_lock +AT89LS53;7779;atmel_lock +AT89LS8252;7810;avr_fuses +AT89LS8253;7811;avr_fuses +AT89LV51;1991167;atmel_lock +AT89LV52;1991423;atmel_lock +AT89LV55;1992191;atmel_lock +AT89S51;1986822;atmel_lock +AT89S52;1987078;atmel_lock +AT89S53;7763;atmel_lock +AT89S8252;7794;avr_fuses +AT89S8253;7795;avr_fuses +AT90S1200;2002945;avr_fuses +AT90S2313;2003201;avr_fuses +AT90S2333;2003205;avr_fuses +AT90S4414;2003457;avr_fuses +AT90S4433;2003459;avr_fuses +AT90S4434;2004226;avr_fuses +AT90S8515;2003713;avr_fuses +AT90S8535;2003715;avr_fuses +AT90SLS2313;2003201;avr_fuses +AT90SLS2333;2003205;avr_fuses +AT90SLS4414;2003457;avr_fuses +AT90SLS4433;2003459;avr_fuses +AT90SLS4434;2004226;avr_fuses +AT90SLS8515;2003713;avr_fuses +AT90SLS8535;2003715;avr_fuses +ATMEGA128@TQFP64;2004738;avr3_fuses +ATMEGA1284;2004742;avr3_fuses +ATMEGA1284P;2004741;avr3_fuses +ATMEGA128A@TQFP64;2004738;avr3_fuses +ATMEGA128L@TQFP64;2004738;avr3_fuses +ATMEGA16;2003971;avr2_fuses +ATMEGA162;2003972;avr3_fuses +ATMEGA162V;2003972;avr3_fuses +ATMEGA164A;2003983;avr3_fuses +ATMEGA164PA;2003978;avr3_fuses +ATMEGA165A@TQFP64;2003975;avr3_fuses +ATMEGA165P@TQFP64;2003973;avr3_fuses +ATMEGA165PA@TQFP64;2003975;avr3_fuses +ATMEGA165PV@TQFP64;2003973;avr3_fuses +ATMEGA168;2003974;avr3_fuses +ATMEGA168A;2003974;avr3_fuses +ATMEGA168PA;2003979;avr3_fuses +ATMEGA168V;2003974;avr3_fuses +ATMEGA169A@TQFP64;2003973;avr3_fuses +ATMEGA169P@TQFP64;2003973;avr3_fuses +ATMEGA169PA@TQFP64;2003973;avr3_fuses +ATMEGA169PV@TQFP64;2003973;avr3_fuses +ATMEGA16A;2003971;avr2_fuses +ATMEGA16L;2003971;avr2_fuses +ATMEGA32;2004226;avr2_fuses +ATMEGA324A;2004245;avr3_fuses +ATMEGA324PA;2004241;avr3_fuses +ATMEGA325A@TQFP64;2004237;avr3_fuses +ATMEGA325PA@TQFP64;2004237;avr3_fuses +ATMEGA328;2004244;avr3_fuses +ATMEGA328P;2004239;avr3_fuses +ATMEGA329A@TQFP64;2004235;avr3_fuses +ATMEGA329PA@TQFP64;2004235;avr3_fuses +ATMEGA32A;2004226;avr2_fuses +ATMEGA32L;2004226;avr2_fuses +ATMEGA48;2003461;avr3_fuses +ATMEGA48A;2003461;avr3_fuses +ATMEGA48PA;2003466;avr3_fuses +ATMEGA48V;2003461;avr3_fuses +ATMEGA64@TQFP64;2004482;avr3_fuses +ATMEGA644A;2004489;avr3_fuses +ATMEGA644PA;2004490;avr3_fuses +ATMEGA645A@TQFP64;2004493;avr3_fuses +ATMEGA645P@TQFP64;2004493;avr3_fuses +ATMEGA649A@TQFP64;2004491;avr3_fuses +ATMEGA649P@TQFP64;2004491;avr3_fuses +ATMEGA64A@TQFP64;2004482;avr3_fuses +ATMEGA64L@TQFP64;2004482;avr3_fuses +ATMEGA8;2003719;avr2_fuses +ATMEGA8515;2003718;avr2_fuses +ATMEGA8515L;2003718;avr2_fuses +ATMEGA8535;2003720;avr2_fuses +ATMEGA8535L;2003720;avr2_fuses +ATMEGA88;2003722;avr3_fuses +ATMEGA88A;2003722;avr3_fuses +ATMEGA88PA;2003727;avr3_fuses +ATMEGA88V;2003722;avr3_fuses +ATMEGA8A;2003719;avr2_fuses +ATMEGA8L;2003719;avr2_fuses +ATTINY11;2002948;avr_fuses +ATTINY11L;2002948;avr_fuses +ATTINY12;2002949;avr_fuses +ATTINY12L;2002949;avr_fuses +ATTINY12V;2002949;avr_fuses +ATTINY13;2002951;avr2_fuses +ATTINY13A;2002951;avr2_fuses +ATTINY13V;2002951;avr2_fuses +ATTINY15;2002950;avr_fuses +ATTINY15L;2002950;avr_fuses +ATTINY2313;2003210;avr3_fuses +ATTINY2313A;2003210;avr3_fuses +ATTINY2313V;2003210;avr3_fuses +ATTINY24;2003211;avr3_fuses +ATTINY24A;2003211;avr3_fuses +ATTINY24V;2003211;avr3_fuses +ATTINY25;2003208;avr3_fuses +ATTINY25V;2003208;avr3_fuses +ATTINY26;2003209;avr2_fuses +ATTINY26L;2003209;avr2_fuses +ATTINY28L;2003207;avr_fuses +ATTINY28V;2003207;avr_fuses +ATTINY4313;2003469;avr3_fuses +ATTINY44;2003463;avr3_fuses +ATTINY44A;2003463;avr3_fuses +ATTINY44V;2003463;avr3_fuses +ATTINY45;2003462;avr3_fuses +ATTINY45V;2003462;avr3_fuses +ATTINY84;2003724;avr3_fuses +ATTINY84A;2003724;avr3_fuses +ATTINY84V;2003724;avr3_fuses +ATTINY85;2003723;avr3_fuses +ATTINY85V;2003723;avr3_fuses diff --git a/InfoIcDump/binary/microchip.csv b/InfoIcDump/binary/microchip.csv new file mode 100644 index 0000000..3b5a540 --- /dev/null +++ b/InfoIcDump/binary/microchip.csv @@ -0,0 +1,475 @@ +PIC10F200;0;0;pic_fuses +PIC10F202;0;0;pic_fuses +PIC10F204;0;0;pic_fuses +PIC10F206;0;0;pic_fuses +PIC10F220;0;0;pic_fuses +PIC10F222;0;0;pic_fuses +PIC12C508;0;0;pic_fuses +PIC12C508A;0;0;pic_fuses +PIC12C509;0;0;pic_fuses +PIC12C509A;0;0;pic_fuses +PIC12C671;0;0;pic_fuses +PIC12C672;0;0;pic_fuses +PIC12CE518;0;0;pic_fuses +PIC12CE519;0;0;pic_fuses +PIC12CE673;0;0;pic_fuses +PIC12CE674;0;0;pic_fuses +PIC12F508;0;0;pic_fuses +PIC12F509;0;0;pic_fuses +PIC12F510;0;0;pic_fuses +PIC12F519;0;0;pic_fuses +PIC12F609;8768;5;pic_fuses +PIC12F615;8576;5;pic_fuses +PIC12F629;3968;5;pic_fuses +PIC12F635;4000;5;pic_fuses +PIC12F675;4032;5;pic_fuses +PIC12F683;1120;5;pic_fuses +PIC12HV609;8832;5;pic_fuses +PIC12HV615;8608;5;pic_fuses +PIC12LC508;0;0;pic_fuses +PIC12LC508A;0;0;pic_fuses +PIC12LC509;0;0;pic_fuses +PIC12LC509A;0;0;pic_fuses +PIC12LC671;0;0;pic_fuses +PIC12LC672;0;0;pic_fuses +PIC12LCE518;0;0;pic_fuses +PIC12LCE519;0;0;pic_fuses +PIC12LF508;0;0;pic_fuses +PIC12LF509;0;0;pic_fuses +PIC12LF519;0;0;pic_fuses +PIC16C505;0;0;pic_fuses +PIC16C54;0;0;pic_fuses +PIC16C54A;0;0;pic_fuses +PIC16C54B;0;0;pic_fuses +PIC16C54C;0;0;pic_fuses +PIC16C55;0;0;pic_fuses +PIC16C554;0;0;pic_fuses +PIC16C558;0;0;pic_fuses +PIC16C55A;0;0;pic_fuses +PIC16C56;0;0;pic_fuses +PIC16C56A;0;0;pic_fuses +PIC16C57;0;0;pic_fuses +PIC16C57C;0;0;pic_fuses +PIC16C58A;0;0;pic_fuses +PIC16C58B;0;0;pic_fuses +PIC16C61;0;0;pic_fuses +PIC16C62;0;0;pic_fuses +PIC16C620;0;0;pic_fuses +PIC16C620A;0;0;pic_fuses +PIC16C621;0;0;pic_fuses +PIC16C621A;0;0;pic_fuses +PIC16C622;0;0;pic_fuses +PIC16C622A;0;0;pic_fuses +PIC16C62A;0;0;pic_fuses +PIC16C62B;0;0;pic_fuses +PIC16C63;0;0;pic_fuses +PIC16C63A;0;0;pic_fuses +PIC16C64;0;0;pic_fuses +PIC16C64A;0;0;pic_fuses +PIC16C65;0;0;pic_fuses +PIC16C65A;0;0;pic_fuses +PIC16C65B;0;0;pic_fuses +PIC16C66;0;0;pic_fuses +PIC16C67;0;0;pic_fuses +PIC16C71;0;0;pic_fuses +PIC16C710;0;0;pic_fuses +PIC16C711;0;0;pic_fuses +PIC16C712;0;0;pic_fuses +PIC16C716;0;0;pic_fuses +PIC16C717;0;0;pic_fuses +PIC16C72;0;0;pic_fuses +PIC16C72A;0;0;pic_fuses +PIC16C73;0;0;pic_fuses +PIC16C73A;0;0;pic_fuses +PIC16C73B;0;0;pic_fuses +PIC16C74;0;0;pic_fuses +PIC16C745;2912;5;pic_fuses +PIC16C74A;0;0;pic_fuses +PIC16C74B;0;0;pic_fuses +PIC16C76;0;0;pic_fuses +PIC16C765;0;0;pic_fuses +PIC16C77;0;0;pic_fuses +PIC16C770;0;0;pic_fuses +PIC16C771;0;0;pic_fuses +PIC16C773;0;0;pic_fuses +PIC16C774;0;0;pic_fuses +PIC16C781;0;0;pic_fuses +PIC16C782;0;0;pic_fuses +PIC16CE623;0;0;pic_fuses +PIC16CE624;0;0;pic_fuses +PIC16CE625;0;0;pic_fuses +PIC16CR54A;0;0;pic_fuses +PIC16CR54B;0;0;pic_fuses +PIC16CR54C;0;0;pic_fuses +PIC16CR56A;0;0;pic_fuses +PIC16CR57B;0;0;pic_fuses +PIC16CR57C;0;0;pic_fuses +PIC16CR58A;0;0;pic_fuses +PIC16CR58B;0;0;pic_fuses +PIC16F505;0;0;pic_fuses +PIC16F506;0;0;pic_fuses +PIC16F526;0;0;pic_fuses +PIC16F54;0;0;pic_fuses +PIC16F57;0;0;pic_fuses +PIC16F59;0;0;pic_fuses +PIC16F610;8800;5;pic_fuses +PIC16F616;4672;5;pic_fuses +PIC16F627A;4160;5;pic_fuses +PIC16F628A;4192;5;pic_fuses +PIC16F630;4288;5;pic_fuses +PIC16F631;5152;5;pic_fuses +PIC16F636;4256;5;pic_fuses +PIC16F639;4256;5;pic_fuses +PIC16F648A;4352;5;pic_fuses +PIC16F676;4320;5;pic_fuses +PIC16F677;5184;5;pic_fuses +PIC16F684;4224;5;pic_fuses +PIC16F685;1184;5;pic_fuses +PIC16F687;4896;5;pic_fuses +PIC16F688;4480;5;pic_fuses +PIC16F689;4928;5;pic_fuses +PIC16F690;5120;5;pic_fuses +PIC16F716;4416;5;pic_fuses +PIC16F72;160;5;pic_fuses +PIC16F722;6272;5;pic2_fuses +PIC16F722A;6944;5;pic2_fuses +PIC16F723;6240;5;pic2_fuses +PIC16F723A;6912;5;pic2_fuses +PIC16F724;6208;5;pic2_fuses +PIC16F726;6176;5;pic2_fuses +PIC16F727;6144;5;pic2_fuses +PIC16F73;1536;5;pic_fuses +PIC16F737;2976;5;pic2_fuses +PIC16F74;1568;5;pic_fuses +PIC16F747;3040;5;pic2_fuses +PIC16F76;1600;5;pic_fuses +PIC16F767;3744;5;pic2_fuses +PIC16F77;1632;5;pic_fuses +PIC16F777;3552;5;pic2_fuses +PIC16F785;4608;5;pic2_fuses +PIC16F818;1216;5;pic_fuses +PIC16F819;1248;5;pic_fuses +PIC16F83;0;0;pic_fuses +PIC16F84;0;0;pic_fuses +PIC16F84A;1376;5;pic_fuses +PIC16F87;1824;5;pic2_fuses +PIC16F870;3328;5;pic_fuses +PIC16F871;3360;5;pic_fuses +PIC16F872;2272;5;pic_fuses +PIC16F873;2400;5;pic_fuses +PIC16F873A;3648;5;pic_fuses +PIC16F874;2336;5;pic_fuses +PIC16F874A;3680;5;pic_fuses +PIC16F876;2528;5;pic_fuses +PIC16F876A;3584;5;pic_fuses +PIC16F877;2464;5;pic_fuses +PIC16F877A;3616;5;pic_fuses +PIC16F88;1888;5;pic2_fuses +PIC16F882;8192;5;pic2_fuses +PIC16F883;8224;5;pic2_fuses +PIC16F884;8256;5;pic2_fuses +PIC16F886;8288;5;pic2_fuses +PIC16F887;8320;5;pic2_fuses +PIC16F913;5088;5;pic_fuses +PIC16F914;5056;5;pic_fuses +PIC16F916;5024;5;pic_fuses +PIC16F917;4992;5;pic_fuses +PIC16F946;5216;5;pic_fuses +PIC16HV610;8864;5;pic_fuses +PIC16HV616;4704;5;pic_fuses +PIC16HV785;4640;5;pic_fuses +PIC16LC505;0;0;pic_fuses +PIC16LC54;0;0;pic_fuses +PIC16LC54A;0;0;pic_fuses +PIC16LC54C;0;0;pic_fuses +PIC16LC55;0;0;pic_fuses +PIC16LC554;0;0;pic_fuses +PIC16LC558;0;0;pic_fuses +PIC16LC56A;0;0;pic_fuses +PIC16LC58A;0;0;pic_fuses +PIC16LC58B;0;0;pic_fuses +PIC16LC620;0;0;pic_fuses +PIC16LC620A;0;0;pic_fuses +PIC16LC621A;0;0;pic_fuses +PIC16LC622;0;0;pic_fuses +PIC16LC622A;0;0;pic_fuses +PIC16LC62A;0;0;pic_fuses +PIC16LC62B;0;0;pic_fuses +PIC16LC63;0;0;pic_fuses +PIC16LC63A;0;0;pic_fuses +PIC16LC64A;0;0;pic_fuses +PIC16LC65A;0;0;pic_fuses +PIC16LC65B;0;0;pic_fuses +PIC16LC66;0;0;pic_fuses +PIC16LC67;0;0;pic_fuses +PIC16LC71;0;0;pic_fuses +PIC16LC710;0;0;pic_fuses +PIC16LC711;0;0;pic_fuses +PIC16LC712;0;0;pic_fuses +PIC16LC716;0;0;pic_fuses +PIC16LC717;0;0;pic_fuses +PIC16LC72;0;0;pic_fuses +PIC16LC72A;0;0;pic_fuses +PIC16LC73A;0;0;pic_fuses +PIC16LC73B;0;0;pic_fuses +PIC16LC74;0;0;pic_fuses +PIC16LC74A;0;0;pic_fuses +PIC16LC74B;0;0;pic_fuses +PIC16LC76;0;0;pic_fuses +PIC16LC77;0;0;pic_fuses +PIC16LC773;0;0;pic_fuses +PIC16LC774;0;0;pic_fuses +PIC16LC781;0;0;pic_fuses +PIC16LC782;0;0;pic_fuses +PIC16LCE623;0;0;pic_fuses +PIC16LF505;0;0;pic_fuses +PIC16LF506;0;0;pic_fuses +PIC16LF526;0;0;pic_fuses +PIC16LF54;0;0;pic_fuses +PIC16LF57;0;0;pic_fuses +PIC16LF59;0;0;pic_fuses +PIC16LF627A;4160;5;pic_fuses +PIC16LF628A;4192;5;pic_fuses +PIC16LF631;5152;5;pic_fuses +PIC16LF639;4256;5;pic_fuses +PIC16LF648A;4352;5;pic_fuses +PIC16LF677;5184;5;pic_fuses +PIC16LF685;1184;5;pic_fuses +PIC16LF687;4896;5;pic_fuses +PIC16LF689;4928;5;pic_fuses +PIC16LF690;5120;5;pic_fuses +PIC16LF722;6528;5;pic2_fuses +PIC16LF722A;7008;5;pic2_fuses +PIC16LF723;6496;5;pic2_fuses +PIC16LF723A;6976;5;pic2_fuses +PIC16LF724;6464;5;pic2_fuses +PIC16LF726;6432;5;pic2_fuses +PIC16LF727;6400;5;pic2_fuses +PIC16LF73;1536;5;pic_fuses +PIC16LF737;2976;5;pic2_fuses +PIC16LF74;1568;5;pic_fuses +PIC16LF747;3040;5;pic2_fuses +PIC16LF76;1600;5;pic_fuses +PIC16LF767;3744;5;pic2_fuses +PIC16LF77;1632;5;pic_fuses +PIC16LF777;3552;5;pic2_fuses +PIC16LF818;1216;5;pic_fuses +PIC16LF819;1248;5;pic_fuses +PIC16LF83;0;0;pic_fuses +PIC16LF84;0;0;pic_fuses +PIC16LF84A;1376;5;pic_fuses +PIC16LF87;1824;5;pic_fuses +PIC16LF870;3328;5;pic_fuses +PIC16LF871;3360;5;pic_fuses +PIC16LF872;2272;5;pic_fuses +PIC16LF873;2400;5;pic_fuses +PIC16LF873A;3648;5;pic_fuses +PIC16LF874;2336;5;pic_fuses +PIC16LF874A;3680;5;pic_fuses +PIC16LF876;2528;5;pic_fuses +PIC16LF876A;3584;5;pic_fuses +PIC16LF877;2464;5;pic_fuses +PIC16LF877A;3616;5;pic_fuses +PIC16LF88;1888;5;pic2_fuses +PIC16LF913;5088;5;pic_fuses +PIC16LF914;5056;5;pic_fuses +PIC16LF916;5024;5;pic_fuses +PIC16LF917;4992;5;pic_fuses +PIC16LF946;5216;5;pic_fuses +PIC18F2221;8544;4;pic3_fuses +PIC18F2321;8480;4;pic3_fuses +PIC18F2410;4448;4;pic3_fuses +PIC18F242;1152;4;pic3_fuses +PIC18F2420;4416;4;pic3_fuses +PIC18F2423;4432;4;pic3_fuses +PIC18F2450;9248;4;pic3_fuses +PIC18F2455;4704;4;pic3_fuses +PIC18F2458;10848;4;pic3_fuses +PIC18F248;2048;4;pic3_fuses +PIC18F2480;6880;4;pic3_fuses +PIC18F24J10;7424;4;pic4_fuses +PIC18F24J11;19840;4;pic4_fuses +PIC18F24J50;19456;4;pic4_fuses +PIC18F2510;4384;4;pic3_fuses +PIC18F2515;3296;4;pic3_fuses +PIC18F252;1024;4;pic3_fuses +PIC18F2520;4352;4;pic3_fuses +PIC18F2523;4368;4;pic3_fuses +PIC18F2525;3264;4;pic3_fuses +PIC18F2550;4672;4;pic3_fuses +PIC18F2553;10816;4;pic3_fuses +PIC18F258;2112;4;pic3_fuses +PIC18F2580;6848;4;pic3_fuses +PIC18F2585;3808;4;pic3_fuses +PIC18F25J10;7168;4;pic4_fuses +PIC18F25J11;19872;4;pic4_fuses +PIC18F25J50;19488;4;pic4_fuses +PIC18F2610;3232;4;pic3_fuses +PIC18F2620;3200;4;pic3_fuses +PIC18F2680;3776;4;pic3_fuses +PIC18F2682;9984;4;pic3_fuses +PIC18F2685;10016;4;pic3_fuses +PIC18F26J11;19904;4;pic4_fuses +PIC18F26J50;19520;4;pic4_fuses +PIC18F4221;8512;4;pic3_fuses +PIC18F4321;8448;4;pic3_fuses +PIC18F4410;4320;4;pic3_fuses +PIC18F442;1184;4;pic3_fuses +PIC18F4420;4288;4;pic3_fuses +PIC18F4423;4304;4;pic3_fuses +PIC18F4450;9216;4;pic3_fuses +PIC18F4455;4640;4;pic3_fuses +PIC18F4458;10784;4;pic3_fuses +PIC18F448;2080;4;pic3_fuses +PIC18F4480;6816;4;pic3_fuses +PIC18F44J10;7456;4;pic4_fuses +PIC18F44J11;19936;4;pic4_fuses +PIC18F44J50;19552;4;pic4_fuses +PIC18F4510;4256;4;pic3_fuses +PIC18F4515;3168;4;pic3_fuses +PIC18F452;1056;4;pic3_fuses +PIC18F4520;4224;4;pic3_fuses +PIC18F4523;4240;4;pic3_fuses +PIC18F4525;3136;4;pic3_fuses +PIC18F4550;4608;4;pic3_fuses +PIC18F4553;10752;4;pic3_fuses +PIC18F458;2144;4;pic3_fuses +PIC18F4580;6784;4;pic3_fuses +PIC18F4585;3744;4;pic3_fuses +PIC18F45J10;7200;4;pic4_fuses +PIC18F45J11;19968;4;pic4_fuses +PIC18F45J50;19584;4;pic4_fuses +PIC18F4610;3104;4;pic3_fuses +PIC18F4620;3072;4;pic3_fuses +PIC18F4680;3712;4;pic3_fuses +PIC18F4682;10048;4;pic3_fuses +PIC18F4685;10080;4;pic3_fuses +PIC18F46J11;20000;4;pic4_fuses +PIC18F46J50;19616;4;pic4_fuses +PIC18F63J11;14592;4;pic4_fuses +PIC18F63J90;14336;4;pic4_fuses +PIC18F64J11;14624;4;pic4_fuses +PIC18F64J90;14368;4;pic4_fuses +PIC18F65J10;5408;4;pic4_fuses +PIC18F65J11;14688;4;pic4_fuses +PIC18F65J15;5440;4;pic4_fuses +PIC18F65J50;16640;4;pic4_fuses +PIC18F65J90;14432;4;pic4_fuses +PIC18F66J10;5472;4;pic4_fuses +PIC18F66J11;17472;4;pic4_fuses +PIC18F66J15;5504;4;pic4_fuses +PIC18F66J16;17504;4;pic4_fuses +PIC18F66J50;16704;4;pic4_fuses +PIC18F66J55;16736;4;pic4_fuses +PIC18F66J90;20480;4;pic4_fuses +PIC18F66J93;20544;4;pic4_fuses +PIC18F67J10;5536;4;pic4_fuses +PIC18F67J11;17536;4;pic4_fuses +PIC18F67J50;16768;4;pic4_fuses +PIC18F67J90;20512;4;pic4_fuses +PIC18F67J93;20576;4;pic4_fuses +PIC18F83J11;14720;4;pic4_fuses +PIC18F83J90;14464;4;pic4_fuses +PIC18F84J11;14752;4;pic4_fuses +PIC18F84J90;14496;4;pic4_fuses +PIC18F85J10;5600;4;pic4_fuses +PIC18F85J11;14816;4;pic4_fuses +PIC18F85J15;5888;4;pic4_fuses +PIC18F85J50;16800;4;pic4_fuses +PIC18F85J90;14560;4;pic4_fuses +PIC18F86J10;5920;4;pic4_fuses +PIC18F86J11;17632;4;pic4_fuses +PIC18F86J15;5952;4;pic4_fuses +PIC18F86J16;17664;4;pic4_fuses +PIC18F86J50;16864;4;pic4_fuses +PIC18F86J55;16896;4;pic4_fuses +PIC18F86J90;20608;4;pic4_fuses +PIC18F86J93;20672;4;pic4_fuses +PIC18F87J10;5984;4;pic4_fuses +PIC18F87J11;17696;4;pic4_fuses +PIC18F87J50;16928;4;pic4_fuses +PIC18F87J90;20640;4;pic4_fuses +PIC18F87J93;20704;4;pic4_fuses +PIC18LF2221;8544;4;pic3_fuses +PIC18LF2321;8480;4;pic3_fuses +PIC18LF2410;4448;4;pic3_fuses +PIC18LF242;1152;4;pic3_fuses +PIC18LF2420;4416;4;pic3_fuses +PIC18LF2423;4432;4;pic3_fuses +PIC18LF2450;9248;4;pic3_fuses +PIC18LF2455;4704;4;pic3_fuses +PIC18LF2458;10848;4;pic3_fuses +PIC18LF248;2048;4;pic3_fuses +PIC18LF2480;6880;4;pic3_fuses +PIC18LF24J10;7488;4;pic4_fuses +PIC18LF24J11;20032;4;pic4_fuses +PIC18LF24J50;19648;4;pic4_fuses +PIC18LF2510;4384;4;pic3_fuses +PIC18LF2515;3296;4;pic3_fuses +PIC18LF252;1024;4;pic3_fuses +PIC18LF2520;4352;4;pic3_fuses +PIC18LF2523;4368;4;pic3_fuses +PIC18LF2525;3264;4;pic3_fuses +PIC18LF2550;4672;4;pic3_fuses +PIC18LF2553;10816;4;pic3_fuses +PIC18LF258;2112;4;pic3_fuses +PIC18LF2580;6848;4;pic3_fuses +PIC18LF2585;3808;4;pic3_fuses +PIC18LF25J10;7232;4;pic4_fuses +PIC18LF25J11;20064;4;pic4_fuses +PIC18LF25J50;19680;4;pic4_fuses +PIC18LF2610;3232;4;pic3_fuses +PIC18LF2620;3200;4;pic3_fuses +PIC18LF2680;3776;4;pic3_fuses +PIC18LF2682;9984;4;pic3_fuses +PIC18LF2685;10016;4;pic3_fuses +PIC18LF26J11;20096;4;pic4_fuses +PIC18LF26J50;19712;4;pic4_fuses +PIC18LF4221;8512;4;pic3_fuses +PIC18LF4321;8448;4;pic3_fuses +PIC18LF4410;4320;4;pic3_fuses +PIC18LF442;1184;4;pic3_fuses +PIC18LF4420;4288;4;pic3_fuses +PIC18LF4423;4304;4;pic3_fuses +PIC18LF4450;9216;4;pic3_fuses +PIC18LF4455;4640;4;pic3_fuses +PIC18LF4458;10784;4;pic3_fuses +PIC18LF448;2080;4;pic3_fuses +PIC18LF4480;6816;4;pic3_fuses +PIC18LF44J10;7520;4;pic4_fuses +PIC18LF44J11;20128;4;pic4_fuses +PIC18LF44J50;19744;4;pic4_fuses +PIC18LF4510;4256;4;pic3_fuses +PIC18LF4515;3168;4;pic3_fuses +PIC18LF452;1056;4;pic3_fuses +PIC18LF4520;4224;4;pic3_fuses +PIC18LF4523;4240;4;pic3_fuses +PIC18LF4525;3136;4;pic3_fuses +PIC18LF4550;4608;4;pic3_fuses +PIC18LF4553;10752;4;pic3_fuses +PIC18LF458;2144;4;pic3_fuses +PIC18LF4580;6784;4;pic3_fuses +PIC18LF4585;3744;4;pic3_fuses +PIC18LF45J10;7264;4;pic4_fuses +PIC18LF45J11;20160;4;pic4_fuses +PIC18LF45J50;19776;4;pic4_fuses +PIC18LF4610;3104;4;pic3_fuses +PIC18LF4620;3072;4;pic3_fuses +PIC18LF4680;3712;4;pic3_fuses +PIC18LF4682;10048;4;pic3_fuses +PIC18LF4685;10080;4;pic3_fuses +PIC18LF46J11;20192;4;pic4_fuses +PIC18LF46J50;19808;4;pic4_fuses +PIC18LF63J11;14592;4;pic4_fuses +PIC18LF63J90;14336;4;pic4_fuses +PIC18LF64J11;14624;4;pic4_fuses +PIC18LF64J90;14368;4;pic4_fuses +PIC18LF65J11;14688;4;pic4_fuses +PIC18LF65J90;14432;4;pic4_fuses +PIC18LF66J10;5472;4;pic4_fuses +PIC18LF83J11;14720;4;pic4_fuses +PIC18LF83J90;14464;4;pic4_fuses +PIC18LF84J11;14752;4;pic4_fuses +PIC18LF84J90;14496;4;pic4_fuses +PIC18LF85J11;14816;4;pic4_fuses +PIC18LF85J90;14560;4;pic4_fuses