bf
This commit is contained in:
parent
0136084aa3
commit
f1e5bfa845
@ -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 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)
|
||||
{
|
||||
|
@ -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
|
||||
|
Loading…
Reference in New Issue
Block a user