public static void SetupDrivers() { PrimaryFS = null; Console.WriteLine("> Initializing services..."); // Create Service manager and basic services var serviceManager = new ServiceManager(); var deviceService = new DeviceService(); var diskDeviceService = new DiskDeviceService(); var partitionService = new PartitionService(); var pciControllerService = new PCIControllerService(); var pciDeviceService = new PCIDeviceService(); serviceManager.AddService(deviceService); serviceManager.AddService(diskDeviceService); serviceManager.AddService(partitionService); serviceManager.AddService(pciControllerService); serviceManager.AddService(pciDeviceService); Console.WriteLine("> Initializing hardware abstraction layer..."); // Set device driver system with the hardware HAL var hardware = new Hardware(); Mosa.DeviceSystem.Setup.Initialize(hardware, deviceService.ProcessInterrupt); Console.WriteLine("> Registering device drivers..."); deviceService.RegisterDeviceDriver(Mosa.DeviceDriver.Setup.GetDeviceDriverRegistryEntries()); Console.WriteLine("> Starting devices..."); deviceService.Initialize(new X86System(), null); Console.Write("> Probing for ISA devices..."); var isaDevices = deviceService.GetChildrenOf(deviceService.GetFirstDevice <ISABus>()); Console.WriteLine("[Completed: " + isaDevices.Count.ToString() + " found]"); foreach (var device in isaDevices) { Console.Write(" "); //Bullet(ScreenColor.Yellow); Console.Write(" "); //InBrackets(device.Name, ScreenColor.White, ScreenColor.Green); Console.Write(device.Name); Console.WriteLine(); } Console.Write("> Probing for PCI devices..."); var devices = deviceService.GetDevices <PCIDevice>(); Console.WriteLine("[Completed: " + devices.Count.ToString() + " found]"); foreach (var device in devices) { Console.Write(" "); //Bullet(ScreenColor.Yellow); Console.Write(" "); var pciDevice = device.DeviceDriver as PCIDevice; Console.Write(device.Name + ": " + pciDevice.VendorID.ToString("x") + ":" + pciDevice.DeviceID.ToString("x") + " " + pciDevice.SubSystemID.ToString("x") + ":" + pciDevice.SubSystemVendorID.ToString("x") + " (" + pciDevice.Function.ToString("x") + ":" + pciDevice.ClassCode.ToString("x") + ":" + pciDevice.SubClassCode.ToString("x") + ":" + pciDevice.ProgIF.ToString("x") + ":" + pciDevice.RevisionID.ToString("x") + ")"); var children = deviceService.GetChildrenOf(device); if (children.Count != 0) { var child = children[0]; Console.WriteLine(); Console.Write(" "); var pciDevice2 = child.DeviceDriver as PCIDevice; Console.Write(child.Name); } Console.WriteLine(); } Console.Write("> Probing for disk controllers..."); var diskcontrollers = deviceService.GetDevices <IDiskControllerDevice>(); Console.WriteLine("[Completed: " + diskcontrollers.Count.ToString() + " found]"); foreach (var device in diskcontrollers) { Console.Write(" "); //Bullet(ScreenColor.Yellow); Console.Write(" "); Console.Write(device.Name); Console.WriteLine(); } Console.Write("> Probing for disks..."); var disks = deviceService.GetDevices <IDiskDevice>(); Console.WriteLine("[Completed: " + disks.Count.ToString() + " found]"); foreach (var disk in disks) { Console.Write(" "); Console.Write(" "); Console.Write(disk.Name); Console.Write(" " + (disk.DeviceDriver as IDiskDevice).TotalBlocks.ToString() + " blocks"); Console.WriteLine(); } if (disks.Count >= 3 && disks[2].DeviceDriver != null && disks[2].DeviceDriver is IDiskDevice) { HostCommunicator.Init(disks[2].DeviceDriver as IDiskDevice); } partitionService.CreatePartitionDevices(); Console.Write("> Finding partitions..."); var partitions = deviceService.GetDevices <IPartitionDevice>(); Console.WriteLine("[Completed: " + partitions.Count.ToString() + " found]"); //foreach (var partition in partitions) //{ // Console.Write(" "); // Bullet(ScreenColor.Yellow); // Console.Write(" "); // InBrackets(partition.Name, ScreenColor.White, ScreenColor.Green); // Console.Write(" " + (partition.DeviceDriver as IPartitionDevice).BlockCount.ToString() + " blocks"); // Console.WriteLine(); //} Console.Write("> Finding file systems..."); foreach (var partition in partitions) { var fat = new FatFileSystem(partition.DeviceDriver as IPartitionDevice); if (fat.IsValid) { Console.WriteLine("Found a FAT file system!"); var fs = fat.CreateVFSMount(); PrimaryFS = fs; const string filename = "TEST.TXT"; var node = fs.Root.Lookup(filename); if (node != null) { Console.Write("Found: " + filename); using (var fileStream = (Stream)node.Open(FileAccess.Read, FileShare.Read)) { uint len = (uint)fileStream.Length; Console.WriteLine(" - Length: " + len.ToString()); Console.Write("Reading File: "); while (true) { int i = fileStream.ReadByte(); if (i < 0) { break; } Console.Write((char)i); } } Console.WriteLine(); } } } // Get StandardKeyboard var standardKeyboards = deviceService.GetDevices("StandardKeyboard"); if (standardKeyboards.Count == 0) { Console.WriteLine("No Keyboard!"); //ForeverLoop(); } var standardKeyboard = standardKeyboards[0].DeviceDriver as IKeyboardDevice; //Debug = ConsoleManager.Controller.Debug; // setup keymap var keymap = new US(); // setup keyboard (state machine) var keyboard = new Mosa.DeviceSystem.Keyboard(standardKeyboard, keymap); }
/// <summary> /// Main /// </summary> public static void Main() { Kernel.x86.Kernel.Setup(); Console = ConsoleManager.Controller.Boot; Console.Clear(); Console.Goto(0, 0); Console.ScrollRow = 23; Console.Color = ScreenColor.White; Console.BackgroundColor = ScreenColor.Green; Debug = ConsoleManager.Controller.Debug; Console.Write(" MOSA OS Version 2.2 - Compiler Version 2.2"); FillLine(); Console.Color = ScreenColor.White; Console.BackgroundColor = ScreenColor.Black; Console.WriteLine("> Initializing services..."); // Create Service manager and basic services var serviceManager = new ServiceManager(); DeviceService = new DeviceService(); var diskDeviceService = new DiskDeviceService(); var partitionService = new PartitionService(); var pciControllerService = new PCIControllerService(); var pciDeviceService = new PCIDeviceService(); var pcService = new PCService(); serviceManager.AddService(DeviceService); serviceManager.AddService(diskDeviceService); serviceManager.AddService(partitionService); serviceManager.AddService(pciControllerService); serviceManager.AddService(pciDeviceService); serviceManager.AddService(pcService); Console.WriteLine("> Initializing hardware abstraction layer..."); // Set device driver system with the hardware HAL var hardware = new HAL.Hardware(); DeviceSystem.Setup.Initialize(hardware, DeviceService.ProcessInterrupt); Console.WriteLine("> Registering device drivers..."); DeviceService.RegisterDeviceDriver(DeviceDriver.Setup.GetDeviceDriverRegistryEntries()); Console.WriteLine("> Starting devices..."); DeviceService.Initialize(new X86System(), null); var acpi = DeviceService.GetFirstDevice <IACPI>().DeviceDriver as IACPI; // Setup APIC var localApic = Mosa.DeviceSystem.HAL.GetPhysicalMemory((Pointer)acpi.LocalApicAddress, 0xFFFF).Address; var ioApic = Mosa.DeviceSystem.HAL.GetPhysicalMemory((Pointer)acpi.IOApicAddress, 0xFFFF).Address; APIC.Setup(localApic, ioApic); Console.Write("> Probing for ISA devices..."); var isaDevices = DeviceService.GetChildrenOf(DeviceService.GetFirstDevice <ISABus>()); Console.WriteLine("[Completed: " + isaDevices.Count.ToString() + " found]"); foreach (var device in isaDevices) { Console.Write(" "); Bullet(ScreenColor.Yellow); Console.Write(" "); InBrackets(device.Name, ScreenColor.White, ScreenColor.Green); Console.WriteLine(); } Console.Write("> Probing for PCI devices..."); var devices = DeviceService.GetDevices <PCIDevice>(); Console.WriteLine("[Completed: " + devices.Count.ToString() + " found]"); foreach (var device in devices) { Console.Write(" "); Bullet(ScreenColor.Yellow); Console.Write(" "); var pciDevice = device.DeviceDriver as PCIDevice; InBrackets(device.Name + ": " + pciDevice.VendorID.ToString("x") + ":" + pciDevice.DeviceID.ToString("x") + " " + pciDevice.SubSystemID.ToString("x") + ":" + pciDevice.SubSystemVendorID.ToString("x") + " (" + pciDevice.ClassCode.ToString("x") + ":" + pciDevice.SubClassCode.ToString("x") + ":" + pciDevice.ProgIF.ToString("x") + ":" + pciDevice.RevisionID.ToString("x") + ")", ScreenColor.White, ScreenColor.Green); var children = DeviceService.GetChildrenOf(device); if (children.Count != 0) { var child = children[0]; Console.WriteLine(); Console.Write(" "); var pciDevice2 = child.DeviceDriver as PCIDevice; InBrackets(child.Name, ScreenColor.White, ScreenColor.Green); } Console.WriteLine(); } Console.Write("> Probing for disk controllers..."); var diskcontrollers = DeviceService.GetDevices <IDiskControllerDevice>(); Console.WriteLine("[Completed: " + diskcontrollers.Count.ToString() + " found]"); foreach (var device in diskcontrollers) { Console.Write(" "); Bullet(ScreenColor.Yellow); Console.Write(" "); InBrackets(device.Name, ScreenColor.White, ScreenColor.Green); Console.WriteLine(); } Console.Write("> Probing for disks..."); var disks = DeviceService.GetDevices <IDiskDevice>(); Console.WriteLine("[Completed: " + disks.Count.ToString() + " found]"); foreach (var disk in disks) { Console.Write(" "); Bullet(ScreenColor.Yellow); Console.Write(" "); InBrackets(disk.Name, ScreenColor.White, ScreenColor.Green); Console.Write(" " + (disk.DeviceDriver as IDiskDevice).TotalBlocks.ToString() + " blocks"); Console.WriteLine(); } partitionService.CreatePartitionDevices(); Console.Write("> Finding partitions..."); var partitions = DeviceService.GetDevices <IPartitionDevice>(); Console.WriteLine("[Completed: " + partitions.Count.ToString() + " found]"); //foreach (var partition in partitions) //{ // Console.Write(" "); // Bullet(ScreenColor.Yellow); // Console.Write(" "); // InBrackets(partition.Name, ScreenColor.White, ScreenColor.Green); // Console.Write(" " + (partition.DeviceDriver as IPartitionDevice).BlockCount.ToString() + " blocks"); // Console.WriteLine(); //} Console.Write("> Finding file systems..."); foreach (var partition in partitions) { var fat = new FatFileSystem(partition.DeviceDriver as IPartitionDevice); if (fat.IsValid) { Console.WriteLine("Found a FAT file system!"); const string filename = "TEST.TXT"; var location = fat.FindEntry(filename); if (location.IsValid) { Console.Write("Found: " + filename); var fatFileStream = new FatFileStream(fat, location); uint len = (uint)fatFileStream.Length; Console.WriteLine(" - Length: " + len.ToString() + " bytes"); Console.Write("Reading File: "); for (; ;) { int i = fatFileStream.ReadByte(); if (i < 0) { break; } Console.Write((char)i); } Console.WriteLine(); } const string bmpname = "WALLP.BMP"; var bmploc = fat.FindEntry(bmpname); if (bmploc.IsValid) { Console.Write("Found: " + bmpname); var fatFileStream = new FatFileStream(fat, bmploc); uint len = (uint)fatFileStream.Length; Console.WriteLine(" - Length: " + len.ToString() + " bytes"); Console.WriteLine(); } } } // Get StandardKeyboard var keyboards = DeviceService.GetDevices("StandardKeyboard"); if (keyboards.Count == 0) { Console.WriteLine("No Keyboard!"); ForeverLoop(); } var stdKeyboard = keyboards[0].DeviceDriver as IKeyboardDevice; // setup keymap var keymap = new US(); // setup keyboard (state machine) var keyboard = new DeviceSystem.Keyboard(stdKeyboard, keymap); // setup app manager var manager = new AppManager(Console, keyboard, serviceManager); IDT.SetInterruptHandler(manager.ProcessInterrupt); Logger.Log("<SELFTEST:PASSED>"); manager.Start(); }
/// <summary> /// Main /// </summary> public static void Main() { Kernel.x86.Kernel.Setup(); Console = ConsoleManager.Controller.Boot; Console.Clear(); Serial.SetupPort(Serial.COM1); IDT.SetInterruptHandler(ProcessInterrupt); hal = new Hardware(); // Create Service manager and basic services var serviceManager = new ServiceManager(); DeviceService = new DeviceService(); var diskDeviceService = new DiskDeviceService(); var partitionService = new PartitionService(); var pciControllerService = new PCIControllerService(); var pciDeviceService = new PCIDeviceService(); serviceManager.AddService(DeviceService); serviceManager.AddService(diskDeviceService); serviceManager.AddService(partitionService); serviceManager.AddService(pciControllerService); serviceManager.AddService(pciDeviceService); DeviceSystem.Setup.Initialize(hal, DeviceService.ProcessInterrupt); DeviceService.RegisterDeviceDriver(DeviceDriver.Setup.GetDeviceDriverRegistryEntries()); DeviceService.Initialize(new X86System(), null); partitionService.CreatePartitionDevices(); var partitions = DeviceService.GetDevices <IPartitionDevice>(); foreach (var partition in partitions) { var fat = new FatFileSystem(partition.DeviceDriver as IPartitionDevice); hasFS = fat.IsValid; if (hasFS) { var location = fat.FindEntry("WALLP.BMP"); if (location.IsValid) { var fatFileStream = new FatFileStream(fat, location); var _wall = new byte[(uint)fatFileStream.Length]; for (int k = 0; k < _wall.Length; k++) { _wall[k] = (byte)(char)fatFileStream.ReadByte(); } wallpaper = new Bitmap(_wall); } } } var standardMice = DeviceService.GetDevices("StandardMouse"); if (standardMice.Count == 0) { hal.Pause(); hal.Abort("Catastrophic failure, mouse and/or PIT not found."); } mouse = standardMice[0].DeviceDriver as StandardMouse; mouse.SetScreenResolution(VBE.ScreenWidth, VBE.ScreenHeight); if (VBEDisplay.InitVBE(hal)) { Log("VBE setup OK!"); DoGraphics(); } else { Log("VBE setup ERROR!"); } }