diff --git a/.vs/PolarisBiosEditor/v15/.suo b/.vs/PolarisBiosEditor/v15/.suo
new file mode 100644
index 0000000..2faf8a0
Binary files /dev/null and b/.vs/PolarisBiosEditor/v15/.suo differ
diff --git a/.vs/PolarisBiosEditor/v15/sqlite3/storage.ide b/.vs/PolarisBiosEditor/v15/sqlite3/storage.ide
new file mode 100644
index 0000000..ce8cdfe
Binary files /dev/null and b/.vs/PolarisBiosEditor/v15/sqlite3/storage.ide differ
diff --git a/App.config b/App.config
new file mode 100644
index 0000000..bae5d6d
--- /dev/null
+++ b/App.config
@@ -0,0 +1,6 @@
+
+
+
+
+
+
diff --git a/PolarisBiosEditor.Designer.cs b/PolarisBiosEditor.Designer.cs
new file mode 100644
index 0000000..5beb85a
--- /dev/null
+++ b/PolarisBiosEditor.Designer.cs
@@ -0,0 +1,665 @@
+namespace PolarisBiosEditor
+{
+ partial class PolarisBiosEditor
+ {
+ ///
+ /// Required designer variable.
+ ///
+ private System.ComponentModel.IContainer components = null;
+
+ ///
+ /// Clean up any resources being used.
+ ///
+ /// true if managed resources should be disposed; otherwise, false.
+ protected override void Dispose(bool disposing)
+ {
+ if (disposing && (components != null))
+ {
+ components.Dispose();
+ }
+ base.Dispose(disposing);
+ }
+
+ #region Windows Form Designer generated code
+
+ ///
+ /// Required method for Designer support - do not modify
+ /// the contents of this method with the code editor.
+ ///
+ private void InitializeComponent()
+ {
+ System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(PolarisBiosEditor));
+ this.open = new System.Windows.Forms.Button();
+ this.save = new System.Windows.Forms.Button();
+ this.txtChecksum = new System.Windows.Forms.TextBox();
+ this.txtBIOSBootupMessage = new System.Windows.Forms.TextBox();
+ this.boxROM = new System.Windows.Forms.GroupBox();
+ this.tableROM = new System.Windows.Forms.ListView();
+ this.columnHeader1 = ((System.Windows.Forms.ColumnHeader)(new System.Windows.Forms.ColumnHeader()));
+ this.columnHeader2 = ((System.Windows.Forms.ColumnHeader)(new System.Windows.Forms.ColumnHeader()));
+ this.boxPOWERPLAY = new System.Windows.Forms.GroupBox();
+ this.tablePOWERPLAY = new System.Windows.Forms.ListView();
+ this.columnHeader3 = ((System.Windows.Forms.ColumnHeader)(new System.Windows.Forms.ColumnHeader()));
+ this.columnHeader4 = ((System.Windows.Forms.ColumnHeader)(new System.Windows.Forms.ColumnHeader()));
+ this.boxPOWERTUNE = new System.Windows.Forms.GroupBox();
+ this.tablePOWERTUNE = new System.Windows.Forms.ListView();
+ this.columnHeader5 = ((System.Windows.Forms.ColumnHeader)(new System.Windows.Forms.ColumnHeader()));
+ this.columnHeader6 = ((System.Windows.Forms.ColumnHeader)(new System.Windows.Forms.ColumnHeader()));
+ this.boxFAN = new System.Windows.Forms.GroupBox();
+ this.tableFAN = new System.Windows.Forms.ListView();
+ this.columnHeader9 = ((System.Windows.Forms.ColumnHeader)(new System.Windows.Forms.ColumnHeader()));
+ this.columnHeader10 = ((System.Windows.Forms.ColumnHeader)(new System.Windows.Forms.ColumnHeader()));
+ this.boxGPU = new System.Windows.Forms.GroupBox();
+ this.tableGPU = new System.Windows.Forms.ListView();
+ this.columnHeader11 = ((System.Windows.Forms.ColumnHeader)(new System.Windows.Forms.ColumnHeader()));
+ this.columnHeader12 = ((System.Windows.Forms.ColumnHeader)(new System.Windows.Forms.ColumnHeader()));
+ this.boxMEM = new System.Windows.Forms.GroupBox();
+ this.tableMEMORY = new System.Windows.Forms.ListView();
+ this.columnHeader13 = ((System.Windows.Forms.ColumnHeader)(new System.Windows.Forms.ColumnHeader()));
+ this.columnHeader14 = ((System.Windows.Forms.ColumnHeader)(new System.Windows.Forms.ColumnHeader()));
+ this.boxVRAM = new System.Windows.Forms.GroupBox();
+ this.tableVRAM_TIMING = new System.Windows.Forms.ListView();
+ this.columnHeader15 = ((System.Windows.Forms.ColumnHeader)(new System.Windows.Forms.ColumnHeader()));
+ this.columnHeader16 = ((System.Windows.Forms.ColumnHeader)(new System.Windows.Forms.ColumnHeader()));
+ this.listVRAM = new System.Windows.Forms.ComboBox();
+ this.tableVRAM = new System.Windows.Forms.ListView();
+ this.columnHeader7 = ((System.Windows.Forms.ColumnHeader)(new System.Windows.Forms.ColumnHeader()));
+ this.columnHeader8 = ((System.Windows.Forms.ColumnHeader)(new System.Windows.Forms.ColumnHeader()));
+ this.editSubItem1 = new System.Windows.Forms.TextBox();
+ this.editSubItem2 = new System.Windows.Forms.TextBox();
+ this.apply = new System.Windows.Forms.Button();
+ this.button1 = new System.Windows.Forms.Button();
+ this.groupBox3 = new System.Windows.Forms.GroupBox();
+ this.RbETH = new System.Windows.Forms.RadioButton();
+ this.RbXMR = new System.Windows.Forms.RadioButton();
+ this.groupBox2 = new System.Windows.Forms.GroupBox();
+ this.RbPower = new System.Windows.Forms.RadioButton();
+ this.RbOC = new System.Windows.Forms.RadioButton();
+ this.groupBox1 = new System.Windows.Forms.GroupBox();
+ this.RbWin = new System.Windows.Forms.RadioButton();
+ this.RbLin = new System.Windows.Forms.RadioButton();
+ this.linkLabel1 = new System.Windows.Forms.LinkLabel();
+ this.boxROM.SuspendLayout();
+ this.boxPOWERPLAY.SuspendLayout();
+ this.boxPOWERTUNE.SuspendLayout();
+ this.boxFAN.SuspendLayout();
+ this.boxGPU.SuspendLayout();
+ this.boxMEM.SuspendLayout();
+ this.boxVRAM.SuspendLayout();
+ this.groupBox3.SuspendLayout();
+ this.groupBox2.SuspendLayout();
+ this.groupBox1.SuspendLayout();
+ this.SuspendLayout();
+ //
+ // open
+ //
+ this.open.Location = new System.Drawing.Point(12, 12);
+ this.open.Name = "open";
+ this.open.Size = new System.Drawing.Size(75, 23);
+ this.open.TabIndex = 0;
+ this.open.Text = "OPEN BIOS";
+ this.open.UseVisualStyleBackColor = true;
+ this.open.Click += new System.EventHandler(this.OpenFileDialog_Click);
+ //
+ // save
+ //
+ this.save.Location = new System.Drawing.Point(93, 12);
+ this.save.Name = "save";
+ this.save.Size = new System.Drawing.Size(75, 23);
+ this.save.TabIndex = 1;
+ this.save.Text = "SAVE AS";
+ this.save.UseVisualStyleBackColor = true;
+ this.save.Click += new System.EventHandler(this.SaveFileDialog_Click);
+ //
+ // txtChecksum
+ //
+ this.txtChecksum.Font = new System.Drawing.Font("Courier New", 8.25F);
+ this.txtChecksum.Location = new System.Drawing.Point(174, 14);
+ this.txtChecksum.Name = "txtChecksum";
+ this.txtChecksum.Size = new System.Drawing.Size(100, 23);
+ this.txtChecksum.TabIndex = 2;
+ //
+ // txtBIOSBootupMessage
+ //
+ this.txtBIOSBootupMessage.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom)
+ | System.Windows.Forms.AnchorStyles.Left)
+ | System.Windows.Forms.AnchorStyles.Right)));
+ this.txtBIOSBootupMessage.Font = new System.Drawing.Font("Courier New", 8.25F);
+ this.txtBIOSBootupMessage.Location = new System.Drawing.Point(280, 14);
+ this.txtBIOSBootupMessage.Name = "txtBIOSBootupMessage";
+ this.txtBIOSBootupMessage.Size = new System.Drawing.Size(815, 23);
+ this.txtBIOSBootupMessage.TabIndex = 5;
+ //
+ // boxROM
+ //
+ this.boxROM.Controls.Add(this.tableROM);
+ this.boxROM.Location = new System.Drawing.Point(9, 41);
+ this.boxROM.Name = "boxROM";
+ this.boxROM.Size = new System.Drawing.Size(265, 140);
+ this.boxROM.TabIndex = 3;
+ this.boxROM.TabStop = false;
+ this.boxROM.Text = "ROM";
+ //
+ // tableROM
+ //
+ this.tableROM.Columns.AddRange(new System.Windows.Forms.ColumnHeader[] {
+ this.columnHeader1,
+ this.columnHeader2});
+ this.tableROM.Dock = System.Windows.Forms.DockStyle.Fill;
+ this.tableROM.Font = new System.Drawing.Font("Courier New", 8.25F);
+ this.tableROM.Location = new System.Drawing.Point(3, 18);
+ this.tableROM.Name = "tableROM";
+ this.tableROM.Size = new System.Drawing.Size(259, 119);
+ this.tableROM.TabIndex = 4;
+ this.tableROM.UseCompatibleStateImageBehavior = false;
+ this.tableROM.View = System.Windows.Forms.View.Details;
+ //
+ // columnHeader1
+ //
+ this.columnHeader1.Text = "Name";
+ this.columnHeader1.Width = 40;
+ //
+ // columnHeader2
+ //
+ this.columnHeader2.Text = "Value";
+ //
+ // boxPOWERPLAY
+ //
+ this.boxPOWERPLAY.Controls.Add(this.tablePOWERPLAY);
+ this.boxPOWERPLAY.Location = new System.Drawing.Point(9, 184);
+ this.boxPOWERPLAY.Name = "boxPOWERPLAY";
+ this.boxPOWERPLAY.Size = new System.Drawing.Size(265, 157);
+ this.boxPOWERPLAY.TabIndex = 0;
+ this.boxPOWERPLAY.TabStop = false;
+ this.boxPOWERPLAY.Text = "POWERPLAY";
+ //
+ // tablePOWERPLAY
+ //
+ this.tablePOWERPLAY.Columns.AddRange(new System.Windows.Forms.ColumnHeader[] {
+ this.columnHeader3,
+ this.columnHeader4});
+ this.tablePOWERPLAY.Dock = System.Windows.Forms.DockStyle.Fill;
+ this.tablePOWERPLAY.Font = new System.Drawing.Font("Courier New", 8.25F);
+ this.tablePOWERPLAY.Location = new System.Drawing.Point(3, 18);
+ this.tablePOWERPLAY.Name = "tablePOWERPLAY";
+ this.tablePOWERPLAY.Size = new System.Drawing.Size(259, 136);
+ this.tablePOWERPLAY.TabIndex = 5;
+ this.tablePOWERPLAY.UseCompatibleStateImageBehavior = false;
+ this.tablePOWERPLAY.View = System.Windows.Forms.View.Details;
+ //
+ // columnHeader3
+ //
+ this.columnHeader3.Text = "Name";
+ //
+ // columnHeader4
+ //
+ this.columnHeader4.Text = "Value";
+ //
+ // boxPOWERTUNE
+ //
+ this.boxPOWERTUNE.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom)
+ | System.Windows.Forms.AnchorStyles.Left)));
+ this.boxPOWERTUNE.Controls.Add(this.tablePOWERTUNE);
+ this.boxPOWERTUNE.Location = new System.Drawing.Point(277, 374);
+ this.boxPOWERTUNE.Name = "boxPOWERTUNE";
+ this.boxPOWERTUNE.Size = new System.Drawing.Size(260, 252);
+ this.boxPOWERTUNE.TabIndex = 0;
+ this.boxPOWERTUNE.TabStop = false;
+ this.boxPOWERTUNE.Text = "POWERTUNE";
+ //
+ // tablePOWERTUNE
+ //
+ this.tablePOWERTUNE.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom)
+ | System.Windows.Forms.AnchorStyles.Left)));
+ this.tablePOWERTUNE.Columns.AddRange(new System.Windows.Forms.ColumnHeader[] {
+ this.columnHeader5,
+ this.columnHeader6});
+ this.tablePOWERTUNE.Font = new System.Drawing.Font("Courier New", 8.25F);
+ this.tablePOWERTUNE.Location = new System.Drawing.Point(3, 16);
+ this.tablePOWERTUNE.Name = "tablePOWERTUNE";
+ this.tablePOWERTUNE.Size = new System.Drawing.Size(254, 233);
+ this.tablePOWERTUNE.TabIndex = 6;
+ this.tablePOWERTUNE.UseCompatibleStateImageBehavior = false;
+ this.tablePOWERTUNE.View = System.Windows.Forms.View.Details;
+ //
+ // columnHeader5
+ //
+ this.columnHeader5.Text = "Name";
+ //
+ // columnHeader6
+ //
+ this.columnHeader6.Text = "Value";
+ //
+ // boxFAN
+ //
+ this.boxFAN.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom)
+ | System.Windows.Forms.AnchorStyles.Left)));
+ this.boxFAN.Controls.Add(this.tableFAN);
+ this.boxFAN.Location = new System.Drawing.Point(9, 344);
+ this.boxFAN.Name = "boxFAN";
+ this.boxFAN.Size = new System.Drawing.Size(265, 282);
+ this.boxFAN.TabIndex = 0;
+ this.boxFAN.TabStop = false;
+ this.boxFAN.Text = "FAN";
+ //
+ // tableFAN
+ //
+ this.tableFAN.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom)
+ | System.Windows.Forms.AnchorStyles.Left)));
+ this.tableFAN.Columns.AddRange(new System.Windows.Forms.ColumnHeader[] {
+ this.columnHeader9,
+ this.columnHeader10});
+ this.tableFAN.Font = new System.Drawing.Font("Courier New", 8.25F);
+ this.tableFAN.Location = new System.Drawing.Point(3, 16);
+ this.tableFAN.Name = "tableFAN";
+ this.tableFAN.Size = new System.Drawing.Size(259, 263);
+ this.tableFAN.TabIndex = 7;
+ this.tableFAN.UseCompatibleStateImageBehavior = false;
+ this.tableFAN.View = System.Windows.Forms.View.Details;
+ //
+ // columnHeader9
+ //
+ this.columnHeader9.Text = "Name";
+ //
+ // columnHeader10
+ //
+ this.columnHeader10.Text = "Value";
+ //
+ // boxGPU
+ //
+ this.boxGPU.Controls.Add(this.tableGPU);
+ this.boxGPU.Location = new System.Drawing.Point(277, 41);
+ this.boxGPU.Name = "boxGPU";
+ this.boxGPU.Size = new System.Drawing.Size(260, 203);
+ this.boxGPU.TabIndex = 0;
+ this.boxGPU.TabStop = false;
+ this.boxGPU.Text = "GPU";
+ //
+ // tableGPU
+ //
+ this.tableGPU.Columns.AddRange(new System.Windows.Forms.ColumnHeader[] {
+ this.columnHeader11,
+ this.columnHeader12});
+ this.tableGPU.Dock = System.Windows.Forms.DockStyle.Fill;
+ this.tableGPU.Font = new System.Drawing.Font("Courier New", 8.25F);
+ this.tableGPU.Location = new System.Drawing.Point(3, 18);
+ this.tableGPU.Name = "tableGPU";
+ this.tableGPU.Size = new System.Drawing.Size(254, 182);
+ this.tableGPU.TabIndex = 8;
+ this.tableGPU.UseCompatibleStateImageBehavior = false;
+ this.tableGPU.View = System.Windows.Forms.View.Details;
+ //
+ // columnHeader11
+ //
+ this.columnHeader11.Text = "MHz";
+ //
+ // columnHeader12
+ //
+ this.columnHeader12.Text = "mV";
+ //
+ // boxMEM
+ //
+ this.boxMEM.Controls.Add(this.tableMEMORY);
+ this.boxMEM.Location = new System.Drawing.Point(277, 247);
+ this.boxMEM.Name = "boxMEM";
+ this.boxMEM.Size = new System.Drawing.Size(260, 124);
+ this.boxMEM.TabIndex = 0;
+ this.boxMEM.TabStop = false;
+ this.boxMEM.Text = "MEMORY";
+ //
+ // tableMEMORY
+ //
+ this.tableMEMORY.Columns.AddRange(new System.Windows.Forms.ColumnHeader[] {
+ this.columnHeader13,
+ this.columnHeader14});
+ this.tableMEMORY.Dock = System.Windows.Forms.DockStyle.Fill;
+ this.tableMEMORY.Font = new System.Drawing.Font("Courier New", 8.25F);
+ this.tableMEMORY.Location = new System.Drawing.Point(3, 18);
+ this.tableMEMORY.Name = "tableMEMORY";
+ this.tableMEMORY.Size = new System.Drawing.Size(254, 103);
+ this.tableMEMORY.TabIndex = 9;
+ this.tableMEMORY.UseCompatibleStateImageBehavior = false;
+ this.tableMEMORY.View = System.Windows.Forms.View.Details;
+ //
+ // columnHeader13
+ //
+ this.columnHeader13.Text = "MHz";
+ //
+ // columnHeader14
+ //
+ this.columnHeader14.Text = "mV";
+ //
+ // boxVRAM
+ //
+ this.boxVRAM.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom)
+ | System.Windows.Forms.AnchorStyles.Left)
+ | System.Windows.Forms.AnchorStyles.Right)));
+ this.boxVRAM.Controls.Add(this.tableVRAM_TIMING);
+ this.boxVRAM.Controls.Add(this.listVRAM);
+ this.boxVRAM.Controls.Add(this.tableVRAM);
+ this.boxVRAM.Location = new System.Drawing.Point(540, 41);
+ this.boxVRAM.Name = "boxVRAM";
+ this.boxVRAM.Size = new System.Drawing.Size(552, 585);
+ this.boxVRAM.TabIndex = 0;
+ this.boxVRAM.TabStop = false;
+ this.boxVRAM.Text = "VRAM";
+ //
+ // tableVRAM_TIMING
+ //
+ this.tableVRAM_TIMING.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom)
+ | System.Windows.Forms.AnchorStyles.Left)
+ | System.Windows.Forms.AnchorStyles.Right)));
+ this.tableVRAM_TIMING.Columns.AddRange(new System.Windows.Forms.ColumnHeader[] {
+ this.columnHeader15,
+ this.columnHeader16});
+ this.tableVRAM_TIMING.Font = new System.Drawing.Font("Courier New", 8.25F);
+ this.tableVRAM_TIMING.Location = new System.Drawing.Point(3, 209);
+ this.tableVRAM_TIMING.Name = "tableVRAM_TIMING";
+ this.tableVRAM_TIMING.Size = new System.Drawing.Size(546, 373);
+ this.tableVRAM_TIMING.TabIndex = 11;
+ this.tableVRAM_TIMING.UseCompatibleStateImageBehavior = false;
+ this.tableVRAM_TIMING.View = System.Windows.Forms.View.Details;
+ //
+ // columnHeader15
+ //
+ this.columnHeader15.Text = "MHz";
+ //
+ // columnHeader16
+ //
+ this.columnHeader16.Text = "Timing Strap";
+ this.columnHeader16.Width = 110;
+ //
+ // listVRAM
+ //
+ this.listVRAM.Dock = System.Windows.Forms.DockStyle.Top;
+ this.listVRAM.Font = new System.Drawing.Font("Courier New", 8.25F);
+ this.listVRAM.FormattingEnabled = true;
+ this.listVRAM.Location = new System.Drawing.Point(3, 18);
+ this.listVRAM.Name = "listVRAM";
+ this.listVRAM.Size = new System.Drawing.Size(546, 25);
+ this.listVRAM.TabIndex = 12;
+ this.listVRAM.SelectedIndexChanged += new System.EventHandler(this.listVRAM_SelectedIndexChanged);
+ this.listVRAM.SelectedValueChanged += new System.EventHandler(this.listVRAM_SelectionChanged);
+ //
+ // tableVRAM
+ //
+ this.tableVRAM.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left)
+ | System.Windows.Forms.AnchorStyles.Right)));
+ this.tableVRAM.Columns.AddRange(new System.Windows.Forms.ColumnHeader[] {
+ this.columnHeader7,
+ this.columnHeader8});
+ this.tableVRAM.Font = new System.Drawing.Font("Courier New", 8.25F);
+ this.tableVRAM.Location = new System.Drawing.Point(3, 43);
+ this.tableVRAM.Name = "tableVRAM";
+ this.tableVRAM.Size = new System.Drawing.Size(546, 160);
+ this.tableVRAM.TabIndex = 10;
+ this.tableVRAM.UseCompatibleStateImageBehavior = false;
+ this.tableVRAM.View = System.Windows.Forms.View.Details;
+ //
+ // columnHeader7
+ //
+ this.columnHeader7.Text = "Name";
+ //
+ // columnHeader8
+ //
+ this.columnHeader8.Text = "Value";
+ //
+ // editSubItem1
+ //
+ this.editSubItem1.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left)
+ | System.Windows.Forms.AnchorStyles.Right)));
+ this.editSubItem1.Font = new System.Drawing.Font("Courier New", 8.25F);
+ this.editSubItem1.Location = new System.Drawing.Point(100, 643);
+ this.editSubItem1.Name = "editSubItem1";
+ this.editSubItem1.Size = new System.Drawing.Size(206, 23);
+ this.editSubItem1.TabIndex = 2;
+ //
+ // editSubItem2
+ //
+ this.editSubItem2.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left)
+ | System.Windows.Forms.AnchorStyles.Right)));
+ this.editSubItem2.Font = new System.Drawing.Font("Courier New", 8.25F);
+ this.editSubItem2.Location = new System.Drawing.Point(6, 698);
+ this.editSubItem2.Name = "editSubItem2";
+ this.editSubItem2.Size = new System.Drawing.Size(1083, 23);
+ this.editSubItem2.TabIndex = 2;
+ this.editSubItem2.Click += new System.EventHandler(this.editSubItem2_Click);
+ this.editSubItem2.TextChanged += new System.EventHandler(this.editSubItem2_TextChanged);
+ //
+ // apply
+ //
+ this.apply.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left)));
+ this.apply.Location = new System.Drawing.Point(10, 642);
+ this.apply.Name = "apply";
+ this.apply.Size = new System.Drawing.Size(84, 23);
+ this.apply.TabIndex = 0;
+ this.apply.Text = "APPLY CHG";
+ this.apply.UseVisualStyleBackColor = true;
+ this.apply.Click += new System.EventHandler(this.apply_Click);
+ //
+ // button1
+ //
+ this.button1.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right)));
+ this.button1.Location = new System.Drawing.Point(933, 629);
+ this.button1.Name = "button1";
+ this.button1.Size = new System.Drawing.Size(150, 63);
+ this.button1.TabIndex = 4;
+ this.button1.Text = "ONE CLICK TIMING PATCH";
+ this.button1.UseVisualStyleBackColor = true;
+ this.button1.Click += new System.EventHandler(this.button1_Click);
+ //
+ // groupBox3
+ //
+ this.groupBox3.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right)));
+ this.groupBox3.Controls.Add(this.RbETH);
+ this.groupBox3.Controls.Add(this.RbXMR);
+ this.groupBox3.Enabled = false;
+ this.groupBox3.Location = new System.Drawing.Point(639, 632);
+ this.groupBox3.Name = "groupBox3";
+ this.groupBox3.Size = new System.Drawing.Size(197, 63);
+ this.groupBox3.TabIndex = 13;
+ this.groupBox3.TabStop = false;
+ this.groupBox3.Text = "Algo";
+ //
+ // RbETH
+ //
+ this.RbETH.AutoSize = true;
+ this.RbETH.Enabled = false;
+ this.RbETH.Location = new System.Drawing.Point(6, 16);
+ this.RbETH.Name = "RbETH";
+ this.RbETH.Size = new System.Drawing.Size(57, 21);
+ this.RbETH.TabIndex = 6;
+ this.RbETH.Text = "ETH";
+ this.RbETH.UseVisualStyleBackColor = true;
+ //
+ // RbXMR
+ //
+ this.RbXMR.AutoSize = true;
+ this.RbXMR.Enabled = false;
+ this.RbXMR.Location = new System.Drawing.Point(6, 35);
+ this.RbXMR.Name = "RbXMR";
+ this.RbXMR.Size = new System.Drawing.Size(193, 21);
+ this.RbXMR.TabIndex = 7;
+ this.RbXMR.Text = "CN (XMR, RYO, AEON,...)";
+ this.RbXMR.UseVisualStyleBackColor = true;
+ //
+ // groupBox2
+ //
+ this.groupBox2.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right)));
+ this.groupBox2.Controls.Add(this.RbPower);
+ this.groupBox2.Controls.Add(this.RbOC);
+ this.groupBox2.Enabled = false;
+ this.groupBox2.Location = new System.Drawing.Point(416, 632);
+ this.groupBox2.Name = "groupBox2";
+ this.groupBox2.Size = new System.Drawing.Size(217, 63);
+ this.groupBox2.TabIndex = 12;
+ this.groupBox2.TabStop = false;
+ this.groupBox2.Text = "Power";
+ //
+ // RbPower
+ //
+ this.RbPower.AutoSize = true;
+ this.RbPower.Location = new System.Drawing.Point(6, 16);
+ this.RbPower.Name = "RbPower";
+ this.RbPower.Size = new System.Drawing.Size(113, 21);
+ this.RbPower.TabIndex = 6;
+ this.RbPower.Text = "Power saving";
+ this.RbPower.UseVisualStyleBackColor = true;
+ //
+ // RbOC
+ //
+ this.RbOC.AutoSize = true;
+ this.RbOC.Enabled = false;
+ this.RbOC.Location = new System.Drawing.Point(6, 35);
+ this.RbOC.Name = "RbOC";
+ this.RbOC.Size = new System.Drawing.Size(196, 21);
+ this.RbOC.TabIndex = 7;
+ this.RbOC.Text = "OC with slight undervolting";
+ this.RbOC.UseVisualStyleBackColor = true;
+ //
+ // groupBox1
+ //
+ this.groupBox1.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right)));
+ this.groupBox1.Controls.Add(this.RbWin);
+ this.groupBox1.Controls.Add(this.RbLin);
+ this.groupBox1.Enabled = false;
+ this.groupBox1.Location = new System.Drawing.Point(312, 632);
+ this.groupBox1.Name = "groupBox1";
+ this.groupBox1.Size = new System.Drawing.Size(98, 63);
+ this.groupBox1.TabIndex = 11;
+ this.groupBox1.TabStop = false;
+ this.groupBox1.Text = "OS";
+ //
+ // RbWin
+ //
+ this.RbWin.AutoSize = true;
+ this.RbWin.Enabled = false;
+ this.RbWin.Location = new System.Drawing.Point(6, 16);
+ this.RbWin.Name = "RbWin";
+ this.RbWin.Size = new System.Drawing.Size(85, 21);
+ this.RbWin.TabIndex = 6;
+ this.RbWin.Text = "Windows";
+ this.RbWin.UseVisualStyleBackColor = true;
+ //
+ // RbLin
+ //
+ this.RbLin.AutoSize = true;
+ this.RbLin.Enabled = false;
+ this.RbLin.Location = new System.Drawing.Point(6, 35);
+ this.RbLin.Name = "RbLin";
+ this.RbLin.Size = new System.Drawing.Size(62, 21);
+ this.RbLin.TabIndex = 7;
+ this.RbLin.Text = "Linux";
+ this.RbLin.UseVisualStyleBackColor = true;
+ //
+ // linkLabel1
+ //
+ this.linkLabel1.AutoSize = true;
+ this.linkLabel1.Font = new System.Drawing.Font("Arial", 12F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(238)));
+ this.linkLabel1.LinkColor = System.Drawing.Color.Red;
+ this.linkLabel1.Location = new System.Drawing.Point(12, 671);
+ this.linkLabel1.Name = "linkLabel1";
+ this.linkLabel1.Size = new System.Drawing.Size(163, 24);
+ this.linkLabel1.TabIndex = 14;
+ this.linkLabel1.TabStop = true;
+ this.linkLabel1.Text = "Buy Pro Version";
+ this.linkLabel1.LinkClicked += new System.Windows.Forms.LinkLabelLinkClickedEventHandler(this.linkLabel1_LinkClicked);
+ //
+ // PolarisBiosEditor
+ //
+ this.ClientSize = new System.Drawing.Size(1104, 733);
+ this.Controls.Add(this.linkLabel1);
+ this.Controls.Add(this.groupBox3);
+ this.Controls.Add(this.groupBox2);
+ this.Controls.Add(this.groupBox1);
+ this.Controls.Add(this.button1);
+ this.Controls.Add(this.boxFAN);
+ this.Controls.Add(this.boxVRAM);
+ this.Controls.Add(this.boxMEM);
+ this.Controls.Add(this.boxGPU);
+ this.Controls.Add(this.boxPOWERTUNE);
+ this.Controls.Add(this.boxPOWERPLAY);
+ this.Controls.Add(this.boxROM);
+ this.Controls.Add(this.txtChecksum);
+ this.Controls.Add(this.txtBIOSBootupMessage);
+ this.Controls.Add(this.save);
+ this.Controls.Add(this.open);
+ this.Controls.Add(this.editSubItem1);
+ this.Controls.Add(this.editSubItem2);
+ this.Controls.Add(this.apply);
+ this.Icon = ((System.Drawing.Icon)(resources.GetObject("$this.Icon")));
+ this.Name = "PolarisBiosEditor";
+ this.Text = "PBE";
+ this.Load += new System.EventHandler(this.PolarisBiosEditor_Load);
+ this.boxROM.ResumeLayout(false);
+ this.boxPOWERPLAY.ResumeLayout(false);
+ this.boxPOWERTUNE.ResumeLayout(false);
+ this.boxFAN.ResumeLayout(false);
+ this.boxGPU.ResumeLayout(false);
+ this.boxMEM.ResumeLayout(false);
+ this.boxVRAM.ResumeLayout(false);
+ this.groupBox3.ResumeLayout(false);
+ this.groupBox3.PerformLayout();
+ this.groupBox2.ResumeLayout(false);
+ this.groupBox2.PerformLayout();
+ this.groupBox1.ResumeLayout(false);
+ this.groupBox1.PerformLayout();
+ this.ResumeLayout(false);
+ this.PerformLayout();
+
+ }
+
+ #endregion
+
+ private System.Windows.Forms.Button open;
+ private System.Windows.Forms.Button save;
+ private System.Windows.Forms.TextBox txtChecksum;
+ private System.Windows.Forms.TextBox txtBIOSBootupMessage;
+ private System.Windows.Forms.GroupBox boxROM;
+ private System.Windows.Forms.GroupBox boxPOWERPLAY;
+ private System.Windows.Forms.GroupBox boxPOWERTUNE;
+ private System.Windows.Forms.GroupBox boxFAN;
+ private System.Windows.Forms.GroupBox boxGPU;
+ private System.Windows.Forms.GroupBox boxMEM;
+ private System.Windows.Forms.GroupBox boxVRAM;
+ private System.Windows.Forms.ListView tableROM;
+ private System.Windows.Forms.ListView tablePOWERPLAY;
+ private System.Windows.Forms.ListView tablePOWERTUNE;
+ private System.Windows.Forms.ListView tableFAN;
+ private System.Windows.Forms.ListView tableGPU;
+ private System.Windows.Forms.ListView tableMEMORY;
+ private System.Windows.Forms.ListView tableVRAM;
+ private System.Windows.Forms.ListView tableVRAM_TIMING;
+ private System.Windows.Forms.ComboBox listVRAM;
+ private System.Windows.Forms.ColumnHeader columnHeader1;
+ private System.Windows.Forms.ColumnHeader columnHeader2;
+ private System.Windows.Forms.ColumnHeader columnHeader3;
+ private System.Windows.Forms.ColumnHeader columnHeader4;
+ private System.Windows.Forms.ColumnHeader columnHeader5;
+ private System.Windows.Forms.ColumnHeader columnHeader6;
+ private System.Windows.Forms.ColumnHeader columnHeader9;
+ private System.Windows.Forms.ColumnHeader columnHeader10;
+ private System.Windows.Forms.ColumnHeader columnHeader11;
+ private System.Windows.Forms.ColumnHeader columnHeader12;
+ private System.Windows.Forms.ColumnHeader columnHeader13;
+ private System.Windows.Forms.ColumnHeader columnHeader14;
+ private System.Windows.Forms.ColumnHeader columnHeader15;
+ private System.Windows.Forms.ColumnHeader columnHeader16;
+ private System.Windows.Forms.ColumnHeader columnHeader7;
+ private System.Windows.Forms.ColumnHeader columnHeader8;
+ private System.Windows.Forms.TextBox editSubItem1;
+ private System.Windows.Forms.TextBox editSubItem2;
+ private System.Windows.Forms.Button apply;
+ private System.Windows.Forms.Button button1;
+ private System.Windows.Forms.GroupBox groupBox3;
+ private System.Windows.Forms.RadioButton RbETH;
+ private System.Windows.Forms.RadioButton RbXMR;
+ private System.Windows.Forms.GroupBox groupBox2;
+ private System.Windows.Forms.RadioButton RbPower;
+ private System.Windows.Forms.RadioButton RbOC;
+ private System.Windows.Forms.GroupBox groupBox1;
+ private System.Windows.Forms.RadioButton RbWin;
+ private System.Windows.Forms.RadioButton RbLin;
+ private System.Windows.Forms.LinkLabel linkLabel1;
+ }
+}
diff --git a/PolarisBiosEditor.cs b/PolarisBiosEditor.cs
new file mode 100644
index 0000000..058da9b
--- /dev/null
+++ b/PolarisBiosEditor.cs
@@ -0,0 +1,1587 @@
+using System;
+using System.Collections.Generic;
+using System.Drawing;
+using System.Text;
+using System.Windows.Forms;
+using System.IO;
+using System.Runtime.InteropServices;
+using System.Windows;
+using System.Linq;
+using System.ComponentModel;
+using System.Net;
+
+namespace PolarisBiosEditor
+{
+ public partial class PolarisBiosEditor : Form
+ {
+
+ /* DATA */
+
+ string version = "1.7.0";
+ string programTitle = "PolarisBiosEditor";
+
+
+ string[] manufacturers = new string[] {
+ "SAMSUNG",
+ "ELPIDA",
+ "HYNIX",
+ "MICRON"
+ };
+
+ string[] supportedDeviceID = new string[] { "67DF", "67EF", "1002", "67FF", "699F" };
+
+ string[] timings = new string[]
+ {
+
+ // UberMix 3.1
+ "777000000000000022CC1C00AD615C41C0590E152ECCA60B006007000B031420FA8900A00300000010122F3FBA354019", // new, please test
+ //"777000000000000022CC1C00AD615C41C0590E152ECC8608006007000B031420FA8900A00300000010122F3FBA354019", //old
+
+ // FIXME Try UberMix 3.2 Timing
+ "777000000000000022CC1C00CEE55C46C0590E1532CD66090060070014051420FA8900A00300000012123442C3353C19",
+
+ // Good HYNIX_3
+ "999000000000000022CC1C00ADDD5B44A0551315B74C450A00400600750414206A8900A00200312010112D34C5303F17",
+
+ // Good HYNIX_2
+ "777000000000000022AA1C00B56A6D46C0551017BE8E060C006AE6000C081420EA8900AB030000001B162C31C0313F17",
+
+ // Good Micron
+ //"777000000000000022AA1C0073626C41B0551016BA0D260B006AE60004061420EA8940AA030000001914292EB22E3B16", old
+ "777000000000000022AA1C0073626C41B0551016BA0D260B0060060004061420EA8940AA030000001914292EB22E3B16", // new tested timings (much better xmr performance @ rx560 sapphire pulse)
+ "777000000000000022AA1C00B56A6D4690551014BE8E060C0060060074081420EA8900AB020000001B162C31C02E3F15",// new Micron timing it's actually from Samsung
+
+ // Good Hynix_1
+ "999000000000000022559D0010DE5B4480551312B74C450A00400600750414206A8900A00200312010112D34A42A3816",
+
+ // Good Elpida (fixed with version 1.6.4, see issue #19)
+ "777000000000000022AA1C00315A5B36A0550F15B68C1506004082007C041420CA8980A9020004C01712262B612B3715",
+ //"777000000000000022AA1C00AC615B3CA0550F142C8C1506006004007C041420CA8980A9020004C01712262B612B3715" // new, please test
+
+ // Universal Hynix
+ "777000000000000022AA1C00B56A6D46C0551017BE8E060C006006000C081420EA8900AB030000001B162C31C0313F17"
+ };
+
+ Dictionary rc = new Dictionary();
+
+ [StructLayout(LayoutKind.Explicit, Size = 96, CharSet = CharSet.Ansi)]
+ public class VRAM_TIMING_RX
+ {
+
+ }
+
+ Byte[] buffer;
+ Int32Converter int32 = new Int32Converter();
+ UInt32Converter uint32 = new UInt32Converter();
+
+ string deviceID = "";
+ Boolean hasInternetAccess = false;
+
+ int atom_rom_checksum_offset = 0x21;
+ int atom_rom_header_ptr = 0x48;
+ int atom_rom_header_offset;
+ ATOM_ROM_HEADER atom_rom_header;
+ ATOM_DATA_TABLES atom_data_table;
+
+ int atom_powerplay_offset;
+ ATOM_POWERPLAY_TABLE atom_powerplay_table;
+
+ int atom_powertune_offset;
+ ATOM_POWERTUNE_TABLE atom_powertune_table;
+
+ int atom_fan_offset;
+ ATOM_FAN_TABLE atom_fan_table;
+
+ int atom_mclk_table_offset;
+ ATOM_MCLK_TABLE atom_mclk_table;
+ ATOM_MCLK_ENTRY[] atom_mclk_entries;
+
+ int atom_sclk_table_offset;
+ ATOM_SCLK_TABLE atom_sclk_table;
+ ATOM_SCLK_ENTRY[] atom_sclk_entries;
+
+ int atom_vddc_table_offset;
+ ATOM_VOLTAGE_TABLE atom_vddc_table;
+ ATOM_VOLTAGE_ENTRY[] atom_vddc_entries;
+
+ int atom_vram_info_offset;
+ ATOM_VRAM_INFO atom_vram_info;
+ ATOM_VRAM_ENTRY[] atom_vram_entries;
+ ATOM_VRAM_TIMING_ENTRY[] atom_vram_timing_entries;
+ int atom_vram_index = 0;
+ const int MAX_VRAM_ENTRIES = 48; // e.g. MSI-Armor-RX-580-4GB has 36 entries
+ int atom_vram_timing_offset;
+
+ [StructLayout(LayoutKind.Sequential, Pack = 1)]
+ struct ATOM_COMMON_TABLE_HEADER
+ {
+ Int16 usStructureSize;
+ Byte ucTableFormatRevision;
+ Byte ucTableContentRevision;
+ }
+
+ [StructLayout(LayoutKind.Sequential, Pack = 1)]
+ struct ATOM_ROM_HEADER
+ {
+ public ATOM_COMMON_TABLE_HEADER sHeader;
+ //public UInt32 uaFirmWareSignature;
+ [MarshalAs(UnmanagedType.ByValArray, SizeConst = 0x4)]
+ public Char[] uaFirmWareSignature;
+ public UInt16 usBiosRuntimeSegmentAddress;
+ public UInt16 usProtectedModeInfoOffset;
+ public UInt16 usConfigFilenameOffset;
+ public UInt16 usCRC_BlockOffset;
+ public UInt16 usBIOS_BootupMessageOffset;
+ public UInt16 usInt10Offset;
+ public UInt16 usPciBusDevInitCode;
+ public UInt16 usIoBaseAddress;
+ public UInt16 usSubsystemVendorID;
+ public UInt16 usSubsystemID;
+ public UInt16 usPCI_InfoOffset;
+ public UInt16 usMasterCommandTableOffset;
+ public UInt16 usMasterDataTableOffset;
+ public Byte ucExtendedFunctionCode;
+ public Byte ucReserved;
+ public UInt32 ulPSPDirTableOffset;
+ public UInt16 usVendorID;
+ public UInt16 usDeviceID;
+ }
+
+ String BIOS_BootupMessage;
+
+ [StructLayout(LayoutKind.Sequential, Pack = 1)]
+ struct ATOM_DATA_TABLES
+ {
+ public ATOM_COMMON_TABLE_HEADER sHeader;
+ public UInt16 UtilityPipeLine;
+ public UInt16 MultimediaCapabilityInfo;
+ public UInt16 MultimediaConfigInfo;
+ public UInt16 StandardVESA_Timing;
+ public UInt16 FirmwareInfo;
+ public UInt16 PaletteData;
+ public UInt16 LCD_Info;
+ public UInt16 DIGTransmitterInfo;
+ public UInt16 SMU_Info;
+ public UInt16 SupportedDevicesInfo;
+ public UInt16 GPIO_I2C_Info;
+ public UInt16 VRAM_UsageByFirmware;
+ public UInt16 GPIO_Pin_LUT;
+ public UInt16 VESA_ToInternalModeLUT;
+ public UInt16 GFX_Info;
+ public UInt16 PowerPlayInfo;
+ public UInt16 GPUVirtualizationInfo;
+ public UInt16 SaveRestoreInfo;
+ public UInt16 PPLL_SS_Info;
+ public UInt16 OemInfo;
+ public UInt16 XTMDS_Info;
+ public UInt16 MclkSS_Info;
+ public UInt16 Object_Header;
+ public UInt16 IndirectIOAccess;
+ public UInt16 MC_InitParameter;
+ public UInt16 ASIC_VDDC_Info;
+ public UInt16 ASIC_InternalSS_Info;
+ public UInt16 TV_VideoMode;
+ public UInt16 VRAM_Info;
+ public UInt16 MemoryTrainingInfo;
+ public UInt16 IntegratedSystemInfo;
+ public UInt16 ASIC_ProfilingInfo;
+ public UInt16 VoltageObjectInfo;
+ public UInt16 PowerSourceInfo;
+ public UInt16 ServiceInfo;
+ };
+
+ [StructLayout(LayoutKind.Sequential, Pack = 1)]
+ unsafe struct ATOM_POWERPLAY_TABLE
+ {
+ public ATOM_COMMON_TABLE_HEADER sHeader;
+ public Byte ucTableRevision;
+ public UInt16 usTableSize;
+ public UInt32 ulGoldenPPID;
+ public UInt32 ulGoldenRevision;
+ public UInt16 usFormatID;
+ public UInt16 usVoltageTime;
+ public UInt32 ulPlatformCaps;
+ public UInt32 ulMaxODEngineClock;
+ public UInt32 ulMaxODMemoryClock;
+ public UInt16 usPowerControlLimit;
+ public UInt16 usUlvVoltageOffset;
+ public UInt16 usStateArrayOffset;
+ public UInt16 usFanTableOffset;
+ public UInt16 usThermalControllerOffset;
+ public UInt16 usReserv;
+ public UInt16 usMclkDependencyTableOffset;
+ public UInt16 usSclkDependencyTableOffset;
+ public UInt16 usVddcLookupTableOffset;
+ public UInt16 usVddgfxLookupTableOffset;
+ public UInt16 usMMDependencyTableOffset;
+ public UInt16 usVCEStateTableOffset;
+ public UInt16 usPPMTableOffset;
+ public UInt16 usPowerTuneTableOffset;
+ public UInt16 usHardLimitTableOffset;
+ public UInt16 usPCIETableOffset;
+ public UInt16 usGPIOTableOffset;
+ public fixed UInt16 usReserved[6];
+ };
+
+ [StructLayout(LayoutKind.Sequential, Pack = 1)]
+ struct ATOM_MCLK_ENTRY
+ {
+ public Byte ucVddcInd;
+ public UInt16 usVddci;
+ public UInt16 usVddgfxOffset;
+ public UInt16 usMvdd;
+ public UInt32 ulMclk;
+ public UInt16 usReserved;
+ };
+
+ [StructLayout(LayoutKind.Sequential, Pack = 1)]
+ struct ATOM_MCLK_TABLE
+ {
+ public Byte ucRevId;
+ public Byte ucNumEntries;
+ // public unsafe fixed byte ATOM_MCLK_ENTRY entries[ucNumEntries]; [3]
+ };
+
+ [StructLayout(LayoutKind.Sequential, Pack = 1)]
+ struct ATOM_SCLK_ENTRY
+ {
+ public Byte ucVddInd;
+ public UInt16 usVddcOffset;
+ public UInt32 ulSclk;
+ public UInt16 usEdcCurrent;
+ public Byte ucReliabilityTemperature;
+ public Byte ucCKSVOffsetandDisable;
+ public UInt32 ulSclkOffset;
+ // Polaris Only, remove for compatibility with Fiji
+ };
+
+ [StructLayout(LayoutKind.Sequential, Pack = 1)]
+ struct ATOM_SCLK_TABLE
+ {
+ public Byte ucRevId;
+ public Byte ucNumEntries;
+ // public unsafe fixed byte ATOM_SCLK_ENTRY entries[ucNumEntries]; [7]
+ };
+
+ [StructLayout(LayoutKind.Sequential, Pack = 1)]
+ struct ATOM_VOLTAGE_ENTRY
+ {
+ public UInt16 usVdd;
+ public UInt16 usCACLow;
+ public UInt16 usCACMid;
+ public UInt16 usCACHigh;
+ };
+
+ [StructLayout(LayoutKind.Sequential, Pack = 1)]
+ struct ATOM_VOLTAGE_TABLE
+ {
+ public Byte ucRevId;
+ public Byte ucNumEntries;
+ // public unsafe fixed byte ATOM_VOLTAGE_ENTRY entries[ucNumEntries]; [7]
+ };
+
+ [StructLayout(LayoutKind.Sequential, Pack = 1)]
+ struct ATOM_FAN_TABLE
+ {
+ public Byte ucRevId;
+ public Byte ucTHyst;
+ public UInt16 usTMin;
+ public UInt16 usTMed;
+ public UInt16 usTHigh;
+ public UInt16 usPWMMin;
+ public UInt16 usPWMMed;
+ public UInt16 usPWMHigh;
+ public UInt16 usTMax;
+ public Byte ucFanControlMode;
+ public UInt16 usFanPWMMax;
+ public UInt16 usFanOutputSensitivity;
+ public UInt16 usFanRPMMax;
+ public UInt32 ulMinFanSCLKAcousticLimit;
+ public Byte ucTargetTemperature;
+ public Byte ucMinimumPWMLimit;
+ public UInt16 usFanGainEdge;
+ public UInt16 usFanGainHotspot;
+ public UInt16 usFanGainLiquid;
+ public UInt16 usFanGainVrVddc;
+ public UInt16 usFanGainVrMvdd;
+ public UInt16 usFanGainPlx;
+ public UInt16 usFanGainHbm;
+ public UInt16 usReserved;
+ };
+
+ [StructLayout(LayoutKind.Sequential, Pack = 1)]
+ struct ATOM_POWERTUNE_TABLE
+ {
+ public Byte ucRevId;
+ public UInt16 usTDP;
+ public UInt16 usConfigurableTDP;
+ public UInt16 usTDC;
+ public UInt16 usBatteryPowerLimit;
+ public UInt16 usSmallPowerLimit;
+ public UInt16 usLowCACLeakage;
+ public UInt16 usHighCACLeakage;
+ public UInt16 usMaximumPowerDeliveryLimit;
+ public UInt16 usTjMax;
+ public UInt16 usPowerTuneDataSetID;
+ public UInt16 usEDCLimit;
+ public UInt16 usSoftwareShutdownTemp;
+ public UInt16 usClockStretchAmount;
+ public UInt16 usTemperatureLimitHotspot;
+ public UInt16 usTemperatureLimitLiquid1;
+ public UInt16 usTemperatureLimitLiquid2;
+ public UInt16 usTemperatureLimitVrVddc;
+ public UInt16 usTemperatureLimitVrMvdd;
+ public UInt16 usTemperatureLimitPlx;
+ public Byte ucLiquid1_I2C_address;
+ public Byte ucLiquid2_I2C_address;
+ public Byte ucLiquid_I2C_Line;
+ public Byte ucVr_I2C_address;
+ public Byte ucVr_I2C_Line;
+ public Byte ucPlx_I2C_address;
+ public Byte ucPlx_I2C_Line;
+ public UInt16 usReserved;
+ };
+
+ [StructLayout(LayoutKind.Sequential, Pack = 1)]
+ struct ATOM_VRAM_TIMING_ENTRY
+ {
+ public UInt32 ulClkRange;
+ [MarshalAs(UnmanagedType.ByValArray, SizeConst = 0x30)]
+ public Byte[] ucLatency;
+ };
+
+ [StructLayout(LayoutKind.Sequential, Pack = 1)]
+ struct ATOM_VRAM_ENTRY
+ {
+ public UInt32 ulChannelMapCfg;
+ public UInt16 usModuleSize;
+ public UInt16 usMcRamCfg;
+ public UInt16 usEnableChannels;
+ public Byte ucExtMemoryID;
+ public Byte ucMemoryType;
+ public Byte ucChannelNum;
+ public Byte ucChannelWidth;
+ public Byte ucDensity;
+ public Byte ucBankCol;
+ public Byte ucMisc;
+ public Byte ucVREFI;
+ public UInt16 usReserved;
+ public UInt16 usMemorySize;
+ public Byte ucMcTunningSetId;
+ public Byte ucRowNum;
+ public UInt16 usEMRS2Value;
+ public UInt16 usEMRS3Value;
+ public Byte ucMemoryVenderID;
+ public Byte ucRefreshRateFactor;
+ public Byte ucFIFODepth;
+ public Byte ucCDR_Bandwidth;
+ public UInt32 ulChannelMapCfg1;
+ public UInt32 ulBankMapCfg;
+ public UInt32 ulReserved;
+ [MarshalAs(UnmanagedType.ByValArray, SizeConst = 20)]
+ public Byte[] strMemPNString;
+ };
+
+ [StructLayout(LayoutKind.Sequential, Pack = 1)]
+ struct ATOM_VRAM_INFO
+ {
+ public ATOM_COMMON_TABLE_HEADER sHeader;
+ public UInt16 usMemAdjustTblOffset;
+ public UInt16 usMemClkPatchTblOffset;
+ public UInt16 usMcAdjustPerTileTblOffset;
+ public UInt16 usMcPhyInitTableOffset;
+ public UInt16 usDramDataRemapTblOffset;
+ public UInt16 usReserved1;
+ public Byte ucNumOfVRAMModule;
+ public Byte ucMemoryClkPatchTblVer;
+ public Byte ucVramModuleVer;
+ public Byte ucMcPhyTileNum;
+ // public ATOM_VRAM_ENTRY aVramInfo[ucNumOfVRAMModule];
+ }
+
+
+ [STAThread]
+ static void Main(string[] args)
+ {
+ PolarisBiosEditor pbe = new PolarisBiosEditor();
+ Application.Run(pbe);
+ }
+
+ static byte[] getBytes(object obj)
+ {
+ int size = Marshal.SizeOf(obj);
+ byte[] arr = new byte[size];
+ IntPtr ptr = Marshal.AllocHGlobal(size);
+
+ Marshal.StructureToPtr(obj, ptr, true);
+ Marshal.Copy(ptr, arr, 0, size);
+ Marshal.FreeHGlobal(ptr);
+
+ return arr;
+ }
+
+ static T fromBytes(byte[] arr)
+ {
+ T obj = default(T);
+ int size = Marshal.SizeOf(obj);
+ IntPtr ptr = Marshal.AllocHGlobal(size);
+
+ Marshal.Copy(arr, 0, ptr, size);
+ obj = (T)Marshal.PtrToStructure(ptr, obj.GetType());
+ Marshal.FreeHGlobal(ptr);
+
+ return obj;
+ }
+
+ public void setBytesAtPosition(byte[] dest, int ptr, byte[] src)
+ {
+ for (var i = 0; i < src.Length; i++)
+ {
+ dest[ptr + i] = src[i];
+ }
+ }
+
+ private ListViewItem handler;
+
+ private void listView_ChangeSelection(object sender, EventArgs e)
+ {
+ ListView lb = sender as ListView;
+ String sel_name = lb.SelectedItems[0].Text;
+
+ for (var i = 0; i < lb.Items.Count; i++)
+ {
+
+ ListViewItem container = lb.Items[i];
+ var name = container.Text;
+ var value = container.SubItems[1].Text;
+
+ if (name == sel_name)
+ {
+ editSubItem1.Text = name;
+ editSubItem2.Text = value;
+ handler = container;
+ }
+
+ }
+ }
+
+ private void apply_Click(object sender, EventArgs e)
+ {
+ if (handler != null)
+ {
+ handler.Text = editSubItem1.Text;
+ handler.SubItems[1].Text = editSubItem2.Text;
+ }
+ }
+
+ public PolarisBiosEditor()
+ {
+ InitializeComponent();
+ this.Text = this.programTitle + " " + this.version + " " + "Tweaked By Mattthev";
+ MessageBox.Show("Buy Pro version at https://mining-bios.eu/");
+ try
+ {
+
+ WebClient myWebClient = new WebClient();
+ Stream myStream = myWebClient.OpenRead("https://raw.githubusercontent.com/IndeedMiners/PolarisBiosEditor/master/version");
+ StreamReader sr = new StreamReader(myStream);
+ string newVersion = sr.ReadToEnd().Trim();
+ if (!newVersion.Equals(version)) {
+ MessageBox.Show("There is a new version available! " + version + " -> " + newVersion);
+ }
+ myStream.Close();
+
+ myStream = myWebClient.OpenRead("https://raw.githubusercontent.com/IndeedMiners/PolarisBiosEditor/master/notice");
+ sr = new StreamReader(myStream);
+ string notice = sr.ReadToEnd().Trim();
+
+ MessageBoxButtons buttons = MessageBoxButtons.YesNo;
+ DialogResult result;
+
+ result = MessageBox.Show(notice + "\n\nClick Yes button to copy to clipboard", "A message from the developer", buttons);
+
+ if (result == System.Windows.Forms.DialogResult.OK)
+ {
+
+ Clipboard.SetText(notice);
+
+ }
+
+ myStream.Close();
+
+ hasInternetAccess = true;
+
+ } catch (System.Net.WebException) {
+ this.Text += " (offline mode)";
+ }
+
+ rc.Add("MT51J256M3", "MICRON");
+ rc.Add("EDW4032BAB", "ELPIDA");
+ rc.Add("H5GC4H24AJ", "HYNIX_1");
+ rc.Add("H5GQ4H24AJ", "HYNIX_2");
+ rc.Add("H5GQ8H24MJ", "HYNIX_2");
+ rc.Add("H5GC8H24MJ", "HYNIX_3");
+ rc.Add("K4G80325FB", "SAMSUNG");
+ rc.Add("K4G41325FE", "SAMSUNG");
+ rc.Add("K4G41325FC", "SAMSUNG");
+ rc.Add("K4G41325FS", "SAMSUNG");
+
+ save.Enabled = false;
+ boxROM.Enabled = false;
+ boxPOWERPLAY.Enabled = false;
+ boxPOWERTUNE.Enabled = false;
+ boxFAN.Enabled = false;
+ boxGPU.Enabled = false;
+ boxMEM.Enabled = false;
+ boxVRAM.Enabled = false;
+
+ tableVRAM.MouseClick += new MouseEventHandler(listView_ChangeSelection);
+ tableVRAM_TIMING.MouseClick += new MouseEventHandler(listView_ChangeSelection);
+ tableMEMORY.MouseClick += new MouseEventHandler(listView_ChangeSelection);
+ tableGPU.MouseClick += new MouseEventHandler(listView_ChangeSelection);
+ tableFAN.MouseClick += new MouseEventHandler(listView_ChangeSelection);
+ tablePOWERTUNE.MouseClick += new MouseEventHandler(listView_ChangeSelection);
+ tablePOWERPLAY.MouseClick += new MouseEventHandler(listView_ChangeSelection);
+ tableROM.MouseClick += new MouseEventHandler(listView_ChangeSelection);
+
+ //MessageBox.Show("Modifying your BIOS is dangerous and could cause irreversible damage to your GPU.\nUsing a modified BIOS may void your warranty.\nThe author will not be held accountable for your actions.", "DISCLAIMER", MessageBoxButtons.OK, MessageBoxImage.Warning);
+ }
+
+ private void PolarisBiosEditor_Load(object sender, EventArgs e)
+ {
+
+ }
+
+ private void editSubItem2_Click(object sender, EventArgs e)
+ {
+ MouseEventArgs me = (MouseEventArgs)e;
+ if (me.Button == MouseButtons.Right)
+ {
+ if (editSubItem2.Text.Length == 96)
+ {
+ byte[] decode = StringToByteArray(editSubItem2.Text);
+ MessageBox.Show("Decode Memory Timings " + decode + " / not implemented yet!");
+ }
+ }
+ }
+
+ private void OpenFileDialog_Click(object sender, EventArgs e)
+ {
+ Console.WriteLine("OpenFileDialog");
+ OpenFileDialog openFileDialog = new OpenFileDialog();
+ openFileDialog.Filter = "BIOS (.rom)|*.rom|All Files (*.*)|*.*";
+ openFileDialog.FilterIndex = 1;
+ openFileDialog.Multiselect = false;
+
+ if (openFileDialog.ShowDialog() == DialogResult.OK)
+ {
+ save.Enabled = false;
+
+ tableROM.Items.Clear();
+ tablePOWERPLAY.Items.Clear();
+ tablePOWERTUNE.Items.Clear();
+ tableFAN.Items.Clear();
+ tableGPU.Items.Clear();
+ tableMEMORY.Items.Clear();
+ tableVRAM.Items.Clear();
+ tableVRAM_TIMING.Items.Clear();
+
+ this.Text = this.programTitle + " " + this.version + " tweaked by Mattthev " + " - " + "[" + openFileDialog.SafeFileName + "]";
+
+ System.IO.Stream fileStream = openFileDialog.OpenFile();
+ if ((fileStream.Length != 524288) && (fileStream.Length != 524288 / 2))
+ {
+ MessageBox.Show("This BIOS is non standard size.\nFlashing this BIOS may corrupt your graphics card.", "WARNING", MessageBoxButtons.OK, MessageBoxIcon.Warning);
+ }
+ using (BinaryReader br = new BinaryReader(fileStream))
+ {
+ buffer = br.ReadBytes((int)fileStream.Length);
+
+ atom_rom_header_offset = getValueAtPosition(16, atom_rom_header_ptr);
+ atom_rom_header = fromBytes(buffer.Skip(atom_rom_header_offset).ToArray());
+ deviceID = atom_rom_header.usDeviceID.ToString("X");
+ fixChecksum(false);
+
+ String firmwareSignature = new string(atom_rom_header.uaFirmWareSignature);
+ if (!firmwareSignature.Equals("ATOM"))
+ {
+ MessageBox.Show("WARNING! BIOS Signature is not valid. Only continue if you are 100% sure what you are doing!");
+ }
+
+ DialogResult msgSuported = DialogResult.Yes;
+ if (!supportedDeviceID.Contains(deviceID))
+ {
+ msgSuported = MessageBox.Show("Unsupported DeviceID 0x" + deviceID + " - Continue?", "WARNING", MessageBoxButtons.YesNo, MessageBoxIcon.Warning);
+ }
+ if (msgSuported == DialogResult.Yes)
+ {
+ StringBuilder sb = new StringBuilder();
+
+ Int32 ptr = atom_rom_header.usBIOS_BootupMessageOffset+2;
+ while (ptr != -1)
+ {
+ Char c = (Char)buffer[ptr];
+ if (c == '\0') {
+ ptr = -1;
+ } else if(c == '\n' || c == '\r') {
+ ptr++;
+ } else {
+ sb.Append(c);
+ ptr++;
+ }
+ }
+
+ BIOS_BootupMessage = sb.ToString();
+
+ txtBIOSBootupMessage.Text = BIOS_BootupMessage;
+ txtBIOSBootupMessage.MaxLength = BIOS_BootupMessage.Length;
+
+ atom_data_table = fromBytes(buffer.Skip(atom_rom_header.usMasterDataTableOffset).ToArray());
+ atom_powerplay_offset = atom_data_table.PowerPlayInfo;
+ atom_powerplay_table = fromBytes(buffer.Skip(atom_powerplay_offset).ToArray());
+
+ atom_powertune_offset = atom_data_table.PowerPlayInfo + atom_powerplay_table.usPowerTuneTableOffset;
+ atom_powertune_table = fromBytes(buffer.Skip(atom_powertune_offset).ToArray());
+
+ atom_fan_offset = atom_data_table.PowerPlayInfo + atom_powerplay_table.usFanTableOffset;
+ atom_fan_table = fromBytes(buffer.Skip(atom_fan_offset).ToArray());
+
+ atom_mclk_table_offset = atom_data_table.PowerPlayInfo + atom_powerplay_table.usMclkDependencyTableOffset;
+ atom_mclk_table = fromBytes(buffer.Skip(atom_mclk_table_offset).ToArray());
+ atom_mclk_entries = new ATOM_MCLK_ENTRY[atom_mclk_table.ucNumEntries];
+ for (var i = 0; i < atom_mclk_entries.Length; i++)
+ {
+ atom_mclk_entries[i] = fromBytes(buffer.Skip(atom_mclk_table_offset + Marshal.SizeOf(typeof(ATOM_MCLK_TABLE)) + Marshal.SizeOf(typeof(ATOM_MCLK_ENTRY)) * i).ToArray());
+ }
+
+ atom_sclk_table_offset = atom_data_table.PowerPlayInfo + atom_powerplay_table.usSclkDependencyTableOffset;
+ atom_sclk_table = fromBytes(buffer.Skip(atom_sclk_table_offset).ToArray());
+ atom_sclk_entries = new ATOM_SCLK_ENTRY[atom_sclk_table.ucNumEntries];
+ for (var i = 0; i < atom_sclk_entries.Length; i++)
+ {
+ atom_sclk_entries[i] = fromBytes(buffer.Skip(atom_sclk_table_offset + Marshal.SizeOf(typeof(ATOM_SCLK_TABLE)) + Marshal.SizeOf(typeof(ATOM_SCLK_ENTRY)) * i).ToArray());
+ }
+
+ atom_vddc_table_offset = atom_data_table.PowerPlayInfo + atom_powerplay_table.usVddcLookupTableOffset;
+ atom_vddc_table = fromBytes(buffer.Skip(atom_vddc_table_offset).ToArray());
+ atom_vddc_entries = new ATOM_VOLTAGE_ENTRY[atom_vddc_table.ucNumEntries];
+ for (var i = 0; i < atom_vddc_table.ucNumEntries; i++)
+ {
+ atom_vddc_entries[i] = fromBytes(buffer.Skip(atom_vddc_table_offset + Marshal.SizeOf(typeof(ATOM_VOLTAGE_TABLE)) + Marshal.SizeOf(typeof(ATOM_VOLTAGE_ENTRY)) * i).ToArray());
+ }
+
+ atom_vram_info_offset = atom_data_table.VRAM_Info;
+ atom_vram_info = fromBytes(buffer.Skip(atom_vram_info_offset).ToArray());
+ atom_vram_entries = new ATOM_VRAM_ENTRY[atom_vram_info.ucNumOfVRAMModule];
+ var atom_vram_entry_offset = atom_vram_info_offset + Marshal.SizeOf(typeof(ATOM_VRAM_INFO));
+ for (var i = 0; i < atom_vram_info.ucNumOfVRAMModule; i++)
+ {
+ atom_vram_entries[i] = fromBytes(buffer.Skip(atom_vram_entry_offset).ToArray());
+ atom_vram_entry_offset += atom_vram_entries[i].usModuleSize;
+ }
+
+ atom_vram_timing_offset = atom_vram_info_offset + atom_vram_info.usMemClkPatchTblOffset + 0x2E;
+ atom_vram_timing_entries = new ATOM_VRAM_TIMING_ENTRY[MAX_VRAM_ENTRIES];
+ for (var i = 0; i < MAX_VRAM_ENTRIES; i++)
+ {
+ atom_vram_timing_entries[i] = fromBytes(buffer.Skip(atom_vram_timing_offset + Marshal.SizeOf(typeof(ATOM_VRAM_TIMING_ENTRY)) * i).ToArray());
+
+ // atom_vram_timing_entries have an undetermined length
+ // attempt to determine the last entry in the array
+ if (atom_vram_timing_entries[i].ulClkRange == 0)
+ {
+ Array.Resize(ref atom_vram_timing_entries, i);
+ break;
+ }
+ }
+
+ tableROM.Items.Add(new ListViewItem(new string[] {
+ "BootupMessageOffset",
+ "0x" + atom_rom_header.usBIOS_BootupMessageOffset.ToString ("X")
+ }
+ ));
+ tableROM.Items.Add(new ListViewItem(new string[] {
+ "VendorID",
+ "0x" + atom_rom_header.usVendorID.ToString ("X")
+ }
+ ));
+ tableROM.Items.Add(new ListViewItem(new string[] {
+ "DeviceID",
+ "0x" + atom_rom_header.usDeviceID.ToString ("X")
+ }
+ ));
+ tableROM.Items.Add(new ListViewItem(new string[] {
+ "Sub ID",
+ "0x" + atom_rom_header.usSubsystemID.ToString ("X")
+ }
+ ));
+ tableROM.Items.Add(new ListViewItem(new string[] {
+ "Sub VendorID",
+ "0x" + atom_rom_header.usSubsystemVendorID.ToString ("X")
+ }
+ ));
+ tableROM.Items.Add(new ListViewItem(new string[] {
+ "Firmware Signature",
+ //"0x" + atom_rom_header.uaFirmWareSignature.ToString ("X")
+ new string(atom_rom_header.uaFirmWareSignature)
+ }
+ ));
+
+ tablePOWERPLAY.Items.Clear();
+ tablePOWERPLAY.Items.Add(new ListViewItem(new string[] {
+ "Max GPU Freq. (MHz)",
+ Convert.ToString (atom_powerplay_table.ulMaxODEngineClock / 100)
+ }
+ ));
+ tablePOWERPLAY.Items.Add(new ListViewItem(new string[] {
+ "Max Memory Freq. (MHz)",
+ Convert.ToString (atom_powerplay_table.ulMaxODMemoryClock / 100)
+ }
+ ));
+ tablePOWERPLAY.Items.Add(new ListViewItem(new string[] {
+ "Power Control Limit (%)",
+ Convert.ToString (atom_powerplay_table.usPowerControlLimit)
+ }
+ ));
+
+ tablePOWERTUNE.Items.Clear();
+ tablePOWERTUNE.Items.Add(new ListViewItem(new string[] {
+ "TDP (W)",
+ Convert.ToString (atom_powertune_table.usTDP)
+ }
+ ));
+ tablePOWERTUNE.Items.Add(new ListViewItem(new string[] {
+ "TDC (A)",
+ Convert.ToString (atom_powertune_table.usTDC)
+ }
+ ));
+ tablePOWERTUNE.Items.Add(new ListViewItem(new string[] {
+ "Max Power Limit (W)",
+ Convert.ToString (atom_powertune_table.usMaximumPowerDeliveryLimit)
+ }
+ ));
+ tablePOWERTUNE.Items.Add(new ListViewItem(new string[] {
+ "Max Temp. (C)",
+ Convert.ToString (atom_powertune_table.usTjMax)
+ }
+ ));
+ tablePOWERTUNE.Items.Add(new ListViewItem(new string[] {
+ "Shutdown Temp. (C)",
+ Convert.ToString (atom_powertune_table.usSoftwareShutdownTemp)
+ }
+ ));
+ tablePOWERTUNE.Items.Add(new ListViewItem(new string[] {
+ "Hotspot Temp. (C)",
+ Convert.ToString (atom_powertune_table.usTemperatureLimitHotspot)
+ }
+ ));
+ tablePOWERTUNE.Items.Add(new ListViewItem(new string[] {
+ "Clock Stretch Amount",
+ Convert.ToString (atom_powertune_table.usClockStretchAmount)
+ }
+ ));
+
+ tableFAN.Items.Clear();
+ tableFAN.Items.Add(new ListViewItem(new string[] {
+ "Temp. Hysteresis",
+ Convert.ToString (atom_fan_table.ucTHyst)
+ }
+ ));
+ tableFAN.Items.Add(new ListViewItem(new string[] {
+ "Min Temp. (C)",
+ Convert.ToString (atom_fan_table.usTMin / 100)
+ }
+ ));
+ tableFAN.Items.Add(new ListViewItem(new string[] {
+ "Med Temp. (C)",
+ Convert.ToString (atom_fan_table.usTMed / 100)
+ }
+ ));
+ tableFAN.Items.Add(new ListViewItem(new string[] {
+ "High Temp. (C)",
+ Convert.ToString (atom_fan_table.usTHigh / 100)
+ }
+ ));
+ tableFAN.Items.Add(new ListViewItem(new string[] {
+ "Max Temp. (C)",
+ Convert.ToString (atom_fan_table.usTMax / 100)
+ }
+ ));
+ tableFAN.Items.Add(new ListViewItem(new string[] {
+ "Target Temp. (C)",
+ Convert.ToString (atom_fan_table.ucTargetTemperature)
+ }
+ ));
+ tableFAN.Items.Add(new ListViewItem(new string[] {
+ "Legacy or Fuzzy Fan Mode",
+ Convert.ToString (atom_fan_table.ucFanControlMode)
+ }
+ ));
+ tableFAN.Items.Add(new ListViewItem(new string[] {
+ "Min PWM (%)",
+ Convert.ToString (atom_fan_table.usPWMMin / 100)
+ }
+ ));
+ tableFAN.Items.Add(new ListViewItem(new string[] {
+ "Med PWM (%)",
+ Convert.ToString (atom_fan_table.usPWMMed / 100)
+ }
+ ));
+ tableFAN.Items.Add(new ListViewItem(new string[] {
+ "High PWM (%)",
+ Convert.ToString (atom_fan_table.usPWMHigh / 100)
+ }
+ ));
+ tableFAN.Items.Add(new ListViewItem(new string[] {
+ "Max PWM (%)",
+ Convert.ToString (atom_fan_table.usFanPWMMax)
+ }
+ ));
+ tableFAN.Items.Add(new ListViewItem(new string[] {
+ "Max RPM",
+ Convert.ToString (atom_fan_table.usFanRPMMax)
+ }
+ ));
+ tableFAN.Items.Add(new ListViewItem(new string[] {
+ "Sensitivity",
+ Convert.ToString (atom_fan_table.usFanOutputSensitivity)
+ }
+ ));
+ tableFAN.Items.Add(new ListViewItem(new string[] {
+ "Acoustic Limit (MHz)",
+ Convert.ToString (atom_fan_table.ulMinFanSCLKAcousticLimit / 100)
+ }
+ ));
+
+ tableGPU.Items.Clear();
+ for (var i = 0; i < atom_sclk_table.ucNumEntries; i++)
+ {
+ tableGPU.Items.Add(new ListViewItem(new string[] {
+ Convert.ToString (atom_sclk_entries [i].ulSclk / 100),
+ Convert.ToString (atom_vddc_entries [atom_sclk_entries [i].ucVddInd].usVdd)
+ }
+ ));
+ }
+
+ tableMEMORY.Items.Clear();
+ for (var i = 0; i < atom_mclk_table.ucNumEntries; i++)
+ {
+ tableMEMORY.Items.Add(new ListViewItem(new string[] {
+ Convert.ToString (atom_mclk_entries [i].ulMclk / 100),
+ Convert.ToString (atom_mclk_entries [i].usMvdd)
+ }
+ ));
+ }
+
+ listVRAM.Items.Clear();
+ for (var i = 0; i < atom_vram_info.ucNumOfVRAMModule; i++)
+ {
+ if (atom_vram_entries[i].strMemPNString[0] != 0)
+ {
+
+ var mem_id = Encoding.UTF8.GetString(atom_vram_entries[i].strMemPNString).Substring(0, 10);
+ string mem_vendor;
+ if (rc.ContainsKey(mem_id))
+ {
+ mem_vendor = rc[mem_id];
+ }
+ else
+ {
+ mem_vendor = "UNKNOWN";
+ }
+
+ listVRAM.Items.Add(mem_id + " (" + mem_vendor + ")");
+ }
+ }
+ listVRAM.SelectedIndex = 0;
+ atom_vram_index = listVRAM.SelectedIndex;
+
+ tableVRAM_TIMING.Items.Clear();
+ for (var i = 0; i < atom_vram_timing_entries.Length; i++)
+ {
+ uint tbl = atom_vram_timing_entries[i].ulClkRange >> 24;
+ tableVRAM_TIMING.Items.Add(new ListViewItem(new string[] {
+ tbl.ToString () + ":" + (atom_vram_timing_entries [i].ulClkRange & 0x00FFFFFF) / 100,
+ ByteArrayToString (atom_vram_timing_entries [i].ucLatency)
+ }
+ ));
+ }
+
+ save.Enabled = true;
+ boxROM.Enabled = true;
+ boxPOWERPLAY.Enabled = true;
+ boxPOWERTUNE.Enabled = true;
+ boxFAN.Enabled = true;
+ boxGPU.Enabled = true;
+ boxMEM.Enabled = true;
+ boxVRAM.Enabled = true;
+ }
+ fileStream.Close();
+ }
+ }
+ tableROM.AutoResizeColumns(ColumnHeaderAutoResizeStyle.ColumnContent);
+ tableROM.AutoResizeColumns(ColumnHeaderAutoResizeStyle.HeaderSize);
+
+ tableFAN.AutoResizeColumns(ColumnHeaderAutoResizeStyle.ColumnContent);
+ tableFAN.AutoResizeColumns(ColumnHeaderAutoResizeStyle.HeaderSize);
+
+ tablePOWERPLAY.AutoResizeColumns(ColumnHeaderAutoResizeStyle.ColumnContent);
+ tablePOWERPLAY.AutoResizeColumns(ColumnHeaderAutoResizeStyle.HeaderSize);
+
+ tableGPU.AutoResizeColumns(ColumnHeaderAutoResizeStyle.ColumnContent);
+ tableGPU.AutoResizeColumns(ColumnHeaderAutoResizeStyle.HeaderSize);
+
+ tablePOWERTUNE.AutoResizeColumns(ColumnHeaderAutoResizeStyle.ColumnContent);
+ tablePOWERTUNE.AutoResizeColumns(ColumnHeaderAutoResizeStyle.HeaderSize);
+
+ tableMEMORY.AutoResizeColumns(ColumnHeaderAutoResizeStyle.ColumnContent);
+ tableMEMORY.AutoResizeColumns(ColumnHeaderAutoResizeStyle.HeaderSize);
+
+ tableVRAM.AutoResizeColumns(ColumnHeaderAutoResizeStyle.ColumnContent);
+ tableVRAM.AutoResizeColumns(ColumnHeaderAutoResizeStyle.HeaderSize);
+
+ tableVRAM_TIMING.AutoResizeColumns(ColumnHeaderAutoResizeStyle.ColumnContent);
+ tableVRAM_TIMING.AutoResizeColumns(ColumnHeaderAutoResizeStyle.HeaderSize);
+ }
+
+ public Int32 getValueAtPosition(int bits, int position, bool isFrequency = false)
+ {
+ int value = 0;
+ if (position <= buffer.Length - 4)
+ {
+ switch (bits)
+ {
+ case 8:
+ default:
+ value = buffer[position];
+ break;
+ case 16:
+ value = (buffer[position + 1] << 8) | buffer[position];
+ break;
+ case 24:
+ value = (buffer[position + 2] << 16) | (buffer[position + 1] << 8) | buffer[position];
+ break;
+ case 32:
+ value = (buffer[position + 3] << 24) | (buffer[position + 2] << 16) | (buffer[position + 1] << 8) | buffer[position];
+ break;
+ }
+ if (isFrequency)
+ return value / 100;
+ return value;
+ }
+ return -1;
+ }
+
+ public bool setValueAtPosition(int value, int bits, int position, bool isFrequency = false)
+ {
+ if (isFrequency)
+ value *= 100;
+ if (position <= buffer.Length - 4)
+ {
+ switch (bits)
+ {
+ case 8:
+ default:
+ buffer[position] = (byte)value;
+ break;
+ case 16:
+ buffer[position] = (byte)value;
+ buffer[position + 1] = (byte)(value >> 8);
+ break;
+ case 24:
+ buffer[position] = (byte)value;
+ buffer[position + 1] = (byte)(value >> 8);
+ buffer[position + 2] = (byte)(value >> 16);
+ break;
+ case 32:
+ buffer[position] = (byte)value;
+ buffer[position + 1] = (byte)(value >> 8);
+ buffer[position + 2] = (byte)(value >> 16);
+ buffer[position + 3] = (byte)(value >> 32);
+ break;
+ }
+ return true;
+ }
+ return false;
+ }
+
+ private bool setValueAtPosition(String text, int bits, int position, bool isFrequency = false)
+ {
+ int value = 0;
+ if (!int.TryParse(text, out value))
+ {
+ return false;
+ }
+ return setValueAtPosition(value, bits, position, isFrequency);
+ }
+
+ private void SaveFileDialog_Click(object sender, EventArgs e)
+ {
+ SaveFileDialog SaveFileDialog = new SaveFileDialog();
+ SaveFileDialog.Title = "Save As";
+ SaveFileDialog.Filter = "BIOS (*.rom)|*.rom";
+
+ if (SaveFileDialog.ShowDialog() == DialogResult.OK)
+ {
+ FileStream fs = new FileStream(SaveFileDialog.FileName, FileMode.Create);
+ BinaryWriter bw = new BinaryWriter(fs);
+
+ for (var i = 0; i < tableROM.Items.Count; i++)
+ {
+ ListViewItem container = tableROM.Items[i];
+ var name = container.Text;
+ var value = container.SubItems[1].Text;
+
+
+ if (name == "VendorID")
+ {
+ var num = (int)int32.ConvertFromString(value);
+ atom_rom_header.usVendorID = (UInt16)num;
+ }
+ else if (name == "DeviceID")
+ {
+ var num = (int)int32.ConvertFromString(value);
+ atom_rom_header.usDeviceID = (UInt16)num;
+ }
+ else if (name == "Sub ID")
+ {
+ var num = (int)int32.ConvertFromString(value);
+ atom_rom_header.usSubsystemID = (UInt16)num;
+ }
+ else if (name == "Sub VendorID")
+ {
+ var num = (int)int32.ConvertFromString(value);
+ atom_rom_header.usSubsystemVendorID = (UInt16)num;
+ }
+ else if (name == "Firmware Signature")
+ {
+ atom_rom_header.uaFirmWareSignature = value.ToCharArray();
+ }
+ }
+
+ for (var i = 0; i < tablePOWERPLAY.Items.Count; i++)
+ {
+ ListViewItem container = tablePOWERPLAY.Items[i];
+ var name = container.Text;
+ var value = container.SubItems[1].Text;
+ var num = (int)int32.ConvertFromString(value);
+
+ if (name == "Max GPU Freq. (MHz)")
+ {
+ atom_powerplay_table.ulMaxODEngineClock = (UInt32)(num * 100);
+ }
+ else if (name == "Max Memory Freq. (MHz)")
+ {
+ atom_powerplay_table.ulMaxODMemoryClock = (UInt32)(num * 100);
+ }
+ else if (name == "Power Control Limit (%)")
+ {
+ atom_powerplay_table.usPowerControlLimit = (UInt16)num;
+ }
+ }
+
+ for (var i = 0; i < tablePOWERTUNE.Items.Count; i++)
+ {
+ ListViewItem container = tablePOWERTUNE.Items[i];
+ var name = container.Text;
+ var value = container.SubItems[1].Text;
+ var num = (int)int32.ConvertFromString(value);
+
+ if (name == "TDP (W)")
+ {
+ atom_powertune_table.usTDP = (UInt16)num;
+ }
+ else if (name == "TDC (A)")
+ {
+ atom_powertune_table.usTDC = (UInt16)num;
+ }
+ else if (name == "Max Power Limit (W)")
+ {
+ atom_powertune_table.usMaximumPowerDeliveryLimit = (UInt16)num;
+ }
+ else if (name == "Max Temp. (C)")
+ {
+ atom_powertune_table.usTjMax = (UInt16)num;
+ }
+ else if (name == "Shutdown Temp. (C)")
+ {
+ atom_powertune_table.usSoftwareShutdownTemp = (UInt16)num;
+ }
+ else if (name == "Hotspot Temp. (C)")
+ {
+ atom_powertune_table.usTemperatureLimitHotspot = (UInt16)num;
+ }
+ else if (name == "Clock Stretch Amount")
+ {
+ atom_powertune_table.usClockStretchAmount = (UInt16)num;
+ }
+ }
+
+ for (var i = 0; i < tableFAN.Items.Count; i++)
+ {
+ ListViewItem container = tableFAN.Items[i];
+ var name = container.Text;
+ var value = container.SubItems[1].Text;
+ var num = (int)int32.ConvertFromString(value);
+
+ if (name == "Temp. Hysteresis")
+ {
+ atom_fan_table.ucTHyst = (Byte)num;
+ }
+ else if (name == "Min Temp. (C)")
+ {
+ atom_fan_table.usTMin = (UInt16)(num * 100);
+ }
+ else if (name == "Med Temp. (C)")
+ {
+ atom_fan_table.usTMed = (UInt16)(num * 100);
+ }
+ else if (name == "High Temp. (C)")
+ {
+ atom_fan_table.usTHigh = (UInt16)(num * 100);
+ }
+ else if (name == "Max Temp. (C)")
+ {
+ atom_fan_table.usTMax = (UInt16)(num * 100);
+ }
+ else if (name == "Target Temp. (C)")
+ {
+ atom_fan_table.ucTargetTemperature = (Byte)num;
+ }
+ else if (name == "Legacy or Fuzzy Fan Mode")
+ {
+ atom_fan_table.ucFanControlMode = (Byte)(num);
+ }
+ else if (name == "Min PWM (%)")
+ {
+ atom_fan_table.usPWMMin = (UInt16)(num * 100);
+ }
+ else if (name == "Med PWM (%)")
+ {
+ atom_fan_table.usPWMMed = (UInt16)(num * 100);
+ }
+ else if (name == "High PWM (%)")
+ {
+ atom_fan_table.usPWMHigh = (UInt16)(num * 100);
+ }
+ else if (name == "Max PWM (%)")
+ {
+ atom_fan_table.usFanPWMMax = (UInt16)num;
+ }
+ else if (name == "Max RPM")
+ {
+ atom_fan_table.usFanRPMMax = (UInt16)num;
+ }
+ else if (name == "Sensitivity")
+ {
+ atom_fan_table.usFanOutputSensitivity = (UInt16)num;
+ }
+ else if (name == "Acoustic Limit (MHz)")
+ {
+ atom_fan_table.ulMinFanSCLKAcousticLimit = (UInt32)(num * 100);
+ }
+ }
+
+ for (var i = 0; i < tableGPU.Items.Count; i++)
+ {
+ ListViewItem container = tableGPU.Items[i];
+ var name = container.Text;
+ var value = container.SubItems[1].Text;
+ var mhz = (int)int32.ConvertFromString(name) * 100;
+ var mv = (int)int32.ConvertFromString(value);
+
+ atom_sclk_entries[i].ulSclk = (UInt32)mhz;
+ atom_vddc_entries[atom_sclk_entries[i].ucVddInd].usVdd = (UInt16)mv;
+ if (mv < 0xFF00)
+ {
+ atom_sclk_entries[i].usVddcOffset = 0;
+ }
+ }
+
+ for (var i = 0; i < tableMEMORY.Items.Count; i++)
+ {
+ ListViewItem container = tableMEMORY.Items[i];
+ var name = container.Text;
+ var value = container.SubItems[1].Text;
+ var mhz = (int)int32.ConvertFromString(name) * 100;
+ var mv = (int)int32.ConvertFromString(value);
+
+ atom_mclk_entries[i].ulMclk = (UInt32)mhz;
+ atom_mclk_entries[i].usMvdd = (UInt16)mv;
+ }
+
+ updateVRAM_entries();
+ for (var i = 0; i < tableVRAM_TIMING.Items.Count; i++)
+ {
+ ListViewItem container = tableVRAM_TIMING.Items[i];
+ var name = container.Text;
+ var value = container.SubItems[1].Text;
+ var arr = StringToByteArray(value);
+ UInt32 mhz;
+ if (name.IndexOf(':') > 0)
+ {
+ mhz = (UInt32)uint32.ConvertFromString(name.Substring(name.IndexOf(':') + 1)) * 100;
+ mhz += (UInt32)uint32.ConvertFromString(name.Substring(0, name.IndexOf(':'))) << 24; // table id
+ }
+ else
+ {
+ mhz = (UInt32)uint32.ConvertFromString(name) * 100;
+ }
+ atom_vram_timing_entries[i].ulClkRange = mhz;
+ atom_vram_timing_entries[i].ucLatency = arr;
+ }
+
+ setBytesAtPosition(buffer, atom_rom_header_offset, getBytes(atom_rom_header));
+ setBytesAtPosition(buffer, atom_powerplay_offset, getBytes(atom_powerplay_table));
+ setBytesAtPosition(buffer, atom_powertune_offset, getBytes(atom_powertune_table));
+ setBytesAtPosition(buffer, atom_fan_offset, getBytes(atom_fan_table));
+
+ for (var i = 0; i < atom_mclk_table.ucNumEntries; i++)
+ {
+ setBytesAtPosition(buffer, atom_mclk_table_offset + Marshal.SizeOf(typeof(ATOM_MCLK_TABLE)) + Marshal.SizeOf(typeof(ATOM_MCLK_ENTRY)) * i, getBytes(atom_mclk_entries[i]));
+ }
+
+ for (var i = 0; i < atom_sclk_table.ucNumEntries; i++)
+ {
+ setBytesAtPosition(buffer, atom_sclk_table_offset + Marshal.SizeOf(typeof(ATOM_SCLK_TABLE)) + Marshal.SizeOf(typeof(ATOM_SCLK_ENTRY)) * i, getBytes(atom_sclk_entries[i]));
+ }
+
+ for (var i = 0; i < atom_vddc_table.ucNumEntries; i++)
+ {
+ setBytesAtPosition(buffer, atom_vddc_table_offset + Marshal.SizeOf(typeof(ATOM_VOLTAGE_TABLE)) + Marshal.SizeOf(typeof(ATOM_VOLTAGE_ENTRY)) * i, getBytes(atom_vddc_entries[i]));
+ }
+
+ var atom_vram_entry_offset = atom_vram_info_offset + Marshal.SizeOf(typeof(ATOM_VRAM_INFO));
+ for (var i = 0; i < atom_vram_info.ucNumOfVRAMModule; i++)
+ {
+ setBytesAtPosition(buffer, atom_vram_entry_offset, getBytes(atom_vram_entries[i]));
+ atom_vram_entry_offset += atom_vram_entries[i].usModuleSize;
+ }
+
+ atom_vram_timing_offset = atom_vram_info_offset + atom_vram_info.usMemClkPatchTblOffset + 0x2E;
+ for (var i = 0; i < atom_vram_timing_entries.Length; i++)
+ {
+ setBytesAtPosition(buffer, atom_vram_timing_offset + Marshal.SizeOf(typeof(ATOM_VRAM_TIMING_ENTRY)) * i, getBytes(atom_vram_timing_entries[i]));
+ }
+
+ BIOS_BootupMessage = txtBIOSBootupMessage.Text.Substring(0, BIOS_BootupMessage.Length);
+
+ setBytesAtPosition(buffer, atom_rom_header.usBIOS_BootupMessageOffset+2, Encoding.ASCII.GetBytes(BIOS_BootupMessage));
+ fixChecksum(true);
+ bw.Write(buffer);
+
+ fs.Close();
+ bw.Close();
+ }
+ }
+
+ private void fixChecksum(bool save)
+ {
+ Byte checksum = buffer[atom_rom_checksum_offset];
+ int size = buffer[0x02] * 512;
+ Byte offset = 0;
+
+ for (int i = 0; i < size; i++)
+ {
+ offset += buffer[i];
+ }
+ if (checksum == (buffer[atom_rom_checksum_offset] - offset))
+ {
+ txtChecksum.ForeColor = Color.Green;
+ }
+ else if (!save)
+ {
+ txtChecksum.ForeColor = Color.Red;
+ MessageBox.Show("Invalid checksum - Save to fix!", "WARNING", MessageBoxButtons.OK, MessageBoxIcon.Warning);
+ }
+ if (save)
+ {
+ buffer[atom_rom_checksum_offset] -= offset;
+ txtChecksum.ForeColor = Color.Green;
+ }
+ txtChecksum.Text = "0x" + buffer[atom_rom_checksum_offset].ToString("X");
+ }
+
+ public static string ByteArrayToString(byte[] ba)
+ {
+ string hex = BitConverter.ToString(ba);
+ return hex.Replace("-", "");
+ }
+
+ public static byte[] StringToByteArray(String hex)
+ {
+ if (hex.Length % 2 != 0)
+ {
+ MessageBox.Show("Invalid hex string", "Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
+ throw new InvalidDataException();
+ }
+ byte[] bytes = new byte[hex.Length / 2];
+ for (int i = 0; i < hex.Length; i += 2)
+ {
+ bytes[i / 2] = Convert.ToByte(hex.Substring(i, 2), 16);
+ }
+ return bytes;
+ }
+
+ public void updateVRAM_entries()
+ {
+
+ for (var i = 0; i < tableVRAM.Items.Count; i++)
+ {
+
+ ListViewItem container = tableVRAM.Items[i];
+ var name = container.Text;
+ var value = container.SubItems[1].Text;
+ var num = (int)int32.ConvertFromString(value);
+
+ if (name == "VendorID")
+ {
+ atom_vram_entries[atom_vram_index].ucMemoryVenderID = (Byte)num;
+ }
+ else if (name == "Size (MB)")
+ {
+ atom_vram_entries[atom_vram_index].usMemorySize = (UInt16)num;
+ }
+ else if (name == "Density")
+ {
+ atom_vram_entries[atom_vram_index].ucDensity = (Byte)num;
+ }
+ else if (name == "Type")
+ {
+ atom_vram_entries[atom_vram_index].ucMemoryType = (Byte)num;
+ }
+ }
+ }
+
+ private void listVRAM_SelectionChanged(object sender, EventArgs e)
+ {
+ updateVRAM_entries();
+ tableVRAM.Items.Clear();
+ if (listVRAM.SelectedIndex >= 0 && listVRAM.SelectedIndex < listVRAM.Items.Count)
+ {
+ atom_vram_index = listVRAM.SelectedIndex;
+ tableVRAM.Items.Add(new ListViewItem(new string[] {
+ "VendorID",
+ "0x" + atom_vram_entries [atom_vram_index].ucMemoryVenderID.ToString ("X")
+ }
+ ));
+ tableVRAM.Items.Add(new ListViewItem(new string[] {
+ "Size (MB)",
+ Convert.ToString (atom_vram_entries [atom_vram_index].usMemorySize)
+ }
+ ));
+ tableVRAM.Items.Add(new ListViewItem(new string[] {
+ "Density",
+ "0x" + atom_vram_entries [atom_vram_index].ucDensity.ToString ("X")
+ }
+ ));
+ tableVRAM.Items.Add(new ListViewItem(new string[] {
+ "Type",
+ "0x" + atom_vram_entries [atom_vram_index].ucMemoryType.ToString ("X")
+ }
+ ));
+ }
+ }
+
+ private void listVRAM_SelectedIndexChanged(object sender, EventArgs e)
+ {
+
+ }
+
+ private void apply_timings(int vendor_index, int timing_index)
+ {
+ for (var i = 0; i < tableVRAM_TIMING.Items.Count; i++)
+ {
+ ListViewItem container = tableVRAM_TIMING.Items[i];
+ var name = container.Text;
+ UInt32 real_mhz = 0;
+ int mem_index = -1;
+
+ if (name.IndexOf(':') > 0)
+ {
+ // get mem index
+ mem_index = (Int32)int32.ConvertFromString(name.Substring(0, 1));
+ }
+ else
+ {
+ mem_index = 32768;
+ }
+
+ real_mhz = (UInt32)uint32.ConvertFromString(name.Substring(name.IndexOf(':') + 1));
+
+ if (real_mhz >= 1500 && (mem_index == vendor_index || mem_index == 32768))
+ {
+ // set the timings
+ container.SubItems[1].Text = timings[timing_index];
+ }
+ }
+ }
+
+ private void apply_timings1(int vendor_index, int timing_index)
+ {
+ for (var i = 0; i < tableVRAM_TIMING.Items.Count; i++)
+ {
+ ListViewItem container = tableVRAM_TIMING.Items[i];
+ var name = container.Text;
+ UInt32 real_mhz = 0;
+ int mem_index = -1;
+
+ if (name.IndexOf(':') > 0)
+ {
+ // get mem index
+ mem_index = (Int32)int32.ConvertFromString(name.Substring(0, 1));
+ }
+ else
+ {
+ mem_index = 32768;
+ }
+
+ real_mhz = (UInt32)uint32.ConvertFromString(name.Substring(name.IndexOf(':') + 1));
+
+ if (real_mhz >= 1750 && (mem_index == vendor_index || mem_index == 32768))
+ {
+ // set the timings
+ container.SubItems[1].Text = timings[timing_index];
+ }
+ }
+ }
+
+ private void button1_Click(object sender, EventArgs e)
+ {
+ int samsung_index = -1;
+ int micron_index = -1;
+ int elpida_index = -1;
+ int hynix_1_index = -1;
+ int hynix_2_index = -1;
+ int hynix_3_index = -1;
+ for (var i = 0; i < atom_vram_info.ucNumOfVRAMModule; i++)
+ {
+ string mem_vendor;
+ if (atom_vram_entries[i].strMemPNString[0] != 0)
+ {
+ var mem_id = Encoding.UTF8.GetString(atom_vram_entries[i].strMemPNString).Substring(0, 10);
+
+ if (rc.ContainsKey(mem_id))
+ {
+ mem_vendor = rc[mem_id];
+ }
+ else
+ {
+ mem_vendor = "UNKNOWN";
+ }
+
+ switch (mem_vendor)
+ {
+ case "SAMSUNG":
+ samsung_index = i;
+ break;
+ case "MICRON":
+ micron_index = i;
+ break;
+ case "ELPIDA":
+ elpida_index = i;
+ break;
+ case "HYNIX_1":
+ hynix_1_index = i;
+ break;
+ case "HYNIX_2":
+ hynix_2_index = i;
+ break;
+ case "HYNIX_3":
+ hynix_3_index = i;
+ break;
+ }
+
+
+ }
+ }
+
+ if (samsung_index != -1)
+ {
+ if (MessageBox.Show("Do you want faster Uber-mix 3.1?", "Important Question", MessageBoxButtons.YesNo) == DialogResult.Yes)
+ {
+ int num = (int)MessageBox.Show("Samsung Memory found at index #" + (object)samsung_index + ", now applying UBERMIX 3.1 timings to 1750+ strap(s)");
+ this.apply_timings1(samsung_index, 0);
+ }
+ else
+ {
+ int num = (int)MessageBox.Show("Samsung Memory found at index #" + (object)samsung_index + ", now applying UBERMIX 3.2 timings to 1750+ strap(s)");
+ this.apply_timings1(samsung_index, 1);
+ }
+ }
+
+ if (hynix_3_index != -1)
+ {
+ if (MessageBox.Show("Do you want Universal Hynix Timing?", "Important Question", MessageBoxButtons.YesNo) == DialogResult.Yes)
+ {
+ MessageBox.Show("Hynix (3) Memory found at index #" + hynix_3_index + ", now applying Universal HYNIX MINING timings to 1500+ strap(s)");
+ apply_timings(hynix_3_index, 8);
+ }
+ else
+ {
+ MessageBox.Show("Hynix (3) Memory found at index #" + hynix_3_index + ", now applying GOOD HYNIX MINING timings to 1500+ strap(s)");
+ apply_timings(hynix_3_index, 2);
+ }
+ }
+
+ if (hynix_2_index != -1)
+ {
+ if (MessageBox.Show("Do you want Universal Hynix Timing?", "Important Question", MessageBoxButtons.YesNo) == DialogResult.Yes)
+ {
+ MessageBox.Show("Hynix (2) Memory found at index #" + hynix_2_index + ", now applying Universal HYNIX MINING timings to 1500+ strap(s)");
+ apply_timings(hynix_2_index, 8);
+ }
+ else
+ {
+ int num = (int)MessageBox.Show("Hynix (2) Memory found at index #" + (object)micron_index + ", now applying GOOD Hynix timings to 1500+ strap(s)");
+ this.apply_timings(hynix_2_index, 3);
+ }
+ }
+
+ if (micron_index != -1)
+ {
+ if (MessageBox.Show("Do you want Good Micron Timing?", "Important Question", MessageBoxButtons.YesNo) == DialogResult.Yes)
+ {
+ int num = (int)MessageBox.Show("Micron Memory found at index #" + (object)micron_index + ", now applying Good Micron timings to 1500+ strap(s)");
+ this.apply_timings(micron_index, 4);
+ }
+ else
+ {
+ int num = (int)MessageBox.Show("Micron Memory found at index #" + (object)micron_index + ", now applying S Micron timings to 1500+ strap(s)");
+ this.apply_timings(micron_index, 5);
+ }
+ }
+
+ if (hynix_1_index != -1)
+ {
+ MessageBox.Show("Hynix (1) Memory found at index #" + hynix_1_index + ", now applying GOOD HYNIX MINING timings to 1500+ strap(s)");
+ apply_timings(hynix_1_index, 6);
+ }
+
+ if (elpida_index != -1)
+ {
+ MessageBox.Show("Elpida Memory found at index #" + elpida_index + ", now applying GOOD ELPIDA MINING timings to 1500+ strap(s)");
+
+ apply_timings(elpida_index, 7);
+
+ }
+ if (samsung_index == -1 && hynix_2_index == -1 && hynix_3_index == -1 && hynix_1_index == -1 && elpida_index == -1 && micron_index == -1)
+ {
+ MessageBox.Show("Sorry, no supported memory found. If you think this is an error, please file a bugreport @ https://github.com/IndeedMiners/PolarisBiosEditor/issues");
+ }
+
+ this.tablePOWERPLAY.Items[1].SubItems[1].Text = "2300";
+
+ }
+
+ private void editSubItem2_TextChanged(object sender, EventArgs e)
+ {
+
+ }
+
+ private void linkLabel1_LinkClicked(object sender, LinkLabelLinkClickedEventArgs e)
+ {
+ System.Diagnostics.Process.Start("http://bit.ly/mining-bios-eu");
+ }
+ }
+}
\ No newline at end of file
diff --git a/PolarisBiosEditor.csproj b/PolarisBiosEditor.csproj
new file mode 100644
index 0000000..09ed626
--- /dev/null
+++ b/PolarisBiosEditor.csproj
@@ -0,0 +1,89 @@
+
+
+
+
+ Debug
+ AnyCPU
+ {7D2BA443-2896-4CCE-89B6-5B39C49F2289}
+ WinExe
+ PolarisBiosEditor
+ PolarisBiosEditor
+ v4.6.1
+ 512
+ true
+
+
+
+ AnyCPU
+ true
+ full
+ false
+ bin\Debug\
+ DEBUG;TRACE
+ prompt
+ 4
+ true
+ false
+
+
+ AnyCPU
+ pdbonly
+ true
+ bin\Release\
+ TRACE
+ prompt
+ 4
+
+
+favicon.ico
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Form
+
+
+ PolarisBiosEditor.cs
+
+
+
+ PolarisBiosEditor.cs
+
+
+ ResXFileCodeGenerator
+ Resources.Designer.cs
+ Designer
+
+
+ True
+ Resources.resx
+ True
+
+
+ SettingsSingleFileGenerator
+ Settings.Designer.cs
+
+
+ True
+ Settings.settings
+ True
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/PolarisBiosEditor.resx b/PolarisBiosEditor.resx
new file mode 100644
index 0000000..5f7579a
--- /dev/null
+++ b/PolarisBiosEditor.resx
@@ -0,0 +1,212 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ text/microsoft-resx
+
+
+ 2.0
+
+
+ System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+
+
+ System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+
+
+ True
+
+
+ True
+
+
+ True
+
+
+ True
+
+
+ True
+
+
+
+
+ AAABAAEAICAAAAEAIACoEAAAFgAAACgAAAAgAAAAQAAAAAEAIAAAAAAAABAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAA/w8AAP+qAAD/oAAA/5wAAP+cAAD/owAA/yQAAAAAAAD/lgAA/xMAAP8nAAD/ngAA
+ /3gAAP94AAD/iQAA/3oAAAAAAAD/ZQAA/34AAP9XAAD/WwAA/4kAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAD/IAAA//8AAP+XAAD/agAA/2oAAP//AAD/XgAAAAAAAP/7AAD/GQAA
+ /3YAAP/aAAD/AwAA/wMAAP9eAAD/8gAAAAAAAP9LAAD/gQAA/2QAAP9rAAD/zwAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP8bAAD//AAA/5MAAP9wAAD/cAAA/9wAAP8vAAAAAAAA
+ //8AAP8aAAD/cQAA/+MAAP8aAAD/GgAA/3AAAP/yAAAAAAAA/4oAAP/jAAD/cAAA/3wAAP+RAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/yAAAP//AAD/mgAA/20AAP9tAAD//wAA
+ /2AAAAAAAAD/ggAA/xQAAP8YAAD/iQAA/3YAAP92AAD/gAAA/10AAAAAAAD/MAAA/3wAAP9bAAD/YgAA
+ /3kAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD/BAAA/yIAAP9fAAD/egAA
+ /3AAAP8UAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAA/2wAAP8tAAAAAAAAAAAAAAAAAAD/aAAA/2EAAAAAAAD/ZwAA/0UAAAAAAAD/RQAA
+ /woAAAAAAAAAAAAA/10AAP8MAAD/KQAA/2kAAAAAAAD/TAAA/10AAAAAAAAAAAAA/2MAAP9LAAAAAAAA
+ /2QAAP+MAAD/gAAA/3cAAP9fAAD/9AAA/ycAAP80AAD/3wAAAAAAAP+9AAD/3gAAAAAAAP/lAAD/mgAA
+ AAAAAP/kAAD/MAAA/0IAAP/oAAD//wAA/xMAAP9cAAD/6wAAAAAAAP+wAAD/ogAA/wUAAP+3AAD//wAA
+ /4EAAAAAAAD//QAA/1cAAP9jAAD/sAAA//8AAP+pAAD/fAAA/9cAAP+vAAD/mgAA/7YAAP+oAAAAAAAA
+ /9MAAP+OAAAAAAAA/8QAAP/YAAD/0QAA/0QAAP/LAAD/LwAA/1UAAP/YAAAAAAAA/3oAAP/gAAD/zgAA
+ /34AAP9/AAD/igAAAAAAAP/sAAAAAAAA/xkAAP95AAD/kQAA/+gAAP//AAD/QgAAAAAAAP9tAAD//wAA
+ /6oAAAAAAAD/pQAA/28AAAAAAAD/uAAA/68AAAAAAAAAAAAA/7kAAP8lAAD/QwAA/6kAAAAAAAD/XwAA
+ /9QAAP8uAAAAAAAA/3AAAP95AAAAAAAA/7MAAP+iAAD/gwAA/38AAP+KAAD/pQAA/14AAAAAAAAAAAAA
+ AAAAAP+NAAD/fgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/xAAAP8VAAD/DgAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAA////////////////////////////////////////////////////////
+ ////wEAg/8BAIP/AQCD/wEAg/8D//zkmEyAJIBAgASAQKBEmESA5///x////////////////////////
+ //////////////////////////////////8=
+
+
+
\ No newline at end of file
diff --git a/PolarisBiosEditor.sln b/PolarisBiosEditor.sln
new file mode 100644
index 0000000..e49d87a
--- /dev/null
+++ b/PolarisBiosEditor.sln
@@ -0,0 +1,24 @@
+Microsoft Visual Studio Solution File, Format Version 12.00
+# Visual Studio 15
+VisualStudioVersion = 15.0.27703.2026
+MinimumVisualStudioVersion = 10.0.40219.1
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "PolarisBiosEditor", "PolarisBiosEditor.csproj", "{7D2BA443-2896-4CCE-89B6-5B39C49F2289}"
+EndProject
+Global
+ GlobalSection(SolutionConfigurationPlatforms) = preSolution
+ Debug|x86 = Debug|x86
+ Release|x86 = Release|x86
+ EndGlobalSection
+ GlobalSection(ProjectConfigurationPlatforms) = postSolution
+ {7D2BA443-2896-4CCE-89B6-5B39C49F2289}.Debug|x86.ActiveCfg = Debug|Any CPU
+ {7D2BA443-2896-4CCE-89B6-5B39C49F2289}.Debug|x86.Build.0 = Debug|Any CPU
+ {7D2BA443-2896-4CCE-89B6-5B39C49F2289}.Release|x86.ActiveCfg = Release|Any CPU
+ {7D2BA443-2896-4CCE-89B6-5B39C49F2289}.Release|x86.Build.0 = Release|Any CPU
+ EndGlobalSection
+ GlobalSection(SolutionProperties) = preSolution
+ HideSolutionNode = FALSE
+ EndGlobalSection
+ GlobalSection(ExtensibilityGlobals) = postSolution
+ SolutionGuid = {4604ADE8-8496-4378-A0A0-D757457F385E}
+ EndGlobalSection
+EndGlobal
diff --git a/PolarisBiosEditor.userprefs b/PolarisBiosEditor.userprefs
new file mode 100644
index 0000000..4acbf64
--- /dev/null
+++ b/PolarisBiosEditor.userprefs
@@ -0,0 +1,27 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/Properties/AssemblyInfo.cs b/Properties/AssemblyInfo.cs
new file mode 100644
index 0000000..9906d54
--- /dev/null
+++ b/Properties/AssemblyInfo.cs
@@ -0,0 +1,36 @@
+using System.Reflection;
+using System.Runtime.CompilerServices;
+using System.Runtime.InteropServices;
+
+// General Information about an assembly is controlled through the following
+// set of attributes. Change these attribute values to modify the information
+// associated with an assembly.
+[assembly: AssemblyTitle("PolarisBiosEditor")]
+[assembly: AssemblyDescription("PBE")]
+[assembly: AssemblyConfiguration("")]
+[assembly: AssemblyCompany("https://mining-bios.eu")]
+[assembly: AssemblyProduct("PolarisBiosEditor")]
+[assembly: AssemblyCopyright("Mattthev")]
+[assembly: AssemblyTrademark("")]
+[assembly: AssemblyCulture("")]
+
+// Setting ComVisible to false makes the types in this assembly not visible
+// to COM components. If you need to access a type in this assembly from
+// COM, set the ComVisible attribute to true on that type.
+[assembly: ComVisible(false)]
+
+// The following GUID is for the ID of the typelib if this project is exposed to COM
+[assembly: Guid("7d2ba443-2896-4cce-89b6-5b39c49f2287")]
+
+// Version information for an assembly consists of the following four values:
+//
+// Major Version
+// Minor Version
+// Build Number
+// Revision
+//
+// You can specify all the values or you can default the Build and Revision Numbers
+// by using the '*' as shown below:
+// [assembly: AssemblyVersion("1.0.*")]
+[assembly: AssemblyVersion("1.7.0.0")]
+[assembly: AssemblyFileVersion("1.7.0.0")]
diff --git a/Properties/Resources.Designer.cs b/Properties/Resources.Designer.cs
new file mode 100644
index 0000000..9aae757
--- /dev/null
+++ b/Properties/Resources.Designer.cs
@@ -0,0 +1,63 @@
+//------------------------------------------------------------------------------
+//
+// Tento kód byl generován nástrojem.
+// Verze modulu runtime:4.0.30319.42000
+//
+// Změny tohoto souboru mohou způsobit nesprávné chování a budou ztraceny,
+// dojde-li k novému generování kódu.
+//
+//------------------------------------------------------------------------------
+
+namespace PolarisBiosEditor.Properties {
+ using System;
+
+
+ ///
+ /// Třída prostředků se silnými typy pro vyhledávání lokalizovaných řetězců atp.
+ ///
+ // Tato třída byla automaticky generována třídou StronglyTypedResourceBuilder
+ // pomocí nástroje podobného aplikaci ResGen nebo Visual Studio.
+ // Chcete-li přidat nebo odebrat člena, upravte souboru .ResX a pak znovu spusťte aplikaci ResGen
+ // s parametrem /str nebo znovu sestavte projekt aplikace Visual Studio.
+ [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "15.0.0.0")]
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+ [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]
+ internal class Resources {
+
+ private static global::System.Resources.ResourceManager resourceMan;
+
+ private static global::System.Globalization.CultureInfo resourceCulture;
+
+ [global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode")]
+ internal Resources() {
+ }
+
+ ///
+ /// Vrací instanci ResourceManager uloženou v mezipaměti použitou touto třídou.
+ ///
+ [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]
+ internal static global::System.Resources.ResourceManager ResourceManager {
+ get {
+ if (object.ReferenceEquals(resourceMan, null)) {
+ global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager("PolarisBiosEditor.Properties.Resources", typeof(Resources).Assembly);
+ resourceMan = temp;
+ }
+ return resourceMan;
+ }
+ }
+
+ ///
+ /// Potlačí vlastnost CurrentUICulture aktuálního vlákna pro všechna
+ /// vyhledání prostředků pomocí třídy prostředků se silnými typy.
+ ///
+ [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]
+ internal static global::System.Globalization.CultureInfo Culture {
+ get {
+ return resourceCulture;
+ }
+ set {
+ resourceCulture = value;
+ }
+ }
+ }
+}
diff --git a/Properties/Resources.resx b/Properties/Resources.resx
new file mode 100644
index 0000000..af7dbeb
--- /dev/null
+++ b/Properties/Resources.resx
@@ -0,0 +1,117 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ text/microsoft-resx
+
+
+ 2.0
+
+
+ System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+
+
+ System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+
+
\ No newline at end of file
diff --git a/Properties/Settings.Designer.cs b/Properties/Settings.Designer.cs
new file mode 100644
index 0000000..67960bc
--- /dev/null
+++ b/Properties/Settings.Designer.cs
@@ -0,0 +1,26 @@
+//------------------------------------------------------------------------------
+//
+// Tento kód byl generován nástrojem.
+// Verze modulu runtime:4.0.30319.42000
+//
+// Změny tohoto souboru mohou způsobit nesprávné chování a budou ztraceny,
+// dojde-li k novému generování kódu.
+//
+//------------------------------------------------------------------------------
+
+namespace PolarisBiosEditor.Properties {
+
+
+ [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]
+ [global::System.CodeDom.Compiler.GeneratedCodeAttribute("Microsoft.VisualStudio.Editors.SettingsDesigner.SettingsSingleFileGenerator", "15.3.0.0")]
+ internal sealed partial class Settings : global::System.Configuration.ApplicationSettingsBase {
+
+ private static Settings defaultInstance = ((Settings)(global::System.Configuration.ApplicationSettingsBase.Synchronized(new Settings())));
+
+ public static Settings Default {
+ get {
+ return defaultInstance;
+ }
+ }
+ }
+}
diff --git a/Properties/Settings.settings b/Properties/Settings.settings
new file mode 100644
index 0000000..3964565
--- /dev/null
+++ b/Properties/Settings.settings
@@ -0,0 +1,7 @@
+
+
+
+
+
+
+
diff --git a/README.md b/README.md
new file mode 100644
index 0000000..4c1b94d
--- /dev/null
+++ b/README.md
@@ -0,0 +1,109 @@
+# PolarisBiosEditor v1.7.0
+
+### Important: You need to disable SecureBoot / Activate CSM in your
+### Motherboard UEFI because the modification will make
+### the cryptographic signature invalid.
+
+If you don't trust the EXE just build on Linux with ```sh build.sh```. Quick and easy.
+
+VirusTotal Report: https://www.virustotal.com/de/file/da96cd604093c686e8b1488726ae10a43a550aea5aaba0c0f308183b86f340f3/analysis/1505395469/
+
+0/58. If your AV warns you about a virus/trojan, consider it as false positive.
+
+Fork from lojkinKot
+
+works on linux with mono, executable is build against .net 3.5
+
+one click timing feature should be used with care, it maybe not stable for you
+
+please build the executable yourself or decompile the existing one if you don't trust
+
+### v1.7.0
+- Added New timing for Hynix.
+- Added Clock Stretch Amount.
+- Added option for choosing timings on hynix Between Universal Hynix timing and Good hynix timing.
+- Universal Hynix timing work on: H5GC8H24MJ, H5GQ8H24MJ, H5GQ4H24AJ.
+
+### v1.6.9
+- Fixed UI (updated design)
+- Fixed and Updated all Timing's
+- Added New strap for Micron and Hynix
+- Added option for choosing timings on samsung between uber-mix 3.1 and 3.2, and on Micron between Good Micron timing and S Micron timing.
+- Added Icon
+- Added option for max. Mem. freq. (after one click timing patch button click automatically change max. mem. to 2300 MHz)
+
+### v1.6.8
+- Fixed Samsung Uber-Mix strap
+- Added support for Hynix H5GQ4H24AJ
+- Fixed fan mod option
+
+### v1.6.7
+- created solution and project files for ide
+- support for device id 0x67ef
+- better timings for micron memory
+- firmware signature test / firmware signature in ascii
+- editing of bios message (experimental)
+- online check for new versions
+- online display of developer notice
+
+### v1.6.6
+- support for rx550 device id 0x699F
+
+### v1.6.5
+- support up to 48 entrys in the timings table (more than 2 memory vendors)
+
+### v1.6.4
+- elpida timings fixed
+- K4G41325FS memory support
+
+### v1.6.3
+- timing modification starts now at 1500 instead of 1750
+- device id 67FF now also supported
+
+### v1.6.2
+- experimental: ubermix timings are now also applied to 4g SAMSUNG vram (K4G41325FC, K4G41325FE)
+- timing modification starts now at 1750 instead of 2000
+
+### v1.6.1
+- hynix memory H5GC8H24MJ now recognized (same timings as H5GQ8H24MJ)
+
+### v1.6
+- window resizes properly now
+- memory vendor detection
+- one click timing patch (samsung, hynix, elpida, micron)
+
+### v1.5
+- added FanControlMode setting
+- implemented some timing editor related code (not usable yet)
+
+### v1.4.1
+- replaced WPF components with Windows Forms to archive mono compatibility
+
+Contribution from Sebohe:
+
+### Build Dependencies
+
+Ubuntu 16.04.2:
+
+```
+sudo apt-get install mono-complete
+```
+
+Arch Linux:
+
+```
+yaourt -Sy mono48
+```
+### Building
+
+```
+sh build.sh
+```
+
+### Executing
+
+Just change your working directory to the PolarisBiosEditor and execute:
+
+```
+./run.sh
+```
diff --git a/bin/Debug/PolarisBiosEditor.exe b/bin/Debug/PolarisBiosEditor.exe
new file mode 100644
index 0000000..fa564b1
Binary files /dev/null and b/bin/Debug/PolarisBiosEditor.exe differ
diff --git a/bin/Debug/PolarisBiosEditor.exe.config b/bin/Debug/PolarisBiosEditor.exe.config
new file mode 100644
index 0000000..bae5d6d
--- /dev/null
+++ b/bin/Debug/PolarisBiosEditor.exe.config
@@ -0,0 +1,6 @@
+
+
+
+
+
+
diff --git a/bin/Debug/PolarisBiosEditor.pdb b/bin/Debug/PolarisBiosEditor.pdb
new file mode 100644
index 0000000..feeca61
Binary files /dev/null and b/bin/Debug/PolarisBiosEditor.pdb differ
diff --git a/bios.png b/bios.png
new file mode 100644
index 0000000..b9992ec
Binary files /dev/null and b/bios.png differ
diff --git a/build.sh b/build.sh
new file mode 100644
index 0000000..8334254
--- /dev/null
+++ b/build.sh
@@ -0,0 +1,2 @@
+#!/bin/bash
+mcs -unsafe -lib:/usr/lib/mono/4.0 -r:System.Drawing.dll -r:System.Windows.Forms.dll PolarisBiosEditor.cs PolarisBiosEditor.Designer.cs
diff --git a/favicon.ico b/favicon.ico
new file mode 100644
index 0000000..70d64fb
Binary files /dev/null and b/favicon.ico differ
diff --git a/notice b/notice
new file mode 100644
index 0000000..9bf6db3
--- /dev/null
+++ b/notice
@@ -0,0 +1,8 @@
+IMPORTANT:
+You need to disable SecureBoot / Activate CSM in your
+Motherboard UEFI because the modification will make
+the cryptographic signature invalid.
+
+If you find an error or missing a feature, feel free
+to create an issue at:
+https://github.com/IndeedMiners/PolarisBiosEditor/issues
diff --git a/obj/Debug/DesignTimeResolveAssemblyReferences.cache b/obj/Debug/DesignTimeResolveAssemblyReferences.cache
new file mode 100644
index 0000000..39472cb
Binary files /dev/null and b/obj/Debug/DesignTimeResolveAssemblyReferences.cache differ
diff --git a/obj/Debug/DesignTimeResolveAssemblyReferencesInput.cache b/obj/Debug/DesignTimeResolveAssemblyReferencesInput.cache
new file mode 100644
index 0000000..32134f5
Binary files /dev/null and b/obj/Debug/DesignTimeResolveAssemblyReferencesInput.cache differ
diff --git a/obj/Debug/PolarisBiosEditor.PolarisBiosEditor.resources b/obj/Debug/PolarisBiosEditor.PolarisBiosEditor.resources
new file mode 100644
index 0000000..79e63cc
Binary files /dev/null and b/obj/Debug/PolarisBiosEditor.PolarisBiosEditor.resources differ
diff --git a/obj/Debug/PolarisBiosEditor.Properties.Resources.resources b/obj/Debug/PolarisBiosEditor.Properties.Resources.resources
new file mode 100644
index 0000000..6c05a97
Binary files /dev/null and b/obj/Debug/PolarisBiosEditor.Properties.Resources.resources differ
diff --git a/obj/Debug/PolarisBiosEditor.csproj.CoreCompileInputs.cache b/obj/Debug/PolarisBiosEditor.csproj.CoreCompileInputs.cache
new file mode 100644
index 0000000..3ab22cd
--- /dev/null
+++ b/obj/Debug/PolarisBiosEditor.csproj.CoreCompileInputs.cache
@@ -0,0 +1 @@
+ae1ee4fadfe79c1d80e35a6d7186d4895ab6595a
diff --git a/obj/Debug/PolarisBiosEditor.csproj.FileListAbsolute.txt b/obj/Debug/PolarisBiosEditor.csproj.FileListAbsolute.txt
new file mode 100644
index 0000000..a86240e
--- /dev/null
+++ b/obj/Debug/PolarisBiosEditor.csproj.FileListAbsolute.txt
@@ -0,0 +1,20 @@
+C:\Users\VASKE\Desktop\PolarisBiosEditor-master\obj\Debug\PolarisBiosEditor.csprojAssemblyReference.cache
+C:\Users\VASKE\Desktop\PolarisBiosEditor-master\obj\Debug\PolarisBiosEditor.Properties.Resources.resources
+C:\Users\VASKE\Desktop\PolarisBiosEditor-master\obj\Debug\PolarisBiosEditor.csproj.GenerateResource.cache
+C:\Users\VASKE\Desktop\PolarisBiosEditor-master\bin\Debug\PolarisBiosEditor.exe.config
+C:\Users\VASKE\Desktop\PolarisBiosEditor-master\bin\Debug\PolarisBiosEditor.exe
+C:\Users\VASKE\Desktop\PolarisBiosEditor-master\bin\Debug\PolarisBiosEditor.pdb
+C:\Users\VASKE\Desktop\PolarisBiosEditor-master\obj\Debug\PolarisBiosEditor.PolarisBiosEditor.resources
+C:\Users\VASKE\Desktop\PolarisBiosEditor-master\obj\Debug\PolarisBiosEditor.csproj.CoreCompileInputs.cache
+C:\Users\VASKE\Desktop\PolarisBiosEditor-master\obj\Debug\PolarisBiosEditor.exe
+C:\Users\VASKE\Desktop\PolarisBiosEditor-master\obj\Debug\PolarisBiosEditor.pdb
+C:\Users\Acer\Documents\GitHub\PolarisBiosEditor\bin\Debug\PolarisBiosEditor.exe.config
+C:\Users\Acer\Documents\GitHub\PolarisBiosEditor\bin\Debug\PolarisBiosEditor.exe
+C:\Users\Acer\Documents\GitHub\PolarisBiosEditor\bin\Debug\PolarisBiosEditor.pdb
+C:\Users\Acer\Documents\GitHub\PolarisBiosEditor\obj\Debug\PolarisBiosEditor.csprojResolveAssemblyReference.cache
+C:\Users\Acer\Documents\GitHub\PolarisBiosEditor\obj\Debug\PolarisBiosEditor.PolarisBiosEditor.resources
+C:\Users\Acer\Documents\GitHub\PolarisBiosEditor\obj\Debug\PolarisBiosEditor.Properties.Resources.resources
+C:\Users\Acer\Documents\GitHub\PolarisBiosEditor\obj\Debug\PolarisBiosEditor.csproj.GenerateResource.Cache
+C:\Users\Acer\Documents\GitHub\PolarisBiosEditor\obj\Debug\PolarisBiosEditor.csproj.CoreCompileInputs.cache
+C:\Users\Acer\Documents\GitHub\PolarisBiosEditor\obj\Debug\PolarisBiosEditor.exe
+C:\Users\Acer\Documents\GitHub\PolarisBiosEditor\obj\Debug\PolarisBiosEditor.pdb
diff --git a/obj/Debug/PolarisBiosEditor.csproj.GenerateResource.Cache b/obj/Debug/PolarisBiosEditor.csproj.GenerateResource.Cache
new file mode 100644
index 0000000..fd5fdd0
Binary files /dev/null and b/obj/Debug/PolarisBiosEditor.csproj.GenerateResource.Cache differ
diff --git a/obj/Debug/PolarisBiosEditor.csprojAssemblyReference.cache b/obj/Debug/PolarisBiosEditor.csprojAssemblyReference.cache
new file mode 100644
index 0000000..eaf30a3
Binary files /dev/null and b/obj/Debug/PolarisBiosEditor.csprojAssemblyReference.cache differ
diff --git a/obj/Debug/PolarisBiosEditor.csprojResolveAssemblyReference.cache b/obj/Debug/PolarisBiosEditor.csprojResolveAssemblyReference.cache
new file mode 100644
index 0000000..eed2ba4
Binary files /dev/null and b/obj/Debug/PolarisBiosEditor.csprojResolveAssemblyReference.cache differ
diff --git a/obj/Debug/PolarisBiosEditor.exe b/obj/Debug/PolarisBiosEditor.exe
new file mode 100644
index 0000000..fa564b1
Binary files /dev/null and b/obj/Debug/PolarisBiosEditor.exe differ
diff --git a/obj/Debug/PolarisBiosEditor.pdb b/obj/Debug/PolarisBiosEditor.pdb
new file mode 100644
index 0000000..feeca61
Binary files /dev/null and b/obj/Debug/PolarisBiosEditor.pdb differ
diff --git a/obj/Debug/TempPE/Properties.Resources.Designer.cs.dll b/obj/Debug/TempPE/Properties.Resources.Designer.cs.dll
new file mode 100644
index 0000000..9e98725
Binary files /dev/null and b/obj/Debug/TempPE/Properties.Resources.Designer.cs.dll differ
diff --git a/obj/Debug/TemporaryGeneratedFile_036C0B5B-1481-4323-8D20-8F5ADCB23D92.cs b/obj/Debug/TemporaryGeneratedFile_036C0B5B-1481-4323-8D20-8F5ADCB23D92.cs
new file mode 100644
index 0000000..e69de29
diff --git a/obj/Debug/TemporaryGeneratedFile_5937a670-0e60-4077-877b-f7221da3dda1.cs b/obj/Debug/TemporaryGeneratedFile_5937a670-0e60-4077-877b-f7221da3dda1.cs
new file mode 100644
index 0000000..e69de29
diff --git a/obj/Debug/TemporaryGeneratedFile_E7A71F73-0F8D-4B9B-B56E-8E70B10BC5D3.cs b/obj/Debug/TemporaryGeneratedFile_E7A71F73-0F8D-4B9B-B56E-8E70B10BC5D3.cs
new file mode 100644
index 0000000..e69de29
diff --git a/obj/x86/Debug/PolarisBiosEditor.csproj.CoreCompileInputs.cache b/obj/x86/Debug/PolarisBiosEditor.csproj.CoreCompileInputs.cache
new file mode 100644
index 0000000..f269be7
--- /dev/null
+++ b/obj/x86/Debug/PolarisBiosEditor.csproj.CoreCompileInputs.cache
@@ -0,0 +1 @@
+5de2e88d6e57cf3dbb2f0c4f84a0fc6b967b8697
diff --git a/obj/x86/Debug/PolarisBiosEditor.csprojAssemblyReference.cache b/obj/x86/Debug/PolarisBiosEditor.csprojAssemblyReference.cache
new file mode 100644
index 0000000..eaf30a3
Binary files /dev/null and b/obj/x86/Debug/PolarisBiosEditor.csprojAssemblyReference.cache differ
diff --git a/run.sh b/run.sh
new file mode 100644
index 0000000..3aa1212
--- /dev/null
+++ b/run.sh
@@ -0,0 +1,2 @@
+#!/bin/bash
+mono PolarisBiosEditor.exe
diff --git a/version b/version
new file mode 100644
index 0000000..15d45d4
--- /dev/null
+++ b/version
@@ -0,0 +1 @@
+1.6.9