diff --git a/PIC_Simulator/PIC/PICProgramm.cs b/PIC_Simulator/PIC/PICProgramm.cs index 206ef8f..a7eb489 100644 --- a/PIC_Simulator/PIC/PICProgramm.cs +++ b/PIC_Simulator/PIC/PICProgramm.cs @@ -111,8 +111,8 @@ namespace PIC_Simulator.PIC public int PCCounter = 0; // -> nächster befehl public int Stepcount = 0; - public uint Register_W = 0; - public uint[] Register = new uint[0x100]; + public byte Register_W = 0; + public byte[] Register = new byte[0x100]; public Stack Stack = new Stack(); public bool IsSleeping = false; @@ -246,7 +246,7 @@ namespace PIC_Simulator.PIC uint a = GetRegister(aktueller_befehl.parameter_f); uint b = Register_W; - uint Result = a + b; + var Result = a + b; bool dc = AdditionDigitCarry(a, b); SetRegisterOhneBank(ADDR_STATUS, STATUS_BIT_Z, (Result % 0x100) == 0); @@ -258,7 +258,7 @@ namespace PIC_Simulator.PIC if (aktueller_befehl.parameter_d != 0) SetRegister(aktueller_befehl.parameter_f, Result); else - Register_W = Result; + Register_W = (byte)Result; } else if (aktueller_befehl.befehl == ANDWF) { @@ -267,7 +267,7 @@ namespace PIC_Simulator.PIC // ter.If 'd' is 1 the result is stored back in // register 'f' - uint Result = Register_W & GetRegister(aktueller_befehl.parameter_f); + byte Result = (byte)(Register_W & GetRegister(aktueller_befehl.parameter_f)); SetRegisterOhneBank(ADDR_STATUS, STATUS_BIT_Z, Result == 0); @@ -289,7 +289,7 @@ namespace PIC_Simulator.PIC // W register is cleared.Zero bit (Z) is // set. - Register_W = 0; + Register_W = 0; SetRegisterOhneBank(ADDR_STATUS, STATUS_BIT_Z, true); } else if (aktueller_befehl.befehl == COMF) @@ -299,7 +299,7 @@ namespace PIC_Simulator.PIC // W.If 'd' is 1 the result is stored back in // register 'f'. - uint Result = ~GetRegister(aktueller_befehl.parameter_f); + byte Result = (byte)~GetRegister(aktueller_befehl.parameter_f); SetRegisterOhneBank(ADDR_STATUS, STATUS_BIT_Z, Result == 0); @@ -326,7 +326,7 @@ namespace PIC_Simulator.PIC if (aktueller_befehl.parameter_d != 0) SetRegister(aktueller_befehl.parameter_f, Result); else - Register_W = Result; + Register_W = (byte)Result; } else if (aktueller_befehl.befehl == DECFSZ) { @@ -351,7 +351,7 @@ namespace PIC_Simulator.PIC if (aktueller_befehl.parameter_d != 0) SetRegister(aktueller_befehl.parameter_f, Result); else - Register_W = Result; + Register_W = (byte)Result; if (Cond) { @@ -376,7 +376,7 @@ namespace PIC_Simulator.PIC if (aktueller_befehl.parameter_d != 0) SetRegister(aktueller_befehl.parameter_f, Result); else - Register_W = Result; + Register_W = (byte)Result; } else if (aktueller_befehl.befehl == INCFSZ) { @@ -400,7 +400,7 @@ namespace PIC_Simulator.PIC if (aktueller_befehl.parameter_d != 0) SetRegister(aktueller_befehl.parameter_f, Result); else - Register_W = Result; + Register_W = (byte)Result; if (Cond) { @@ -414,7 +414,7 @@ namespace PIC_Simulator.PIC // W register.If 'd' is 1 the result is placed // back in register 'f'. - uint Result = Register_W | GetRegister(aktueller_befehl.parameter_f); + byte Result = (byte)(Register_W | GetRegister(aktueller_befehl.parameter_f)); SetRegisterOhneBank(ADDR_STATUS, STATUS_BIT_Z, Result == 0); @@ -439,7 +439,7 @@ namespace PIC_Simulator.PIC if (aktueller_befehl.parameter_d != 0) SetRegister(aktueller_befehl.parameter_f, Result); else - Register_W = Result; + Register_W = (byte)Result; } else if (aktueller_befehl.befehl == MOVWF) { @@ -475,7 +475,7 @@ namespace PIC_Simulator.PIC if (aktueller_befehl.parameter_d != 0) SetRegister(aktueller_befehl.parameter_f, Result); else - Register_W = Result; + Register_W = (byte)Result; } else if (aktueller_befehl.befehl == RRF) { @@ -500,7 +500,7 @@ namespace PIC_Simulator.PIC if (aktueller_befehl.parameter_d != 0) SetRegister(aktueller_befehl.parameter_f, Result); else - Register_W = Result; + Register_W = (byte)Result; } else if (aktueller_befehl.befehl == SUBWF) { @@ -532,7 +532,7 @@ namespace PIC_Simulator.PIC if (aktueller_befehl.parameter_d != 0) SetRegister(aktueller_befehl.parameter_f, Result); else - Register_W = Result; + Register_W = (byte)Result; } else if (aktueller_befehl.befehl == SWAPF) { @@ -551,7 +551,7 @@ namespace PIC_Simulator.PIC if (aktueller_befehl.parameter_d != 0) SetRegister(aktueller_befehl.parameter_f, Result); else - Register_W = Result; + Register_W = (byte)Result; } else if (aktueller_befehl.befehl == XORWF) { @@ -560,7 +560,7 @@ namespace PIC_Simulator.PIC // result is stored in the W register.If 'd' is // 1 the result is stored back in register 'f'. - uint Result = Register_W ^ GetRegister(aktueller_befehl.parameter_f); + byte Result = (byte)(Register_W ^ GetRegister(aktueller_befehl.parameter_f)); SetRegisterOhneBank(ADDR_STATUS, STATUS_BIT_Z, Result == 0); @@ -626,7 +626,7 @@ namespace PIC_Simulator.PIC Result %= 0x100; - Register_W = Result; + Register_W = (byte)Result; } else if (aktueller_befehl.befehl == ANDLW) { @@ -638,7 +638,7 @@ namespace PIC_Simulator.PIC SetRegisterOhneBank(ADDR_STATUS, STATUS_BIT_Z, Result == 0); - Register_W = Result; + Register_W = (byte)Result; } else if (aktueller_befehl.befehl == CALL) { @@ -681,7 +681,7 @@ namespace PIC_Simulator.PIC SetRegisterOhneBank(ADDR_STATUS, STATUS_BIT_Z, Result == 0); - Register_W = Result; + Register_W = (byte)Result; } else if (aktueller_befehl.befehl == MOVLW) { @@ -689,7 +689,7 @@ namespace PIC_Simulator.PIC // register.The don’t cares will assemble // as 0’s. - Register_W = aktueller_befehl.parameter_k; + Register_W = (byte)aktueller_befehl.parameter_k; } else if (aktueller_befehl.befehl == RETFIE) { @@ -709,7 +709,7 @@ namespace PIC_Simulator.PIC // loaded from the top of the stack(the // return address). This is a two cycle // instruction. - Register_W = aktueller_befehl.parameter_k; + Register_W = (byte)aktueller_befehl.parameter_k; PCCounter = (int) Stack.Pop(); } else if (aktueller_befehl.befehl == RETURN) @@ -768,7 +768,7 @@ namespace PIC_Simulator.PIC Result %= 0x100; - Register_W = Result; + Register_W = (byte)Result; } else if (aktueller_befehl.befehl == XORLW) { @@ -781,7 +781,7 @@ namespace PIC_Simulator.PIC SetRegisterOhneBank(ADDR_STATUS, STATUS_BIT_Z, Result == 0); - Register_W = Result; ; + Register_W = (byte)Result; ; } PCCounter++; @@ -811,14 +811,14 @@ namespace PIC_Simulator.PIC if (index == ADDR_INDF) // indirekte adresierung { - if (Register[ADDR_FSR] % 0x80 != 0) Register[Register[ADDR_FSR]] = wert; + if (Register[ADDR_FSR] % 0x80 != 0) Register[Register[ADDR_FSR]] = (byte)(wert & 0xFF); return; } - Register[index] = wert; + Register[index] = (byte)(wert & 0xFF); } - public uint GetRegisterOhneBank(uint index) + public byte GetRegisterOhneBank(uint index) { if (index == ADDR_UNIMPL_A) return 0; if (index == ADDR_UNIMPL_B) return 0; @@ -839,7 +839,7 @@ namespace PIC_Simulator.PIC return Register[index]; } - private uint GetRegister(uint index) + private byte GetRegister(uint index) { if ((Register[ADDR_STATUS] & STATUS_BIT_RP0) == STATUS_BIT_RP0) { diff --git a/Projektinformationen/Tabelle.txt b/Projektinformationen/Tabelle.txt index 46cc0cf..d9aa94f 100644 --- a/Projektinformationen/Tabelle.txt +++ b/Projektinformationen/Tabelle.txt @@ -13,10 +13,10 @@ [X] Breakpoints [X] Hardwareansteuerung [X] Testprogramm 1 (Literalbefehle) -[ ] Testprogramm 2 (CALL, GOTO etc) -[ ] Testprogramm 3 (Byte Befehle ohne 4). -[ ] Testprogramm 4 (DECFSZ, RLF, RRF... -[ ] Testprogramm 5 (Bitbefehle) +[X] Testprogramm 2 (CALL, GOTO etc) +[X] Testprogramm 3 (Byte Befehle ohne 4). +[X] Testprogramm 4 (DECFSZ, RLF, RRF... +[X] Testprogramm 5 (Bitbefehle) [ ] Testprogramm 6 (indirekte Adressierung) [ ] Testprogramm 7 (Timer 0 ) [X] Ext. Taktgeber an RA4 + IO-Pin