public void RemovePrivilege(PrivilegeMode Privilege) { if (Privileges.Contains(Privilege)) { Privileges.Remove(Privilege); } }
public void AddPrivilege(PrivilegeMode Privilege) { if (!Privileges.Contains(Privilege)) { Privileges.Add(Privilege); } }
public RiscV(string cpuType, long frequency, Machine machine, PrivilegeMode privilegeMode = PrivilegeMode.Priv1_10, Endianess endianness = Endianess.LittleEndian) : base(cpuType, machine, endianness) { InnerTimer = new ComparingTimer(machine.ClockSource, frequency, enabled: true, eventEnabled: true); intTypeToVal = new TwoWayDictionary <int, IrqType>(); intTypeToVal.Add(0, IrqType.MachineTimerIrq); intTypeToVal.Add(1, IrqType.MachineExternalIrq); intTypeToVal.Add(2, IrqType.MachineSoftwareInterrupt); var architectureSets = DecodeArchitecture(cpuType); foreach (var @set in architectureSets) { if (Enum.IsDefined(typeof(InstructionSet), set)) { TlibAllowFeature((uint)set); } else if ((int)set == 'G' - 'A') { //G is a wildcard denoting multiple instruction sets foreach (var gSet in new [] { InstructionSet.I, InstructionSet.M, InstructionSet.F, InstructionSet.D, InstructionSet.A }) { TlibAllowFeature((uint)gSet); } } else { this.Log(LogLevel.Warning, $"Undefined instruction set: {char.ToUpper((char)(set + 'A'))}."); } } TlibSetPrivilegeMode109(privilegeMode == PrivilegeMode.Priv1_09 ? 1 : 0u); }