public static void INCFSZ(UInt16 Befehl, Arbeitsspeicher RAM, byte bank) { byte regValue = RAM.getRegisterValue(bank, (byte)(Befehl & 0x7F)); bool zeroFlag = false; if ((Befehl & 0x80) == 0) { RAM.ChangeW((byte)(regValue + 1)); if (RAM.W == 0) { zeroFlag = true; } } else { RAM.ChangeRegister(bank, (byte)(Befehl & 0x7F), (byte)(regValue + 1)); if ((byte)(regValue + 1) == 0) { zeroFlag = true; } } if (zeroFlag == false) //Wenn das Zero Flag nicht gesetzt ist, führe nächsten Befehl aus { ++RAM.RAM[bank, 2]; RAM.incInternalTimer(1); } else //ansonsten überspringe den nächsten { RAM.RAM[bank, 2] += 2; RAM.incInternalTimer(2); } }
public static void CLRF(UInt16 Befehl, Arbeitsspeicher RAM, byte bank) { RAM.ChangeRegister(bank, (byte)(Befehl & 0x007F), 0); RAM.ZeroBit(bank, Befehl); ++RAM.RAM[bank, 2]; RAM.incInternalTimer(1); }
public static void MOVWF(UInt16 Befehl, Arbeitsspeicher RAM, byte bank) { RAM.incInternalTimer(1); ++RAM.RAM[bank, 2]; RAM.ChangeRegister(bank, (byte)(Befehl & 0x007F), RAM.W); }
public static void ANDWF(UInt16 Befehl, Arbeitsspeicher RAM, byte bank) { byte regValue = RAM.getRegisterValue(bank, (byte)(Befehl & 0x7F)); if ((Befehl & 0x80) == 0) { RAM.ChangeW((byte)(RAM.W & regValue)); RAM.ZeroBit(bank); } else { RAM.ChangeRegister(bank, (byte)(Befehl & 0x7F), (byte)(RAM.W & regValue)); RAM.ZeroBit(bank, Befehl); } ++RAM.RAM[bank, 2]; RAM.incInternalTimer(1); }