private void RewriteCLRWDT() { byte mask; PICRegisterBitFieldStorage pd = PICRegisters.PD; PICRegisterBitFieldStorage to = PICRegisters.TO; Identifier pdreg = binder.EnsureRegister(pd.FlagRegister); Identifier toreg = binder.EnsureRegister(to.FlagRegister); if (ReferenceEquals(pdreg, toreg) && pdreg != null) { mask = (byte)((1 << pd.BitPos) | (1 << to.BitPos)); m.Assign(pdreg, m.Or(pdreg, Constant.Byte(mask))); return; } if (pdreg != null) { mask = (byte)((1 << pd.BitPos)); m.Assign(pdreg, m.Or(pdreg, Constant.Byte(mask))); } if (toreg != null) { mask = (byte)((1 << to.BitPos)); m.Assign(pdreg, m.Or(pdreg, Constant.Byte(mask))); } }
/// <summary> /// Sets core registers common to all PIC16. /// </summary> protected override void SetCoreRegisters() { base.SetCoreRegisters(); INTCON = GetRegister("INTCON"); GIE = GetBitField("GIE"); }
private void RewriteSLEEP() { byte mask; PICRegisterBitFieldStorage pd = PICRegisters.PD; PICRegisterBitFieldStorage to = PICRegisters.TO; Identifier pdreg = binder.EnsureRegister(pd.FlagRegister); Identifier toreg = binder.EnsureRegister(to.FlagRegister); if (ReferenceEquals(pdreg, toreg) && pdreg != null) { mask = (byte)(~(1 << pd.BitPos)); m.Assign(pdreg, m.And(pdreg, Constant.Byte(mask))); mask = (byte)(1 << to.BitPos); m.Assign(pdreg, m.Or(pdreg, Constant.Byte(mask))); return; } if (pd != null) { m.Assign(pdreg, m.Dpb(pdreg, Constant.False(), pd.BitPos)); } if (to != null) { m.Assign(toreg, m.Dpb(toreg, Constant.True(), to.BitPos)); } }
private void Rewrite_RETFIE() { PICRegisterBitFieldStorage gie = PIC16Registers.GIE; byte mask = (byte)(1 << gie.BitPos); var intcon = binder.EnsureRegister(PIC16Registers.INTCON); m.Assign(intcon, m.Or(intcon, Constant.Byte(mask))); PopFromHWStackAccess(); m.Return(0, 0); }
private void Rewrite_CLRWDT() { byte mask; PICRegisterBitFieldStorage pd = PICRegisters.PD; PICRegisterBitFieldStorage to = PICRegisters.TO; var status = binder.EnsureRegister(PICRegisters.STATUS); mask = (byte)((1 << pd.BitPos) | (1 << to.BitPos)); m.Assign(status, m.Or(status, Constant.Byte(mask))); }