Пример #1
0
        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;
            }
        }
Пример #2
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));
        }
Пример #3
0
        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;
        }
Пример #4
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);
        }
Пример #5
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);
                            }
                        }
                    }
                }
            }
        }