This commit is contained in:
Mike Schwörer 2017-05-11 17:00:01 +02:00
parent 0136084aa3
commit f1e5bfa845
2 changed files with 33 additions and 33 deletions

View File

@ -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<uint> Stack = new Stack<uint>();
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 dont cares will assemble
// as 0s.
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)
{

View File

@ -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