public override void Initialize() { Device.Name = "IDE_0x" + Device.Resources.GetIOPortRegion(0).BaseIOPort.ToString("X"); Device.ComponentID = Device.Resources.GetIOPortRegion(0).BaseIOPort; DataPort = Device.Resources.GetIOPortReadWrite(0, 0); ErrorPort = Device.Resources.GetIOPortReadWrite(0, 1); FeaturePort = Device.Resources.GetIOPortReadWrite(0, 1); SectorCountPort = Device.Resources.GetIOPortReadWrite(0, 2); LBALowPort = Device.Resources.GetIOPortReadWrite(0, 3); LBAMidPort = Device.Resources.GetIOPortReadWrite(0, 4); LBAHighPort = Device.Resources.GetIOPortReadWrite(0, 5); DeviceHeadPort = Device.Resources.GetIOPortReadWrite(0, 6); CommandPort = Device.Resources.GetIOPortWrite(0, 7); StatusPort = Device.Resources.GetIOPortReadWrite(0, 7); ControlPort = Device.Resources.GetIOPortWrite(1, 0); AltStatusPort = Device.Resources.GetIOPortReadWrite(1, 6); MaximumDriveCount = 2; for (var drive = 0; drive < DrivesPerConroller; drive++) { driveInfo[drive].Present = false; driveInfo[drive].MaxLBA = 0; } }
public override void Initialize() { Device.Name = "GenericVGA_0x" + Device.Resources.GetIOPortRegion(0).BaseIOPort.ToString("X"); byte portBar = (byte)(Device.Resources.IOPointRegionCount - 1); miscellaneousOutputRead = Device.Resources.GetIOPortReadWrite(portBar, 0x1C); crtControllerIndex = Device.Resources.GetIOPortReadWrite(portBar, 0x04); crtControllerData = Device.Resources.GetIOPortReadWrite(portBar, 0x05); crtControllerIndexColor = Device.Resources.GetIOPortReadWrite(portBar, 0x24); crtControllerDataColor = Device.Resources.GetIOPortReadWrite(portBar, 0x25); dacPaletteMask = Device.Resources.GetIOPortReadWrite(portBar, 0x16); dacIndexRead = Device.Resources.GetIOPortReadWrite(portBar, 0x17); dacIndexWrite = Device.Resources.GetIOPortReadWrite(portBar, 0x18); dacData = Device.Resources.GetIOPortReadWrite(portBar, 0x19); inputStatus1 = Device.Resources.GetIOPortReadWrite(portBar, 0x12); miscellaneousOutputWrite = Device.Resources.GetIOPortWrite(portBar, 0x12); sequencerAddress = Device.Resources.GetIOPortReadWrite(portBar, 0x14); sequencerData = Device.Resources.GetIOPortReadWrite(portBar, 0x15); graphicsControllerAddress = Device.Resources.GetIOPortReadWrite(portBar, 0x1E); graphicsControllerData = Device.Resources.GetIOPortReadWrite(portBar, 0x1F); inputStatus1ReadB = Device.Resources.GetIOPortReadWrite(portBar, 0x2A); attributeAddress = Device.Resources.GetIOPortReadWrite(portBar, 0x10); attributeData = Device.Resources.GetIOPortReadWrite(portBar, 0x11); memory = Device.Resources.GetMemory((byte)(Device.Resources.AddressRegionCount - 1)); }
public override void Initialize() { Device.Name = "StandardKeyboard"; dataPort = Device.Resources.GetIOPortReadWrite(0, 0); // 0x60 statusPort = Device.Resources.GetIOPortRead(1, 0); // 0x64 commandPort = Device.Resources.GetIOPortWrite(1, 0); // 0x64 fifoBuffer = new byte[fifoSize]; fifoStart = 0; fifoEnd = 0; }
public override void Initialize() { Device.Name = "VGAText"; miscellaneousOutput = Device.Resources.GetIOPortReadWrite(0, 0x1C); crtControllerIndex = Device.Resources.GetIOPortReadWrite(0, 0x04); crtControllerData = Device.Resources.GetIOPortReadWrite(0, 0x05); crtControllerIndexColor = Device.Resources.GetIOPortReadWrite(0, 0x24); crtControllerDataColor = Device.Resources.GetIOPortReadWrite(0, 0x25); miscellaneousOutputWrite = Device.Resources.GetIOPortWrite(0, 0x12); sequencerAddress = Device.Resources.GetIOPortReadWrite(0, 0x14); sequencerData = Device.Resources.GetIOPortReadWrite(0, 0x15); graphicsControllerAddress = Device.Resources.GetIOPortReadWrite(0, 0x1E); graphicsControllerData = Device.Resources.GetIOPortReadWrite(0, 0x1F); inputStatus1ReadB = Device.Resources.GetIOPortReadWrite(0, 0x2A); attributeAddress = Device.Resources.GetIOPortReadWrite(0, 0x10); attributeData = Device.Resources.GetIOPortReadWrite(0, 0x11); memory = Device.Resources.GetMemory(0); }
public override void Initialize() { Device.Name = "ACPI"; Pointer rsdpPtr; for (uint addr = 0x000E0000; addr <= 0x000FFFFF; addr += 8) { rsdpPtr = (Pointer)addr; if (rsdpPtr.Load64() == 0x2052545020445352) // 'RSD PTR ' { Descriptor = (RSDPDescriptor *)rsdpPtr; } } if (Descriptor == null) { return; } /*if (Descriptor->Revision == 2) // ACPI v2.0+ * { * Descriptor20 = (RSDPDescriptor20*)rsdpPtr; * * XSDT = (XSDT*)HAL.GetPhysicalMemory((Pointer)Descriptor20->XsdtAddress, 0xFFFF).Address; * FADT = (FADT*)HAL.GetPhysicalMemory((Pointer)FindBySignature("FACP", true), 0xFFFF).Address; * MADT = (MADT*)HAL.GetPhysicalMemory((Pointer)FindBySignature("APIC", true), 0xFFFF).Address; * } * else * {*/ RSDT = (RSDT *)HAL.GetPhysicalMemory((Pointer)Descriptor->RsdtAddress, 0xFFFF).Address; FADT = (FADT *)HAL.GetPhysicalMemory((Pointer)FindBySignature("FACP", false), 0xFFFF).Address; MADT = (MADT *)HAL.GetPhysicalMemory((Pointer)FindBySignature("APIC", false), 0xFFFF).Address; //} if (FADT == null) { return; } if (MADT != null) { ProcessorIDs = new byte[256]; LocalApicAddress = MADT->LocalApicAddress; Pointer ptr = (Pointer)MADT; Pointer ptr2 = ptr + MADT->h.Length; for (ptr += 0x2C; ptr < ptr2;) { MADTEntry *entry = (MADTEntry *)ptr; switch (entry->Type) { case 0: // Processor Local APIC ProcessorLocalAPICEntry *plan = (ProcessorLocalAPICEntry *)ptr; if ((plan->Flags & 1) != 0) { ProcessorIDs[ProcessorCount++] = plan->ApicID; } break; case 1: // I/O APIC IOAPICEntry *ipe = (IOAPICEntry *)ptr; IOApicAddress = ipe->ApicAddress; break; case 5: // 64-bit LAPIC LongLocalAPICEntry *llpe = (LongLocalAPICEntry *)ptr; LocalApicAddress = (uint)(llpe->ApicAddress); break; } ptr += entry->Length; } } Pointer dsdt = (Pointer)FADT->Dsdt; if (dsdt.Load32() == 0x54445344) //DSDT { Pointer S5Addr = dsdt + sizeof(ACPISDTHeader); int dsdtLength = (int)dsdt.Load32() + 1 - sizeof(ACPISDTHeader); for (int k = 0; k < dsdtLength; k++) { if (S5Addr.Load32() == 0x5f35535f) //_S5_ { break; } S5Addr++; } if (dsdtLength > 0) { if (((S5Addr - 1).Load8() == 0x08 || ((S5Addr - 2).Load8() == 0x08 && (S5Addr - 1).Load8() == '\\')) && (S5Addr + 4).Load8() == 0x12) { S5Addr += 5; S5Addr += ((S5Addr.Load32() & 0xC0) >> 6) + 2; if (S5Addr.Load8() == 0x0A) { S5Addr++; } SLP_TYPa = (short)(S5Addr.Load16() << 10); S5Addr++; if (S5Addr.Load8() == 0x0A) { S5Addr++; } SLP_TYPb = (short)(S5Addr.Load16() << 10); SLP_EN = 1 << 13; SMI_CommandPort = HAL.GetWriteIOPort((ushort)FADT->SMI_CommandPort); bool has64BitPtr = false; if (Descriptor->Revision == 2) { ResetAddress = HAL.GetWriteIOPort((ushort)FADT->ResetReg.Address); ResetValue = FADT->ResetValue; if (Pointer.Size == 8) // 64-bit { has64BitPtr = true; PM1aControlBlock = HAL.GetWriteIOPort((ushort)FADT->X_PM1aControlBlock.Address); if (FADT->X_PM1bControlBlock.Address != 0) { PM1bControlBlock = HAL.GetWriteIOPort((ushort)FADT->X_PM1bControlBlock.Address); } } } if (!has64BitPtr) { PM1aControlBlock = HAL.GetWriteIOPort((ushort)FADT->PM1aControlBlock); if (FADT->PM1bControlBlock != 0) { PM1bControlBlock = HAL.GetWriteIOPort((ushort)FADT->PM1bControlBlock); } } } } } }