private void HideWindow(object sender, RoutedEventArgs e) { InterruptManager.ResetInterrupts(); TankBusterManager.ResetTankBusters(); FormManager.SaveFormInstances(); Hide(); }
protected BasicCombatClass(AmeisenBotStateMachine stateMachine) { WowInterface = WowInterface.I; StateMachine = stateMachine; Configureables = new Dictionary <string, dynamic>() { { "HealingItemHealthThreshold", 30.0 }, { "HealingItemManaThreshold", 30.0 } }; CooldownManager = new CooldownManager(WowInterface.CharacterManager.SpellBook.Spells); RessurrectionTargets = new Dictionary <string, DateTime>(); TargetManagerDps = new TargetManager(new DpsTargetSelectionLogic(), TimeSpan.FromMilliseconds(250)); TargetManagerTank = new TargetManager(new TankTargetSelectionLogic(), TimeSpan.FromMilliseconds(250)); TargetManagerHeal = new TargetManager(new HealTargetSelectionLogic(), TimeSpan.FromMilliseconds(250)); MyAuraManager = new AuraManager(() => WowInterface.ObjectManager.Player?.Auras); TargetAuraManager = new AuraManager(() => WowInterface.ObjectManager.Target?.Auras); GroupAuraManager = new GroupAuraManager(WowInterface); TargetInterruptManager = new InterruptManager(new List <WowUnit>() { WowInterface.ObjectManager.Target }, null); EventCheckFacing = new TimegatedEvent(TimeSpan.FromMilliseconds(500)); EventAutoAttack = new TimegatedEvent(TimeSpan.FromMilliseconds(500)); }
/// <summary> /// Initializes the Device Driver System. /// </summary> static public void Initialize() { // Create Device Manager deviceManager = new DeviceManager(); // Create Interrupt Manager interruptManager = new InterruptManager(); // Create the Device Driver Manager deviceDriverRegistry = new DeviceDriverRegistry(PlatformArchitecture.X86); // Create the PCI Controller Manager pciControllerManager = new PCIControllerManager(deviceManager); // Setup hardware abstraction interface var hardware = new Mosa.CoolWorld.x86.HAL.Hardware(); // Set device driver system to the hardware HAL Mosa.HardwareSystem.HAL.SetHardwareAbstraction(hardware); // Set the interrupt handler Mosa.HardwareSystem.HAL.SetInterruptHandler(InterruptManager.ProcessInterrupt); partitionManager = new PartitionManager(deviceManager); }
public NRF52840_UART(Machine machine, bool easyDMA = false) : base(machine) { this.easyDMA = easyDMA; IRQ = new GPIO(); interruptManager = new InterruptManager <Interrupts>(this); registers = new DoubleWordRegisterCollection(this, DefineRegisters()); }
public Gpu(IDisplay display, InterruptManager interruptManager, Dma dma, Ram oamRam, bool gbc) { _r = new MemoryRegisters(GpuRegister.Values().ToArray()); _lcdc = new Lcdc(); _interruptManager = interruptManager; _gbc = gbc; _videoRam0 = new Ram(0x8000, 0x2000); _videoRam1 = gbc ? new Ram(0x8000, 0x2000) : null; _oamRam = oamRam; _dma = dma; _bgPalette = new ColorPalette(0xff68); _oamPalette = new ColorPalette(0xff6a); _oamPalette.FillWithFf(); _oamSearchPhase = new OamSearch(oamRam, _lcdc, _r); _pixelTransferPhase = new PixelTransfer(_videoRam0, _videoRam1, oamRam, display, _lcdc, _r, gbc, _bgPalette, _oamPalette); _hBlankPhase = new HBlankPhase(); _vBlankPhase = new VBlankPhase(); _mode = Mode.OamSearch; _phase = _oamSearchPhase.Start(); _display = display; }
// the default moduleRevision/moduleId are correct for Zynq with GEM p23 public CadenceGEM(Machine machine, ushort moduleRevision = 0x118, ushort moduleId = 0x2) : base(machine) { ModuleId = moduleId; ModuleRevision = moduleRevision; IRQ = new GPIO(); MAC = EmulationManager.Instance.CurrentEmulation.MACRepository.GenerateUniqueMAC(); sync = new object(); interruptManager = new InterruptManager <Interrupts>(this); nanoTimer = new LimitTimer(machine.ClockSource, NanosPerSecond, this, "PTP nanos", limit: NanosPerSecond, direction: Direction.Ascending, workMode: WorkMode.Periodic, eventEnabled: true); nanoTimer.LimitReached += () => secTimer.Value++; var registersMap = new Dictionary <long, DoubleWordRegister> { { (long)Registers.NetworkControl, new DoubleWordRegister(this) .WithFlag(2, out receiveEnabled, name: "RXEN") .WithFlag(9, FieldMode.Write, name: "STARTTX", writeCallback: (_, value) => { if (value) { SendFrames(); } }) },
public EFR32_I2CController(Machine machine) : base(machine) { IRQ = new GPIO(); txBuffer = new Queue <byte>(); rxBuffer = new Queue <byte>(); interruptsManager = new InterruptManager <Interrupt>(this); var map = new Dictionary <long, DoubleWordRegister> { { (long)Registers.ReceiveBufferData, new DoubleWordRegister(this) .WithValueField(0, 8, FieldMode.Read, name: "RXDATA", valueProviderCallback: _ => { var result = rxBuffer.Dequeue(); interruptsManager.SetInterrupt(Interrupt.ReceiveDataValid, rxBuffer.Any()); return(result); }) }, { (long)Registers.ReceiveBufferDataPeek, new DoubleWordRegister(this) .WithValueField(0, 8, FieldMode.Read, name: "RXDATAP", valueProviderCallback: _ => rxBuffer.Peek()) }, { (long)Registers.Command, new DoubleWordRegister(this) .WithValueField(0, 8, FieldMode.Write, name: "COMMAND", writeCallback: (_, v) => HandleCommand((Command)v)) }, { (long)Registers.TransmitBufferData, new DoubleWordRegister(this) .WithValueField(0, 8, FieldMode.Write, name: "TXDATA", writeCallback: (_, v) => LoadTxData((byte)v)) } }; map.Add((long)Registers.InterruptFlag, interruptsManager.GetInterruptFlagRegister <DoubleWordRegister>()); map.Add((long)Registers.InterruptEnable, interruptsManager.GetInterruptEnableRegister <DoubleWordRegister>()); map.Add((long)Registers.InterruptFlagSet, interruptsManager.GetInterruptFlagRegister <DoubleWordRegister>()); map.Add((long)Registers.InterruptFlagClear, interruptsManager.GetInterruptClearRegister <DoubleWordRegister>()); registers = new DoubleWordRegisterCollection(this, map); }
protected BasicCombatClass(WowInterface wowInterface, AmeisenBotFsm stateMachine) { WowInterface = wowInterface; StateMachine = stateMachine; C = new Dictionary <string, dynamic>() { { "HealingItemHealthThreshold", 30.0 }, { "HealingItemManaThreshold", 30.0 } }; CooldownManager = new CooldownManager(WowInterface.CharacterManager.SpellBook.Spells); RessurrectionTargets = new Dictionary <string, DateTime>(); TargetManagerDps = new TargetManager(new DpsTargetSelectionLogic(wowInterface), TimeSpan.FromMilliseconds(250)); TargetManagerTank = new TargetManager(new TankTargetSelectionLogic(wowInterface), TimeSpan.FromMilliseconds(250)); TargetManagerHeal = new TargetManager(new HealTargetSelectionLogic(wowInterface), TimeSpan.FromMilliseconds(250)); MyAuraManager = new AuraManager(wowInterface); TargetAuraManager = new AuraManager(wowInterface); GroupAuraManager = new GroupAuraManager(wowInterface); TargetInterruptManager = new InterruptManager(); EventCheckFacing = new(TimeSpan.FromMilliseconds(500)); EventAutoAttack = new(TimeSpan.FromMilliseconds(500)); }
public Gameboy( GameboyOptions options, Cartridge rom, IDisplay display, IController controller, ISoundOutput soundOutput, SerialEndpoint serialEndpoint) { _display = display; _gbc = rom.Gbc; SpeedMode = new SpeedMode(); var interruptManager = new InterruptManager(_gbc); _timer = new Timer(interruptManager, SpeedMode); Mmu = new Mmu(); var oamRam = new Ram(0xfe00, 0x00a0); _dma = new Dma(Mmu, oamRam, SpeedMode); _gpu = new Gpu(display, interruptManager, _dma, oamRam, _gbc); _hdma = new Hdma(Mmu); _sound = new Sound(soundOutput, _gbc); _serialPort = new SerialPort(interruptManager, serialEndpoint, SpeedMode); Mmu.AddAddressSpace(rom); Mmu.AddAddressSpace(_gpu); Mmu.AddAddressSpace(new Joypad(interruptManager, controller)); Mmu.AddAddressSpace(interruptManager); Mmu.AddAddressSpace(_serialPort); Mmu.AddAddressSpace(_timer); Mmu.AddAddressSpace(_dma); Mmu.AddAddressSpace(_sound); Mmu.AddAddressSpace(new Ram(0xc000, 0x1000)); if (_gbc) { Mmu.AddAddressSpace(SpeedMode); Mmu.AddAddressSpace(_hdma); Mmu.AddAddressSpace(new GbcRam()); Mmu.AddAddressSpace(new UndocumentedGbcRegisters()); } else { Mmu.AddAddressSpace(new Ram(0xd000, 0x1000)); } Mmu.AddAddressSpace(new Ram(0xff80, 0x7f)); Mmu.AddAddressSpace(new ShadowAddressSpace(Mmu, 0xe000, 0xc000, 0x1e00)); Cpu = new Cpu(Mmu, interruptManager, _gpu, display, SpeedMode); interruptManager.DisableInterrupts(false); if (!options.UseBootstrap) { InitiliseRegisters(); } }
public void Save() { var interruptsDir = @"Settings/" + Me.Name + "/Kefka/Interrupts.json"; var data = JsonConvert.SerializeObject(GuiInterruptsList, Formatting.Indented); File.WriteAllText(interruptsDir, data); InterruptManager.ResetInterrupts(); }
public PSE_SDController(Machine machine) : base(machine) { IRQ = new GPIO(); WakeupIRQ = new GPIO(); irqManager = new InterruptManager <Interrupts>(this); RegistersCollection = new DoubleWordRegisterCollection(this); InitializeRegisters(); }
/// <summary> /// Initializes a new instance of the <see cref="InterruptHandler"/> class. /// </summary> /// <param name="interruptManager">The interrupt manager.</param> /// <param name="irq">The irq.</param> /// <param name="hardwareDevice">The hardware device.</param> public InterruptHandler(InterruptManager interruptManager, byte irq, IHardwareDevice hardwareDevice) { if (hardwareDevice == null) HAL.Abort("hardwareDevice == null"); this.interruptManager = interruptManager; this.irq = irq; this.hardwareDevice = hardwareDevice; }
public NRF52840_Radio(Machine machine) : base(machine) { IRQ = new GPIO(); interruptManager = new InterruptManager <Events>(this, IRQ, "RadioIrq"); shorts = new Shorts(); events = new IFlagRegisterField[(int)Events.PHYEnd + 1]; rxBuffer = new ConcurrentQueue <byte[]>(); DefineRegisters(); Reset(); }
private bool ReadAndClearInterrupt <T>(InterruptManager <T> irqManager, T irq) where T : struct, IConvertible { var result = irqManager.IsSet(irq); if (result) { irqManager.SetInterrupt(irq, false); } return(result); }
public EFR32_Timer(Machine machine, long frequency, TimerWidth width) : base(machine) { IRQ = new GPIO(); this.width = width; interruptManager = new InterruptManager <Interrupt>(this); innerTimer = new LimitTimer(machine.ClockSource, frequency, this, "timer", limit: (1UL << (int)width) - 1, direction: Direction.Ascending, eventEnabled: true, autoUpdate: true); innerTimer.LimitReached += LimitReached; DefineRegisters(); }
/// <summary> /// Initializes a new instance of the <see cref="InterruptHandler"/> class. /// </summary> /// <param name="interruptManager">The interrupt manager.</param> /// <param name="irq">The irq.</param> /// <param name="hardwareDevice">The hardware device.</param> public InterruptHandler(InterruptManager interruptManager, byte irq, IHardwareDevice hardwareDevice) { if (hardwareDevice == null) { HAL.Abort("hardwareDevice == null"); } this.interruptManager = interruptManager; this.irq = irq; this.hardwareDevice = hardwareDevice; }
public Video(InterruptManager iM, IRenderable newScreen) { screen = newScreen; interruptManager = iM; lyCounter = new LYCounter(); lyCounter.LineChanged += new LYCounter.OnLineChangedEventHandler(OnLYLineChange); lyCounter.OnMode3 += new LYCounter.OnMode3EventHandler(Mode3Handler); ResetLCD(); InitializeVideoMemory(); InitializePalettes(); InitializeLCD(); InMode3 = false; }
public static void Stop() { if (!Core.OverlayManager.IsActive) { return; } Core.OverlayManager.RemoveUIComponent(KefkaOverlayComponent); InterruptManager.ResetInterrupts(); TankBusterManager.ResetTankBusters(); FormManager.SaveFormInstances(); KefkaEnemyOverlayIsVisible = false; }
public void LoadFile(byte[] loadFile) { interruptManager = new InterruptManager(); timer = new GBTimer(interruptManager); serial = new Serial(); audio = new GBAudio(); wram = new WRAM(); hram = new HRAM(); video = new Video(interruptManager, screen); cart = CartLoader.LoadCart(loadFile); input = new GBInput(interruptManager, inputHandler); mmu = new MMU(interruptManager, cart, input, audio, timer, serial, video, wram, hram); cpu = new CPU(interruptManager, mmu.Read, mmu.Write, mmu.UpdateTime); }
public PSE_USB(Machine machine, ControllerMode mode = ControllerMode.Host) : base(machine) { this.mode = mode; addressToDeviceCache = new TwoWayDictionary <byte, IUSBDevice>(); fifoFromDeviceToHost = new Queue <byte> [NumberOfEndpoints]; fifoFromHostToDevice = new Queue <byte> [NumberOfEndpoints]; receiveDeviceAddress = new IValueRegisterField[NumberOfEndpoints]; transmitDeviceAddress = new IValueRegisterField[NumberOfEndpoints]; requestInTransaction = new IFlagRegisterField[NumberOfEndpoints]; transmitTargetEndpointNumber = new IValueRegisterField[NumberOfEndpoints]; receiveTargetEndpointNumber = new IValueRegisterField[NumberOfEndpoints]; for (var i = 0; i < NumberOfEndpoints; i++) { fifoFromDeviceToHost[i] = new Queue <byte>(); fifoFromHostToDevice[i] = new Queue <byte>(); } MainIRQ = new GPIO(); DmaIRQ = new GPIO(); byteRegisters = new ByteRegisterCollection(this); wordRegisters = new WordRegisterCollection(this); doubleWordRegisters = new DoubleWordRegisterCollection(this); var gate = new GPIOGate(MainIRQ); usbInterruptsManager = new InterruptManager <UsbInterrupt>(this, gate.GetGPIO(), "main"); txInterruptsManager = new InterruptManager <TxInterrupt>(this, gate.GetGPIO(), "main"); rxInterruptsManager = new InterruptManager <RxInterrupt>(this, gate.GetGPIO(), "main"); DefineCommonRegisters(); DefineIndexedRegisters(); DefineFifoRegisters(); DefineControlAndStatusRegisters(); DefineNonIndexedEndpointControlAndStatusRegisters(); DefineMultipointControlAndStatusRegisters(); ResetInterrupts(); }
public void OnInitialize(int version) { Logger.KefkaLog($"Initializing Version: GitHub {System.Windows.Forms.Application.ProductVersion}"); TreeRoot.OnStart += OnBotStart; TreeRoot.OnStop += OnBotStop; if (version == 2) { IsChineseVersion = true; } HookBehaviors(); InterruptManager.ResetInterrupts(); IgnoreTargetManager.ResetIgnoreTargets(); TankBusterManager.ResetTankBusters(); OpenerManager.ResetOpeners(); CombatHelper.ResetLastUsed(); }
public EFR32_USART(Machine machine, uint clockFrequency = 19000000) : base(machine) { TransmitIRQ = new GPIO(); ReceiveIRQ = new GPIO(); interruptsManager = new InterruptManager <Interrupt>(this); var registersMap = new Dictionary <long, DoubleWordRegister> { { (long)Registers.Control, new DoubleWordRegister(this) .WithEnumField(0, 1, out operationModeField, name: "SYNC") .WithEnumField(5, 2, out oversamplingField, name: "OVS") }, { (long)Registers.FrameFormat, new DoubleWordRegister(this, 0x1005) .WithEnumField(8, 2, out parityBitModeField, name: "PARITY") .WithEnumField(12, 2, out stopBitsModeField, name: "STOPBITS") }, { (long)Registers.Command, new DoubleWordRegister(this) .WithFlag(11, FieldMode.Set, writeCallback: (_, newValue) => { if (newValue) { ClearBuffer(); } }, name: "CLEARRX") }, { (long)Registers.Status, new DoubleWordRegister(this, 0x2040) .WithFlag(5, out transferCompleteFlag, FieldMode.Read, name: "TXC") .WithFlag(7, out receiveDataValidFlag, FieldMode.Read, name: "RXDATAV") }, { (long)Registers.ClockControl, new DoubleWordRegister(this) .WithValueField(3, 20, out fractionalClockDividerField, name: "DIV") }, { (long)Registers.RxBufferData, new DoubleWordRegister(this) .WithValueField(0, 8, FieldMode.Read, name: "RXDATA", valueProviderCallback: (_) => ReadBuffer()) }, { (long)Registers.TxBufferData, new DoubleWordRegister(this) .WithValueField(0, 8, FieldMode.Write, writeCallback: (_, v) => HandleTxBufferData((byte)v)) }, }; registersMap.Add((long)Registers.InterruptFlag, interruptsManager.GetInterruptFlagRegister <DoubleWordRegister>()); registersMap.Add((long)Registers.InterruptEnable, interruptsManager.GetInterruptEnableRegister <DoubleWordRegister>()); registersMap.Add((long)Registers.InterruptFlagSet, interruptsManager.GetInterruptSetRegister <DoubleWordRegister>()); registersMap.Add((long)Registers.InterruptFlagClear, interruptsManager.GetInterruptClearRegister <DoubleWordRegister>()); registers = new DoubleWordRegisterCollection(this, registersMap); uartClockFrequency = clockFrequency; }
protected BasicCombatClassBia10(AmeisenBotInterfaces bot) { Bot = bot; SpellAbortFunctions = new List <Func <bool> >(); ResurrectionTargets = new Dictionary <string, DateTime>(); CooldownManager = new CooldownManager(Bot.Character.SpellBook.Spells); InterruptManager = new InterruptManager(); MyAuraManager = new AuraManager(Bot); TargetAuraManager = new AuraManager(Bot); GroupAuraManager = new GroupAuraManager(Bot); EventCheckFacing = new TimegatedEvent(TimeSpan.FromMilliseconds(500)); Configureables = new Dictionary <string, dynamic> { { "HealthItemThreshold", 30.0 }, { "ManaItemThreshold", 30.0 } }; }
public void OnInitialize(int version) { //Logger.KefkaLog($"Initializing Version: {File.ReadAllText(VersionPath)}"); Logger.KefkaLog($"Initializing Version: GitHub 1.0.0"); TreeRoot.OnStart += OnBotStart; TreeRoot.OnStop += OnBotStop; if (version == 2) { IsChineseVersion = true; } HookBehaviors(); var _class = RoutineManager.CurrentClass; InterruptManager.ResetInterrupts(); IgnoreTargetManager.ResetIgnoreTargets(); TankBusterManager.ResetTankBusters(); OpenerManager.ResetOpeners(); CombatHelper.ResetLastUsed(); }
/// <summary> /// Initializes a new instance of the <see cref="ResourceManager"/> class. /// </summary> public ResourceManager() { ioPortResources = new IOPortResources(); memoryResources = new MemoryResources(); interruptManager = new InterruptManager(); }
/// <summary> /// Initializes the Device Driver System. /// </summary> public static void Initialize() { // Create Device Manager deviceManager = new DeviceManager(); // Create Interrupt Manager interruptManager = new InterruptManager(); // Create the Device Driver Manager deviceDriverRegistry = new DeviceDriverRegistry(PlatformArchitecture.X86); // Create the PCI Controller Manager pciControllerManager = new PCIControllerManager(deviceManager); // Setup hardware abstraction interface var hardware = new Mosa.CoolWorld.x86.HAL.Hardware(); // Set device driver system to the hardware HAL Mosa.HardwareSystem.HAL.SetHardwareAbstraction(hardware); // Set the interrupt handler Mosa.HardwareSystem.HAL.SetInterruptHandler(InterruptManager.ProcessInterrupt); partitionManager = new PartitionManager(deviceManager); }
public SerialPort(InterruptManager interruptManager, SerialEndpoint serialEndpoint, SpeedMode speedMode) { _interruptManager = interruptManager; _serialEndpoint = serialEndpoint; _speedMode = speedMode; }
/// <summary> /// Initializes a new instance of the <see cref="InterruptHandler"/> class. /// </summary> /// <param name="interruptManager">The interrupt manager.</param> /// <param name="irq">The irq.</param> /// <param name="hardwareDevice">The hardware device.</param> public InterruptHandler(InterruptManager interruptManager, byte irq, IHardwareDevice hardwareDevice) { this.interruptManager = interruptManager; this.irq = irq; this.hardwareDevice = hardwareDevice; }
private static async Task <bool> FeralCombatRotation() { if (await Snapshots.CheckAndApplyBloodtalons()) { return(true); } if (await Abilities.Cast <MoonfireHeightIssueAbility>(MyCurrentTarget)) { return(true); } if (await Abilities.Cast <DashAbility>(Me)) { return(true); } if (await Abilities.Cast <StampedingRoarAbility>(Me)) { return(true); } if (await Abilities.Cast <ProwlAbility>(Me)) { return(true); } if (await Abilities.Cast <CatFormAbility>(Me)) { return(true); } if (await Abilities.Cast <Abilities.Feral.SurvivalInstinctsAbility>(Me)) { return(true); } if (await Abilities.Cast <CenarionWardAbility>(Me)) { return(true); } if (await Abilities.Cast <HeartOfTheWildAbility>(Me)) { return(true); } if (await Abilities.Cast <SavageRoarAbility>(Me)) { return(true); } if (await Abilities.Cast <Abilities.Feral.WildChargeAbility>(MyCurrentTarget)) { return(true); } if (await Abilities.Cast <ProwlOpenerAbility>(MyCurrentTarget)) { return(true); } if (await Abilities.Cast <DisplacerBeastAbility>(MyCurrentTarget)) { return(true); } if (await Abilities.Cast <Abilities.Feral.FaerieFireAbility>(MyCurrentTarget)) { return(true); } if (await InterruptManager.CheckMyTarget()) { return(true); } if (await ItemManager.UseTrinket1()) { return(true); } if (await ItemManager.UseTrinket2()) { return(true); } if (await Abilities.Cast <ForceOfNatureAbility>(MyCurrentTarget)) { return(true); } if (await Abilities.Cast <WarStompAbility>(MyCurrentTarget)) { return(true); } if (await Abilities.Cast <IncapacitatingRoarAbility>(MyCurrentTarget)) { return(true); } if (await Abilities.Cast <MassEntanglementAbility>(MyCurrentTarget)) { return(true); } if (await Abilities.Cast <Abilities.Feral.IncarnationAbility>(Me)) { return(true); } if (await Abilities.Cast <BerserkingAbility>(Me)) { return(true); } if (await Abilities.Cast <TigersFuryAbility>(Me)) { return(true); } if (await Abilities.Cast <Abilities.Feral.BerserkAbility>(Me)) { return(true); } if (await Abilities.Cast <Abilities.Feral.ThrashAbility>(MyCurrentTarget)) { return(true); } if (await Abilities.Cast <RipAbility>(MyCurrentTarget)) { return(true); } if (await Abilities.Cast <FerociousBiteAbility>(MyCurrentTarget)) { return(true); } if (await Abilities.Cast <RakeAbility>(MyCurrentTarget)) { return(true); } if (await Abilities.Cast <SwipeAbility>(MyCurrentTarget)) { return(true); } if (await Abilities.Cast <MoonfireAbility>(MyCurrentTarget)) { return(true); } if (await Abilities.Cast <WrathAbility>(MyCurrentTarget)) { return(true); } if (await Abilities.Cast <ShredAbility>(MyCurrentTarget)) { return(true); } return(await Abilities.Cast <ShredAtFiveComboPointsAbility>(MyCurrentTarget)); }
private static async Task <bool> GuardianCombatRotation() { if (await Units.TauntTarget(MyCurrentTarget)) { return(true); } if (await Abilities.Cast <FaerieFireAbility>(MyCurrentTarget)) { return(true); } if (await Abilities.Cast <DashAbility>(Me)) { return(true); } if (await Abilities.Cast <StampedingRoarAbility>(Me)) { return(true); } if (await Abilities.Cast <BearFormAbility>(Me)) { return(true); } if (await Abilities.Cast <WildChargeAbility>(MyCurrentTarget)) { return(true); } if (await Abilities.Cast <CenarionWardAbility>(Me)) { return(true); } if (await Abilities.Cast <FrenziedRegenerationAbility>(Me)) { return(true); } if (await Abilities.Cast <BarkskinAbility>(Me)) { return(true); } if (await Abilities.Cast <SurvivalInstinctsAbility>(Me)) { return(true); } if (await Abilities.Cast <BristlingFurAbility>(Me)) { return(true); } if (await Abilities.Cast <SavageDefenseAbility>(Me)) { return(true); } if (await InterruptManager.CheckMyTarget()) { return(true); } if (await ItemManager.UseTrinket1()) { return(true); } if (await ItemManager.UseTrinket2()) { return(true); } if (await Abilities.Cast <IncapacitatingRoarAbility>(MyCurrentTarget)) { return(true); } if (await Abilities.Cast <MassEntanglementAbility>(MyCurrentTarget)) { return(true); } if (await Abilities.Cast <IncarnationAbility>(Me)) { return(true); } if (await Abilities.Cast <BerserkAbility>(Me)) { return(true); } if (await Abilities.Cast <PulverizeAbility>(MyCurrentTarget)) { return(true); } if (await Abilities.Cast <MangleAbility>(MyCurrentTarget)) { return(true); } if (await Abilities.Cast <ThrashAbility>(MyCurrentTarget)) { return(true); } if (await Abilities.Cast <MaulAbility>(MyCurrentTarget)) { return(true); } return(await Abilities.Cast <LacerateAbility>(MyCurrentTarget)); }
public EFR32xg13FlashController(Machine machine, MappedMemory flash) { this.flash = flash; if (flash.Size < PageNumber * PageSize) { throw new ConstructionException($"Provided flash size is too small, expected 0x{PageNumber * PageSize:X} bytes, got 0x{flash.Size:X} bytes"); } interruptsManager = new InterruptManager <Interrupt>(this); var registersMap = new Dictionary <long, DoubleWordRegister> { { (long)Registers.Control, new DoubleWordRegister(this, 0x1) .WithTaggedFlag("ADDRFAULTEN", 0) .WithTaggedFlag("CLKDISFAULTEN", 1) .WithTaggedFlag("PWRUPONDEMAND", 2) .WithTaggedFlag("IFCREADCLEAR", 3) .WithTaggedFlag("TIMEOUTFAULTEN", 4) .WithReservedBits(5, 3) .WithIgnoredBits(8, 1) // this is written by emlib as an errata .WithReservedBits(9, 23) }, { (long)Registers.ReadControl, new DoubleWordRegister(this, 0x1000100) .WithReservedBits(0, 3) .WithTaggedFlag("IFCDIS", 3) .WithTaggedFlag("AIDIS", 4) .WithTaggedFlag("ICCDIS", 5) .WithReservedBits(6, 2) .WithTaggedFlag("PREFETCH", 8) .WithTaggedFlag("USEHPROT", 9) .WithReservedBits(10, 14) .WithTag("MODE", 24, 2) .WithReservedBits(26, 2) .WithTaggedFlag("SCBTP", 28) .WithReservedBits(29, 3) }, { (long)Registers.WriteControl, new DoubleWordRegister(this) .WithFlag(0, out isWriteEnabled, name: "WREN") .WithTaggedFlag("IRQERASEABORT", 1) .WithReservedBits(2, 30) }, { (long)Registers.WriteCommand, new DoubleWordRegister(this) .WithFlag(0, FieldMode.Toggle, changeCallback: (_, __) => UpdateWriteAddress(), name: "LADDRIM") .WithFlag(1, FieldMode.Toggle, changeCallback: (_, __) => ErasePage(), name: "ERASEPAGE") .WithTaggedFlag("WRITEEND", 2) .WithFlag(3, FieldMode.Toggle, changeCallback: (_, __) => WriteWordToFlash(), name: "WRITEONCE") .WithTaggedFlag("WRITETRIG", 4) .WithTaggedFlag("ERASEABORT", 5) .WithReservedBits(6, 2) .WithTaggedFlag("ERASEMAIN0", 8) .WithReservedBits(9, 3) .WithTaggedFlag("CLEARWDATA", 12) .WithReservedBits(13, 19) }, { (long)Registers.AddressBuffer, new DoubleWordRegister(this) .WithValueField(0, 32, out writeAddress, name: "ADDRB") }, { (long)Registers.WriteData, new DoubleWordRegister(this) .WithValueField(0, 32, out writeData, writeCallback: (_, __) => writeDataReady.Value = false, name: "WDATA") }, { (long)Registers.Status, new DoubleWordRegister(this, 0x8) .WithFlag(0, FieldMode.Read, valueProviderCallback: _ => false, name: "BUSY") .WithTaggedFlag("LOCKED", 1) .WithFlag(2, out invalidAddress, FieldMode.Read, name: "INVADDR") // we assume a single-word buffer .WithFlag(3, out writeDataReady, FieldMode.Read, name: "WDATAREADY") .WithTaggedFlag("WORDTIMEOUT", 4) .WithTaggedFlag("ERASEABORT", 5) .WithTaggedFlag("PCRUNNING", 6) .WithReservedBits(7, 17) .WithTag("WDATAVALID", 24, 4) .WithTag("CLEARWDATA", 28, 4) }, { (long)Registers.InterruptFlag, interruptsManager.GetMaskedInterruptFlagRegister <DoubleWordRegister>() }, { (long)Registers.InterruptFlagSet, interruptsManager.GetInterruptSetRegister <DoubleWordRegister>() }, { (long)Registers.InterruptFlagClear, interruptsManager.GetInterruptClearRegister <DoubleWordRegister>() }, { (long)Registers.InterruptEnable, interruptsManager.GetInterruptEnableRegister <DoubleWordRegister>() }, { (long)Registers.ConfigurationLock, new DoubleWordRegister(this) .WithValueField(0, 16, writeCallback: (_, value) => { isLocked = value != UnlockPattern; }, valueProviderCallback: _ => isLocked ? 1u : 0u, name: "LOCKKEY") .WithReservedBits(16, 16) }, { (long)Registers.Command, new DoubleWordRegister(this) .WithTaggedFlag("PWRUP", 0) .WithReservedBits(1, 31) }, }; registers = new DoubleWordRegisterCollection(this, registersMap); //calling Reset to fill the memory with 0xFFs Reset(); }
public K6xF_Ethernet(Machine machine) : base(machine) { rxIRQ = new GPIO(); txIRQ = new GPIO(); ptpIRQ = new GPIO(); miscIRQ = new GPIO(); innerLock = new object(); interruptManager = new InterruptManager <Interrupts>(this); var registerMap = new Dictionary <long, DoubleWordRegister> { { (long)Registers.InterruptEvent, interruptManager.GetRegister <DoubleWordRegister>( valueProviderCallback: (interrupt, oldValue) => { return(interruptManager.IsSet(interrupt)); }, writeCallback: (interrupt, oldValue, newValue) => { if (newValue) { interruptManager.ClearInterrupt(interrupt); } }) }, { (long)Registers.InterruptMask, interruptManager.GetRegister <DoubleWordRegister>( valueProviderCallback: (interrupt, oldValue) => { return(interruptManager.IsEnabled(interrupt)); }, writeCallback: (interrupt, oldValue, newValue) => { if (newValue) { interruptManager.EnableInterrupt(interrupt); } else { interruptManager.DisableInterrupt(interrupt); interruptManager.ClearInterrupt(interrupt); } }) }, { (long)Registers.ReceiveDescriptorActive, new DoubleWordRegister(this) .WithReservedBits(25, 7) .WithFlag(24, out receiverEnabled, name: "RDAR") .WithReservedBits(0, 24) }, { (long)Registers.TransmitDescriptorActive, new DoubleWordRegister(this) .WithReservedBits(25, 7) .WithFlag(24, FieldMode.Read | FieldMode.WriteOneToClear, name: "TDAR", writeCallback: (_, value) => { if (value) { isTransmissionStarted = true; this.Log(LogLevel.Debug, "Sending Frames"); SendFrames(); } }) .WithReservedBits(0, 24) }, { (long)Registers.EthernetControl, new DoubleWordRegister(this) .WithReservedBits(17, 15) .WithReservedBits(12, 5) .WithReservedBits(11, 1) .WithReservedBits(10, 1) .WithReservedBits(9, 1) .WithTaggedFlag("DBSWP", 8) .WithTaggedFlag("STOPEN", 7) .WithTaggedFlag("DBGEN", 6) .WithReservedBits(5, 1) .WithFlag(4, out extendedMode, name: "EN1588") .WithTaggedFlag("SLEEP", 3) .WithTaggedFlag("MAGICEN", 2) .WithTaggedFlag("ETHEREN", 1) .WithFlag(0, FieldMode.Write, writeCallback: (_, b) => { if (b) { Reset(); } }, name: "RESET") }, { (long)Registers.ReceiveControl, new DoubleWordRegister(this) .WithTaggedFlag("GRS", 31) .WithTaggedFlag("NLC", 30) .WithValueField(16, 14, name: "MAX_FL") .WithTaggedFlag("CFEN", 15) .WithTaggedFlag("CRCFWD", 14) .WithTaggedFlag("PAUFWD", 13) .WithTaggedFlag("PADEN", 12) .WithReservedBits(10, 2) .WithTaggedFlag("RMII_10T", 9) .WithTaggedFlag("RMII_MODE", 8) .WithReservedBits(7, 1) .WithReservedBits(6, 1) .WithTaggedFlag("FCE", 5) .WithTaggedFlag("BC_REJ", 4) .WithTaggedFlag("PROM", 3) .WithTaggedFlag("MII_MODE", 2) .WithTaggedFlag("DRT", 1) .WithTaggedFlag("LOOP", 0) }, { (long)Registers.TransmitControl, new DoubleWordRegister(this) .WithReservedBits(11, 21) .WithReservedBits(10, 1) .WithFlag(9, out forwardCRCFromApplication, name: "CRCFWD") .WithTaggedFlag("ADDINS", 8) .WithValueField(5, 3, name: "ADDSEL") .WithTaggedFlag("RFC_PAUSE", 4) .WithTaggedFlag("TFC_PAUSE", 3) .WithTaggedFlag("FDEN", 2) .WithReservedBits(1, 1) .WithTaggedFlag("GTS", 0) }, { (long)Registers.PhysicalAddressLower, new DoubleWordRegister(this) .WithValueField(0, 32, out lowerMAC, writeCallback: (_, value) => { UpdateMac(); }, name: "PADDR1") }, { (long)Registers.PhysicalAddressUpper, new DoubleWordRegister(this) .WithValueField(16, 16, out upperMAC, writeCallback: (_, value) => { UpdateMac(); }, name: "PADDR2") .WithValueField(0, 16, name: "TYPE") }, { (long)Registers.TransmitFIFOWatermark, new DoubleWordRegister(this) .WithReservedBits(9, 22) .WithTaggedFlag("STRFWD", 8) .WithReservedBits(6, 2) .WithValueField(0, 6, name: "TFWR") }, { (long)Registers.ReceiveDescriptorRingStart, new DoubleWordRegister(this) .WithValueField(2, 30, name: "R_DES_START", writeCallback: (oldValue, value) => { if (receiverEnabled.Value) { this.Log(LogLevel.Warning, "Changing value of receive buffer queue base address while reception is enabled is illegal"); return; } rxDescriptorsQueue = new DmaBufferDescriptorsQueue <DmaRxBufferDescriptor>(machine.SystemBus, value << 2, (sb, addr) => new DmaRxBufferDescriptor(sb, addr, extendedMode.Value)); }) .WithReservedBits(1, 1) .WithReservedBits(0, 1) }, { (long)Registers.TransmitBufferDescriptorRingStart, new DoubleWordRegister(this) .WithValueField(2, 30, name: "X_DES_START", writeCallback: (oldValue, value) => { if (isTransmissionStarted) { this.Log(LogLevel.Warning, "Changing value of transmit buffer descriptor ring start address while transmission is started is illegal"); return; } txDescriptorsQueue = new DmaBufferDescriptorsQueue <DmaTxBufferDescriptor>(machine.SystemBus, value << 2, (sb, addr) => new DmaTxBufferDescriptor(sb, addr, extendedMode.Value)); }) .WithReservedBits(1, 1) .WithReservedBits(0, 1) } }; registers = new DoubleWordRegisterCollection(this, registerMap); }