예제 #1
0
        public static bool InitVBE(BaseHardwareAbstraction hal)
        {
            if (!VBE.IsVBEAvailable)
            {
                return(false);
            }

            uint memorySize = (uint)(VBE.ScreenWidth * VBE.ScreenHeight * (VBE.BitsPerPixel / 8));

            _lfb = hal.GetPhysicalMemory((uint)VBE.MemoryPhysicalLocation.ToInt32(), memorySize);

            switch (VBE.BitsPerPixel)
            {
            case 8: Framebuffer = new FrameBuffer8bpp(_lfb, VBE.ScreenWidth, VBE.ScreenHeight, 0, VBE.Pitch); break;

            case 16: Framebuffer = new FrameBuffer16bpp(_lfb, VBE.ScreenWidth, VBE.ScreenHeight, 0, VBE.Pitch); break;

            case 24: Framebuffer = new FrameBuffer24bpp(_lfb, VBE.ScreenWidth, VBE.ScreenHeight, 0, VBE.Pitch); break;

            case 32: Framebuffer = new FrameBuffer32bpp(_lfb, VBE.ScreenWidth, VBE.ScreenHeight, 0, VBE.Pitch); break;

            default:
                return(false);
            }

            return(true);
        }
예제 #2
0
        public static bool InitVBE(BaseHardwareAbstraction hal)
        {
            if (!Multiboot.IsMultibootEnabled)
            {
                return(false);
            }

            if (!Multiboot.VBEPresent)
            {
                return(false);
            }

            VBEMode vbeInfo = Multiboot.VBEModeInfoStructure;

            uint memorySize = (uint)(vbeInfo.ScreenWidth * vbeInfo.ScreenHeight * (vbeInfo.BitsPerPixel / 8));

            _lfb = hal.RequestPhysicalMemory(vbeInfo.MemoryPhysicalLocation, memorySize);

            switch (vbeInfo.BitsPerPixel)
            {
            case 8: Framebuffer = new FrameBuffer8bpp(_lfb, vbeInfo.ScreenWidth, vbeInfo.ScreenHeight, 0, vbeInfo.Pitch); break;

            case 16: Framebuffer = new FrameBuffer16bpp(_lfb, vbeInfo.ScreenWidth, vbeInfo.ScreenHeight, 0, vbeInfo.Pitch); break;

            case 24: Framebuffer = new FrameBuffer24bpp(_lfb, vbeInfo.ScreenWidth, vbeInfo.ScreenHeight, 0, vbeInfo.Pitch); break;

            case 32: Framebuffer = new FrameBuffer32bpp(_lfb, vbeInfo.ScreenWidth, vbeInfo.ScreenHeight, 0, vbeInfo.Pitch); break;

            default:
                return(false);
            }

            return(true);
        }
예제 #3
0
        public static void Initialize(BaseHardwareAbstraction hardware, HAL.HandleInterrupt handleInterrupt)
        {
            // Set device driver system to the hardware HAL
            HAL.SetHardwareAbstraction(hardware);

            // Set the interrupt handler
            HAL.SetInterruptHandler(handleInterrupt);
        }
예제 #4
0
        public static DeviceManager Initialize(PlatformArchitecture platform, BaseHardwareAbstraction hardware)
        {
            // Create Device Manager
            var deviceManager = new DeviceManager(platform);

            deviceManager.RegisterDaemon(new DiskDeviceMountDeamon());

            // Set device driver system to the hardware HAL
            HAL.SetHardwareAbstraction(hardware);

            // Set the interrupt handler
            HAL.SetInterruptHandler(deviceManager.ProcessInterrupt);

            return(deviceManager);
        }
예제 #5
0
 /// <summary>
 /// Sets the hardware abstraction.
 /// </summary>
 /// <param name="hardwareAbstraction">The hardware abstraction.</param>
 public static void SetHardwareAbstraction(BaseHardwareAbstraction hardwareAbstraction)
 {
     HAL.hardwareAbstraction = hardwareAbstraction;
 }