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