public GaislerMIC(Machine machine, uint totalNumberCPUs = 1) { this.numberOfProcessors = totalNumberCPUs; if(totalNumberCPUs > maxNumberOfProcessors) { this.Log(LogLevel.Warning, "Registration with unsupported number of CPUs, defaulting to maximum {0:X]", maxNumberOfProcessors); this.numberOfProcessors = maxNumberOfProcessors; } registers = new deviceRegisters(); registers.MultiprocessorStatus |= (((numberOfProcessors-1) << 28) & 0xF0000000); // Set Broadcast Available bit in MultiprocessorStatus register if ncpu > 1 if(this.numberOfProcessors > 1) { registers.MultiprocessorStatus |= (1u << 27); } irqs = new GPIO[numberOfProcessors]; resets = new GPIO[numberOfProcessors]; runs = new GPIO[numberOfProcessors]; set_nmi_interrupt = new bool[numberOfProcessors]; for(var i = 0; i < numberOfProcessors; i++) { irqs[i] = new GPIO(); resets[i] = new GPIO(); runs[i] = new GPIO(); interrupts[i] = new Dictionary<int, int>(); set_nmi_interrupt[i] = false; } Connections = new IGPIORedirector((int)numberOfProcessors, HandleIRQConnect); Reset(); }
public GaislerMIC(Machine machine, uint totalNumberCPUs = 1) { this.numberOfProcessors = totalNumberCPUs; if (totalNumberCPUs > maxNumberOfProcessors) { this.Log(LogLevel.Warning, "Registration with unsupported number of CPUs, defaulting to maximum {0:X]", maxNumberOfProcessors); this.numberOfProcessors = maxNumberOfProcessors; } registers = new deviceRegisters(); registers.MultiprocessorStatus |= (((numberOfProcessors - 1) << 28) & 0xF0000000); // Set Broadcast Available bit in MultiprocessorStatus register if ncpu > 1 if (this.numberOfProcessors > 1) { registers.MultiprocessorStatus |= (1u << 27); } irqs = new GPIO[numberOfProcessors]; resets = new GPIO[numberOfProcessors]; runs = new GPIO[numberOfProcessors]; set_nmi_interrupt = new bool[numberOfProcessors]; for (var i = 0; i < numberOfProcessors; i++) { irqs[i] = new GPIO(); resets[i] = new GPIO(); runs[i] = new GPIO(); interrupts[i] = new Dictionary <int, int>(); set_nmi_interrupt[i] = false; } Connections = new IGPIORedirector((int)numberOfProcessors, HandleIRQConnect); Reset(); }
public MSCM(Machine machine) { sysbus = machine.SystemBus; routingTable = new bool[NumberOfInterrupts * 2]; destinations = new Destination[NumberOfInterrupts * 2]; interProcessorInterrupts = new GPIO[8]; for (var i = 0; i < interProcessorInterrupts.Length; i++) { interProcessorInterrupts[i] = new GPIO(); } Connections = new IGPIORedirector(232, HandleIRQConnect, HandleIRQDisconnect); }