From f2fa5b9f96258d5ae354797e81ffa2bf6d282578 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Mike=20Schw=C3=B6rer?= Date: Thu, 11 May 2017 18:50:26 +0200 Subject: [PATCH] dc fix --- PIC_Simulator/Form1.Designer.cs | 27 +-------------------------- PIC_Simulator/Form1.cs | 13 +++++++++++-- PIC_Simulator/PIC/PICProgramm.cs | 29 +++++++++++++++-------------- 3 files changed, 27 insertions(+), 42 deletions(-) diff --git a/PIC_Simulator/Form1.Designer.cs b/PIC_Simulator/Form1.Designer.cs index fcb7db6..03bf9ae 100644 --- a/PIC_Simulator/Form1.Designer.cs +++ b/PIC_Simulator/Form1.Designer.cs @@ -35,7 +35,6 @@ this.cmd_Start = new System.Windows.Forms.Button(); this.cmd_next = new System.Windows.Forms.Button(); this.cmd_reset = new System.Windows.Forms.Button(); - this.label3 = new System.Windows.Forms.Label(); this.menuStrip1 = new System.Windows.Forms.MenuStrip(); this.cmdOpenFile = new System.Windows.Forms.ToolStripMenuItem(); this.programmÖffnenToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); @@ -62,7 +61,6 @@ this.columnHeader15 = ((System.Windows.Forms.ColumnHeader)(new System.Windows.Forms.ColumnHeader())); this.columnHeader16 = ((System.Windows.Forms.ColumnHeader)(new System.Windows.Forms.ColumnHeader())); this.cmd_Stop = new System.Windows.Forms.Button(); - this.lbl_Timer = new System.Windows.Forms.Label(); this.insertTime = new System.Windows.Forms.TextBox(); this.lvSpecial = new System.Windows.Forms.ListView(); this.c1 = ((System.Windows.Forms.ColumnHeader)(new System.Windows.Forms.ColumnHeader())); @@ -182,16 +180,6 @@ this.cmd_reset.UseVisualStyleBackColor = true; this.cmd_reset.Click += new System.EventHandler(this.cmd_reset_Click); // - // label3 - // - this.label3.AutoSize = true; - this.label3.Location = new System.Drawing.Point(248, 34); - this.label3.Margin = new System.Windows.Forms.Padding(2, 0, 2, 0); - this.label3.Name = "label3"; - this.label3.Size = new System.Drawing.Size(82, 13); - this.label3.TabIndex = 8; - this.label3.Text = "Programmzähler"; - // // menuStrip1 // this.menuStrip1.ImageScalingSize = new System.Drawing.Size(24, 24); @@ -379,16 +367,6 @@ this.cmd_Stop.UseVisualStyleBackColor = true; this.cmd_Stop.Click += new System.EventHandler(this.cmd_Stop_Click); // - // lbl_Timer - // - this.lbl_Timer.AutoSize = true; - this.lbl_Timer.Location = new System.Drawing.Point(705, 28); - this.lbl_Timer.Margin = new System.Windows.Forms.Padding(2, 0, 2, 0); - this.lbl_Timer.Name = "lbl_Timer"; - this.lbl_Timer.Size = new System.Drawing.Size(33, 13); - this.lbl_Timer.TabIndex = 16; - this.lbl_Timer.Text = "Timer"; - // // insertTime // this.insertTime.Location = new System.Drawing.Point(894, 31); @@ -844,6 +822,7 @@ this.edCLockFreq.Name = "edCLockFreq"; this.edCLockFreq.Size = new System.Drawing.Size(140, 20); this.edCLockFreq.TabIndex = 62; + this.edCLockFreq.Text = "1500"; // // Form1 // @@ -896,11 +875,9 @@ this.Controls.Add(this.lbStack); this.Controls.Add(this.lvSpecial); this.Controls.Add(this.insertTime); - this.Controls.Add(this.lbl_Timer); this.Controls.Add(this.cmd_Stop); this.Controls.Add(this.lvMemory); this.Controls.Add(this.label4); - this.Controls.Add(this.label3); this.Controls.Add(this.cmd_reset); this.Controls.Add(this.cmd_next); this.Controls.Add(this.cmd_Start); @@ -929,7 +906,6 @@ private System.Windows.Forms.Button cmd_Start; private System.Windows.Forms.Button cmd_next; private System.Windows.Forms.Button cmd_reset; - private System.Windows.Forms.Label label3; private System.Windows.Forms.MenuStrip menuStrip1; private System.Windows.Forms.ToolStripMenuItem cmdOpenFile; private System.Windows.Forms.ToolStripMenuItem programmÖffnenToolStripMenuItem; @@ -947,7 +923,6 @@ private System.Windows.Forms.ColumnHeader columnHeader8; private System.Windows.Forms.ToolStripMenuItem beendenToolStripMenuItem; private System.Windows.Forms.Button cmd_Stop; - private System.Windows.Forms.Label lbl_Timer; private System.Windows.Forms.TextBox insertTime; private System.Windows.Forms.ListView lvSpecial; private System.Windows.Forms.ColumnHeader c1; diff --git a/PIC_Simulator/Form1.cs b/PIC_Simulator/Form1.cs index a57c591..e54d074 100644 --- a/PIC_Simulator/Form1.cs +++ b/PIC_Simulator/Form1.cs @@ -34,6 +34,10 @@ namespace PIC_Simulator lvSpecial.Items.Add(new ListViewItem(new[] { "PC", "0x00" })); lvSpecial.Items.Add(new ListViewItem(new[] { "Status", "0b00000000" })); lvSpecial.Items.Add(new ListViewItem(new[] { "Time", "0ms" })); + + lvSpecial.Items.Add(new ListViewItem(new[] { "Status[DC]", "0" })); + lvSpecial.Items.Add(new ListViewItem(new[] { "Status[C]", "0" })); + lvSpecial.Items.Add(new ListViewItem(new[] { "Status[Z]", "0" })); } private void Form1_Load(object sender, EventArgs e) @@ -155,6 +159,8 @@ namespace PIC_Simulator { // Zeile highlighten + var a = box_CodeView.SelectionStart; + if (programm.befehle.Count > 0 && programm.PCCounter < programm.befehle.Count) { Highlight(programm.befehle[programm.PCCounter].zeilennummer); @@ -169,7 +175,7 @@ namespace PIC_Simulator } } - box_CodeView.SelectionStart = 0; + box_CodeView.SelectionStart = a; box_CodeView.SelectionLength = 0; // Memory aktualisieren @@ -188,7 +194,10 @@ namespace PIC_Simulator lvSpecial.Items[0].SubItems[1].Text = string.Format("0x{0:X2}", programm.Register_W); lvSpecial.Items[1].SubItems[1].Text = string.Format("{0,4}", programm.PCCounter); lvSpecial.Items[2].SubItems[1].Text = string.Format("0b{0}", Convert.ToString(programm.GetRegisterOhneBank(PICProgramm.ADDR_STATUS), 2).PadLeft(8, '0')); - lvSpecial.Items[1].SubItems[1].Text = string.Format("{0}ms", programm.Stepcount * int.Parse(insertTime.Text)); + lvSpecial.Items[3].SubItems[1].Text = string.Format("{0}ms", programm.Stepcount * int.Parse(insertTime.Text)); + lvSpecial.Items[4].SubItems[1].Text = programm.GetRegisterOhneBank(PICProgramm.ADDR_STATUS, PICProgramm.STATUS_BIT_C) ? "1" : "0"; + lvSpecial.Items[5].SubItems[1].Text = programm.GetRegisterOhneBank(PICProgramm.ADDR_STATUS, PICProgramm.STATUS_BIT_DC) ? "1" : "0"; + lvSpecial.Items[6].SubItems[1].Text = programm.GetRegisterOhneBank(PICProgramm.ADDR_STATUS, PICProgramm.STATUS_BIT_Z) ? "1" : "0"; lbStack.Items.Clear(); foreach (var u in programm.Stack) lbStack.Items.Add(u.ToString()); diff --git a/PIC_Simulator/PIC/PICProgramm.cs b/PIC_Simulator/PIC/PICProgramm.cs index a7eb489..dbb568f 100644 --- a/PIC_Simulator/PIC/PICProgramm.cs +++ b/PIC_Simulator/PIC/PICProgramm.cs @@ -243,10 +243,10 @@ namespace PIC_Simulator.PIC // in the W register.If 'd' is 1 the result is // stored back in register 'f'. - uint a = GetRegister(aktueller_befehl.parameter_f); - uint b = Register_W; + byte a = GetRegister(aktueller_befehl.parameter_f); + byte b = Register_W; - var Result = a + b; + uint Result = (uint) (a + b); bool dc = AdditionDigitCarry(a, b); SetRegisterOhneBank(ADDR_STATUS, STATUS_BIT_Z, (Result % 0x100) == 0); @@ -256,7 +256,7 @@ namespace PIC_Simulator.PIC Result %= 0x100; if (aktueller_befehl.parameter_d != 0) - SetRegister(aktueller_befehl.parameter_f, Result); + SetRegister(aktueller_befehl.parameter_f, (byte)Result); else Register_W = (byte)Result; } @@ -512,11 +512,11 @@ namespace PIC_Simulator.PIC uint a = GetRegister(aktueller_befehl.parameter_f); uint b = Register_W; - bool carry; + bool carry = (a + ((~b) & 0xFF)) > 0xFF; - bool dc = SubtractionDigitCarry(a, b); + bool dc = SubtractionDigitCarry((byte)a, (byte)b); - if (carry = a < b) + if (a < b) { a += 0x100; } @@ -525,7 +525,7 @@ namespace PIC_Simulator.PIC SetRegisterOhneBank(ADDR_STATUS, STATUS_BIT_Z, (Result % 0x100) == 0); SetRegisterOhneBank(ADDR_STATUS, STATUS_BIT_DC, dc); - SetRegisterOhneBank(ADDR_STATUS, STATUS_BIT_C, !carry); + SetRegisterOhneBank(ADDR_STATUS, STATUS_BIT_C, carry); Result %= 0x100; @@ -618,7 +618,7 @@ namespace PIC_Simulator.PIC uint b = aktueller_befehl.parameter_k; uint Result = a + b; - bool dc = AdditionDigitCarry(a, b); + bool dc = AdditionDigitCarry((byte)a, (byte)b); SetRegisterOhneBank(ADDR_STATUS, STATUS_BIT_Z, (Result % 0x100) == 0); SetRegisterOhneBank(ADDR_STATUS, STATUS_BIT_DC, dc); @@ -753,7 +753,7 @@ namespace PIC_Simulator.PIC bool carry; - bool dc = SubtractionDigitCarry(a, b); + bool dc = SubtractionDigitCarry((byte)a, (byte)b); if (carry = a < b) { @@ -879,7 +879,7 @@ namespace PIC_Simulator.PIC return GetBit(GetRegisterOhneBank(index), bit); } - public static bool AdditionDigitCarry(uint a, uint b) + public static bool AdditionDigitCarry(byte a, byte b) { a &= 0x0F; b &= 0x0F; @@ -887,11 +887,12 @@ namespace PIC_Simulator.PIC return (a + b) > 0x0F; } - public static bool SubtractionDigitCarry(uint a, uint b) + public static bool SubtractionDigitCarry(byte a, byte b) { - b = (~b) + 1; + int xa = a & 0x0F; + int xb = ((~b) & 0x0F); - return AdditionDigitCarry(a, b); + return (xa + xb) > 0x0F; } public static bool GetBit(uint val, uint pos)