public static void Main() { BasicConsole.WriteLine("Kernel task! "); BasicConsole.WriteLine(" > Executing normally..."); DeferredSyscallsInfo_Unqueued = new Queue(256, false); DeferredSyscallsInfo_Queued = new Queue(DeferredSyscallsInfo_Unqueued.Capacity, false); for (int i = 0; i < DeferredSyscallsInfo_Unqueued.Capacity; i++) { DeferredSyscallsInfo_Unqueued.Push(new DeferredSyscallInfo()); } try { BasicConsole.WriteLine(" > Initialising system calls..."); ProcessManager.CurrentProcess.SyscallHandler = SyscallHandler; ProcessManager.CurrentProcess.SyscallsToHandle.Set((int)SystemCallNumbers.RegisterSyscallHandler); ProcessManager.CurrentProcess.SyscallsToHandle.Set((int)SystemCallNumbers.DeregisterSyscallHandler); ProcessManager.CurrentProcess.SyscallsToHandle.Set((int)SystemCallNumbers.StartThread); ProcessManager.CurrentProcess.SyscallsToHandle.Set((int)SystemCallNumbers.SleepThread); ProcessManager.CurrentProcess.SyscallsToHandle.Set((int)SystemCallNumbers.WakeThread); ProcessManager.CurrentProcess.SyscallsToHandle.Set((int)SystemCallNumbers.RegisterPipeOutpoint); ProcessManager.CurrentProcess.SyscallsToHandle.Set((int)SystemCallNumbers.GetNumPipeOutpoints); ProcessManager.CurrentProcess.SyscallsToHandle.Set((int)SystemCallNumbers.GetPipeOutpoints); ProcessManager.CurrentProcess.SyscallsToHandle.Set((int)SystemCallNumbers.WaitOnPipeCreate); ProcessManager.CurrentProcess.SyscallsToHandle.Set((int)SystemCallNumbers.ReadPipe); ProcessManager.CurrentProcess.SyscallsToHandle.Set((int)SystemCallNumbers.WritePipe); ProcessManager.CurrentProcess.SyscallsToHandle.Set((int)SystemCallNumbers.SendMessage); ProcessManager.CurrentProcess.SyscallsToHandle.Set((int)SystemCallNumbers.ReceiveMessage); //ProcessManager.CurrentProcess.OutputMemTrace = true; BasicConsole.WriteLine(" > Starting Idle process..."); Process IdleProcess = ProcessManager.CreateProcess(Tasks.IdleTask.Main, "Idle", false, true); ProcessManager.RegisterProcess(IdleProcess, Scheduler.Priority.ZeroTimed); BasicConsole.WriteLine(" > Starting deferred syscalls thread..."); DeferredSyscallsThread = ProcessManager.CurrentProcess.CreateThread(DeferredSyscallsThread_Main, "Deferred Sys Calls"); #if DEBUG BasicConsole.WriteLine(" > Starting Debugger thread..."); Debug.Debugger.MainThread = ProcessManager.CurrentProcess.CreateThread(Debug.Debugger.Main, "Debugger"); #endif BasicConsole.WriteLine(" > Starting GC Cleanup thread..."); ProcessManager.CurrentProcess.CreateThread(Tasks.GCCleanupTask.Main, "GC Cleanup"); BasicConsole.WriteLine(" > Starting Window Manager..."); Process WindowManagerProcess = ProcessManager.CreateProcess(WindowManagerTask.Main, "Window Manager", false, true); WindowManagerTask_ProcessId = WindowManagerProcess.Id; //WindowManagerProcess.OutputMemTrace = true; ProcessManager.RegisterProcess(WindowManagerProcess, Scheduler.Priority.Normal); BasicConsole.WriteLine(" > Waiting for Window Manager to be ready..."); while (!WindowManagerTask.Ready) { BasicConsole.WriteLine(" > [Wait pause]"); SystemCalls.SleepThread(1000); } BasicConsole.WriteLine(" > Window Manager reported ready."); BasicConsole.WriteLine(" > Starting Device Manager..."); Process DeviceManagerProcess = ProcessManager.CreateProcess(DeviceManagerTask.Main, "Device Manager", false, true); //DeviceManagerProcess.OutputMemTrace = true; ProcessManager.RegisterProcess(DeviceManagerProcess, Scheduler.Priority.Normal); //TODO: Main task for commands etc BasicConsole.WriteLine("Started."); BasicConsole.PrimaryOutputEnabled = false; //BasicConsole.SecondaryOutputEnabled = false; try { BasicConsole.WriteLine("KT > Creating virtual keyboard..."); keyboard = new Hardware.Keyboards.VirtualKeyboard(); BasicConsole.WriteLine("KT > Creating virtual console..."); console = new Consoles.VirtualConsole(); BasicConsole.WriteLine("KT > Connecting virtual console..."); console.Connect(); BasicConsole.WriteLine("KT > Creating main shell..."); Shells.MainShell shell = new Shells.MainShell(console, keyboard); BasicConsole.WriteLine("KT > Running..."); uint loops = 0; while (!Terminating) { try { //FOS_System.String msg = "KT > Hello, world! (" + (FOS_System.String)loops++ + ")"; //console.WriteLine(msg); //BasicConsole.WriteLine(msg); //SystemCalls.SleepThread(1000); shell.Execute(); } catch { BasicConsole.WriteLine("KT > Error executing MainShell!"); BasicConsole.WriteLine(ExceptionMethods.CurrentException.Message); } } } catch { BasicConsole.WriteLine("KT > Error initialising!"); BasicConsole.WriteLine(ExceptionMethods.CurrentException.Message); } //BasicConsole.WriteLine(" > Starting Play Notes task..."); //ProcessManager.CurrentProcess.CreateThread(Hardware.Tasks.PlayNotesTask.Main); //Console.InitDefault(); //Shell.InitDefault(); //BasicConsole.PrimaryOutputEnabled = false; //Shell.Default.Execute(); //BasicConsole.PrimaryOutputEnabled = true; //if (!Shell.Default.Terminating) //{ // Console.Default.WarningColour(); // Console.Default.WriteLine("Abnormal shell shutdown!"); // Console.Default.DefaultColour(); //} //else //{ // Console.Default.Clear(); //} } catch { BasicConsole.PrimaryOutputEnabled = true; BasicConsole.SetTextColour(BasicConsole.warning_colour); BasicConsole.WriteLine(ExceptionMethods.CurrentException.Message); BasicConsole.SetTextColour(BasicConsole.default_colour); } BasicConsole.WriteLine(); BasicConsole.WriteLine("---------------------"); BasicConsole.WriteLine(); BasicConsole.WriteLine("End of kernel task."); ExceptionMethods.HaltReason = "Managed main thread ended."; //TODO: Exit syscall }
public static void Main() { BasicConsole.WriteLine("Kernel task! "); BasicConsole.WriteLine(" > Executing normally..."); try { PriorityQueue queue = new PriorityQueue(20); TestComparable toRemove = new TestComparable(2); queue.Insert(new TestComparable(20)); queue.Insert(new TestComparable(19)); queue.Insert(new TestComparable(18)); queue.Insert(new TestComparable(17)); queue.Insert(new TestComparable(16)); queue.Insert(new TestComparable(15)); queue.Insert(new TestComparable(5)); queue.Insert(new TestComparable(4)); queue.Insert(new TestComparable(3)); queue.Insert(toRemove); queue.Insert(new TestComparable(2)); queue.Insert(new TestComparable(1)); BasicConsole.WriteLine(queue.ToString()); queue.Delete(toRemove); BasicConsole.WriteLine(queue.ToString()); TestComparable minNode = (TestComparable)queue.ExtractMin(); while (minNode != null) { BasicConsole.WriteLine(minNode.Key); minNode = (TestComparable)queue.ExtractMin(); } } catch { BasicConsole.WriteLine("Error!"); BasicConsole.WriteLine(ExceptionMethods.CurrentException.Message); } //BasicConsole.DelayOutput(100); DeferredSyscallsInfo_Unqueued = new Queue(256, false); DeferredSyscallsInfo_Queued = new Queue(DeferredSyscallsInfo_Unqueued.Capacity, false); for (int i = 0; i < DeferredSyscallsInfo_Unqueued.Capacity; i++) { DeferredSyscallsInfo_Unqueued.Push(new DeferredSyscallInfo()); } try { BasicConsole.WriteLine(" > Initialising system calls..."); ProcessManager.CurrentProcess.SyscallHandler = SyscallHandler; ProcessManager.CurrentProcess.SyscallsToHandle.Set((int)SystemCallNumbers.RegisterSyscallHandler); ProcessManager.CurrentProcess.SyscallsToHandle.Set((int)SystemCallNumbers.DeregisterSyscallHandler); ProcessManager.CurrentProcess.SyscallsToHandle.Set((int)SystemCallNumbers.StartThread); ProcessManager.CurrentProcess.SyscallsToHandle.Set((int)SystemCallNumbers.SleepThread); ProcessManager.CurrentProcess.SyscallsToHandle.Set((int)SystemCallNumbers.WakeThread); ProcessManager.CurrentProcess.SyscallsToHandle.Set((int)SystemCallNumbers.RegisterPipeOutpoint); ProcessManager.CurrentProcess.SyscallsToHandle.Set((int)SystemCallNumbers.GetNumPipeOutpoints); ProcessManager.CurrentProcess.SyscallsToHandle.Set((int)SystemCallNumbers.GetPipeOutpoints); ProcessManager.CurrentProcess.SyscallsToHandle.Set((int)SystemCallNumbers.WaitOnPipeCreate); ProcessManager.CurrentProcess.SyscallsToHandle.Set((int)SystemCallNumbers.ReadPipe); ProcessManager.CurrentProcess.SyscallsToHandle.Set((int)SystemCallNumbers.WritePipe); ProcessManager.CurrentProcess.SyscallsToHandle.Set((int)SystemCallNumbers.SendMessage); ProcessManager.CurrentProcess.SyscallsToHandle.Set((int)SystemCallNumbers.ReceiveMessage); //ProcessManager.CurrentProcess.OutputMemTrace = true; //BasicConsole.WriteLine(" > Starting deferred syscalls thread..."); //DeferredSyscallsThread = ProcessManager.CurrentProcess.CreateThread(DeferredSyscallsThread_Main, "Deferred Sys Calls"); //BasicConsole.WriteLine(" > Starting GC Cleanup thread..."); //ProcessManager.CurrentProcess.CreateThread(Tasks.GCCleanupTask.Main, "GC Cleanup"); BasicConsole.WriteLine(" > Starting Idle thread..."); ProcessManager.CurrentProcess.CreateThread(Tasks.IdleTask.Main, "Idle"); #if DEBUG BasicConsole.WriteLine(" > Starting Debugger thread..."); Debug.Debugger.MainThread = ProcessManager.CurrentProcess.CreateThread(Debug.Debugger.Main, "Debugger"); #endif bool OK = true; while (OK) { ; } BasicConsole.WriteLine(" > Starting Window Manager..."); Process WindowManagerProcess = ProcessManager.CreateProcess(WindowManagerTask.Main, "Window Manager", false, true); WindowManagerTask_ProcessId = WindowManagerProcess.Id; //WindowManagerProcess.OutputMemTrace = true; ProcessManager.RegisterProcess(WindowManagerProcess, Scheduler.Priority.Normal); BasicConsole.WriteLine(" > Waiting for Window Manager to be ready..."); while (!WindowManagerTask.Ready) { BasicConsole.WriteLine(" > [Wait pause]"); Thread.Sleep(1000); } BasicConsole.WriteLine(" > Window Manager reported ready."); BasicConsole.WriteLine(" > Starting Device Manager..."); Process DeviceManagerProcess = ProcessManager.CreateProcess(DeviceManagerTask.Main, "Device Manager", false, true); //DeviceManagerProcess.OutputMemTrace = true; ProcessManager.RegisterProcess(DeviceManagerProcess, Scheduler.Priority.Normal); //TODO: Main task for commands etc BasicConsole.WriteLine("Started."); BasicConsole.PrimaryOutputEnabled = false; //BasicConsole.SecondaryOutputEnabled = false; try { BasicConsole.WriteLine("KT > Creating virtual keyboard..."); keyboard = new Hardware.Keyboards.VirtualKeyboard(); BasicConsole.WriteLine("KT > Creating virtual console..."); console = new Consoles.VirtualConsole(); BasicConsole.WriteLine("KT > Connecting virtual console..."); console.Connect(); BasicConsole.WriteLine("KT > Creating main shell..."); Shells.MainShell shell = new Shells.MainShell(console, keyboard); BasicConsole.WriteLine("KT > Running..."); //uint loops = 0; while (!Terminating) { try { shell.Execute(); } catch { BasicConsole.WriteLine("KT > Error executing MainShell!"); BasicConsole.WriteLine(ExceptionMethods.CurrentException.Message); } } } catch { BasicConsole.WriteLine("KT > Error initialising!"); BasicConsole.WriteLine(ExceptionMethods.CurrentException.Message); } //BasicConsole.WriteLine(" > Starting Play Notes task..."); //ProcessManager.CurrentProcess.CreateThread(Hardware.Tasks.PlayNotesTask.Main); //Console.InitDefault(); //Shell.InitDefault(); //BasicConsole.PrimaryOutputEnabled = false; //Shell.Default.Execute(); //BasicConsole.PrimaryOutputEnabled = true; //if (!Shell.Default.Terminating) //{ // Console.Default.WarningColour(); // Console.Default.WriteLine("Abnormal shell shutdown!"); // Console.Default.DefaultColour(); //} //else //{ // Console.Default.Clear(); //} } catch { BasicConsole.PrimaryOutputEnabled = true; BasicConsole.SetTextColour(BasicConsole.warning_colour); BasicConsole.WriteLine(ExceptionMethods.CurrentException.Message); BasicConsole.SetTextColour(BasicConsole.default_colour); } BasicConsole.WriteLine(); BasicConsole.WriteLine("---------------------"); BasicConsole.WriteLine(); BasicConsole.WriteLine("End of kernel task."); ExceptionMethods.HaltReason = "Managed main thread ended."; //TODO: Exit syscall }
public static void Main() { BasicConsole.WriteLine("Kernel task! "); BasicConsole.WriteLine(" > Executing normally..."); #region Dictionary Test /*try * { * UInt32Dictionary dic = new UInt32Dictionary(); * * for (uint i = 0; i < 9; i += 3) * { * BasicConsole.WriteLine("Dictionary test loop"); * BasicConsole.WriteLine("--------------------"); * * uint key1 = 0xC0DEC0DEu + (0x100u * i); * uint key2 = 0xC0DEC0DEu + (0x100u * (i+1)); * uint key3 = 0xC0DEC0DEu + (0x100u * (i+2)); * * uint value1 = 0xDEADBEE0u + (0x1u * i); * uint value2 = 0xDEADBEE0u + (0x1u * (i+1)); * uint value3 = 0xDEADBEE0u + (0x1u * (i+2)); * * dic.Add(key1, value1); * dic.Add(key2, value2); * dic.Add(key3, value3); * * for(uint j = 50 * i; j < (50 * (i+1))-20; j++) * { * dic.Add(j, j); * } * * if (!dic.Contains(key1)) * { * BasicConsole.WriteLine("Dictionary doesn't contain key 1."); * } * else if (dic[key1] != value1) * { * BasicConsole.WriteLine("Dictionary value for key 1 wrong."); * } * else * { * BasicConsole.WriteLine("Okay (1)"); * } * if (!dic.Contains(key2)) * { * BasicConsole.WriteLine("Dictionary doesn't contain key1"); * } * else if (dic[key2] != value2) * { * BasicConsole.WriteLine("Dictionary value for key1 wrong."); * } * else * { * BasicConsole.WriteLine("Okay (2)"); * } * if (!dic.Contains(key3)) * { * BasicConsole.WriteLine("Dictionary doesn't contain key1"); * } * else if (dic[key3] != value3) * { * BasicConsole.WriteLine("Dictionary value for key1 wrong."); * } * else * { * BasicConsole.WriteLine("Okay (3)"); * } * * dic.Remove(key1); * * if (dic.Contains(key1)) * { * BasicConsole.WriteLine("Dictionary contains key1!"); * } * else * { * BasicConsole.WriteLine("Okay (4)"); * } * * BasicConsole.WriteLine("Iterating"); * UInt32Dictionary.Iterator itr = dic.GetIterator(); * while (itr.HasNext()) * { * UInt32Dictionary.KeyValuePair pair = itr.Next(); * BasicConsole.WriteLine("Pair: key=" + (FOS_System.String)pair.Key + ", value=" + pair.Value); * } * * dic.Remove(key2); * * for (uint j = (50 * i)+30; j < (50 * (i + 1)); j++) * { * dic.Add(j, j); * } * * if (dic.Contains(key2)) * { * BasicConsole.WriteLine("Dictionary contains key2!"); * } * else * { * BasicConsole.WriteLine("Okay (5)"); * } * * * dic.Remove(key3); * * if (dic.Contains(key3)) * { * BasicConsole.WriteLine("Dictionary contains key3!"); * } * else * { * BasicConsole.WriteLine("Okay (6)"); * } * * itr = dic.GetIterator(); * while (itr.HasNext()) * { * UInt32Dictionary.KeyValuePair pair = itr.Next(); * BasicConsole.WriteLine("Pair: key=" + (FOS_System.String)pair.Key + ", value=" + pair.Value); * } * } * } * catch * { * BasicConsole.WriteLine("Error testing UInt32Dictionary."); * BasicConsole.WriteLine(ExceptionMethods.CurrentException.Message); * } * BasicConsole.DelayOutput(5); */ #endregion DeferredSyscallsInfo_Unqueued = new Queue(256, false); DeferredSyscallsInfo_Queued = new Queue(DeferredSyscallsInfo_Unqueued.Capacity, false); for (int i = 0; i < DeferredSyscallsInfo_Unqueued.Capacity; i++) { DeferredSyscallsInfo_Unqueued.Push(new DeferredSyscallInfo()); } try { BasicConsole.WriteLine(" > Initialising system calls..."); ProcessManager.CurrentProcess.SyscallHandler = SyscallHandler; ProcessManager.CurrentProcess.SyscallsToHandle.Set((int)SystemCallNumbers.RegisterSyscallHandler); ProcessManager.CurrentProcess.SyscallsToHandle.Set((int)SystemCallNumbers.DeregisterSyscallHandler); ProcessManager.CurrentProcess.SyscallsToHandle.Set((int)SystemCallNumbers.StartThread); ProcessManager.CurrentProcess.SyscallsToHandle.Set((int)SystemCallNumbers.SleepThread); ProcessManager.CurrentProcess.SyscallsToHandle.Set((int)SystemCallNumbers.WakeThread); ProcessManager.CurrentProcess.SyscallsToHandle.Set((int)SystemCallNumbers.RegisterPipeOutpoint); ProcessManager.CurrentProcess.SyscallsToHandle.Set((int)SystemCallNumbers.GetNumPipeOutpoints); ProcessManager.CurrentProcess.SyscallsToHandle.Set((int)SystemCallNumbers.GetPipeOutpoints); ProcessManager.CurrentProcess.SyscallsToHandle.Set((int)SystemCallNumbers.WaitOnPipeCreate); ProcessManager.CurrentProcess.SyscallsToHandle.Set((int)SystemCallNumbers.ReadPipe); ProcessManager.CurrentProcess.SyscallsToHandle.Set((int)SystemCallNumbers.WritePipe); ProcessManager.CurrentProcess.SyscallsToHandle.Set((int)SystemCallNumbers.SendMessage); ProcessManager.CurrentProcess.SyscallsToHandle.Set((int)SystemCallNumbers.ReceiveMessage); //ProcessManager.CurrentProcess.OutputMemTrace = true; BasicConsole.WriteLine(" > Starting Idle process..."); Process IdleProcess = ProcessManager.CreateProcess(Tasks.IdleTask.Main, "Idle", false, true); ProcessManager.RegisterProcess(IdleProcess, Scheduler.Priority.ZeroTimed); BasicConsole.WriteLine(" > Starting deferred syscalls thread..."); DeferredSyscallsThread = ProcessManager.CurrentProcess.CreateThread(DeferredSyscallsThread_Main, "Deferred Sys Calls"); #if DEBUG BasicConsole.WriteLine(" > Starting Debugger thread..."); Debug.Debugger.MainThread = ProcessManager.CurrentProcess.CreateThread(Debug.Debugger.Main, "Debugger"); #endif BasicConsole.WriteLine(" > Starting GC Cleanup thread..."); ProcessManager.CurrentProcess.CreateThread(Tasks.GCCleanupTask.Main, "GC Cleanup"); BasicConsole.WriteLine(" > Starting Window Manager..."); Process WindowManagerProcess = ProcessManager.CreateProcess(WindowManagerTask.Main, "Window Manager", false, true); WindowManagerTask_ProcessId = WindowManagerProcess.Id; //WindowManagerProcess.OutputMemTrace = true; ProcessManager.RegisterProcess(WindowManagerProcess, Scheduler.Priority.Normal); BasicConsole.WriteLine(" > Waiting for Window Manager to be ready..."); while (!WindowManagerTask.Ready) { BasicConsole.WriteLine(" > [Wait pause]"); SystemCalls.SleepThread(1000); } BasicConsole.WriteLine(" > Window Manager reported ready."); BasicConsole.WriteLine(" > Starting Device Manager..."); Process DeviceManagerProcess = ProcessManager.CreateProcess(DeviceManagerTask.Main, "Device Manager", false, true); //DeviceManagerProcess.OutputMemTrace = true; ProcessManager.RegisterProcess(DeviceManagerProcess, Scheduler.Priority.Normal); //TODO: Main task for commands etc BasicConsole.WriteLine("Started."); BasicConsole.PrimaryOutputEnabled = false; //BasicConsole.SecondaryOutputEnabled = false; try { BasicConsole.WriteLine("KT > Creating virtual keyboard..."); keyboard = new Hardware.Keyboards.VirtualKeyboard(); BasicConsole.WriteLine("KT > Creating virtual console..."); console = new Consoles.VirtualConsole(); BasicConsole.WriteLine("KT > Connecting virtual console..."); console.Connect(); BasicConsole.WriteLine("KT > Creating main shell..."); Shells.MainShell shell = new Shells.MainShell(console, keyboard); BasicConsole.WriteLine("KT > Running..."); uint loops = 0; while (!Terminating) { try { //FOS_System.String msg = "KT > Hello, world! (" + (FOS_System.String)loops++ + ")"; //console.WriteLine(msg); //BasicConsole.WriteLine(msg); //SystemCalls.SleepThread(1000); shell.Execute(); } catch { BasicConsole.WriteLine("KT > Error executing MainShell!"); BasicConsole.WriteLine(ExceptionMethods.CurrentException.Message); } } } catch { BasicConsole.WriteLine("KT > Error initialising!"); BasicConsole.WriteLine(ExceptionMethods.CurrentException.Message); } //BasicConsole.WriteLine(" > Starting Play Notes task..."); //ProcessManager.CurrentProcess.CreateThread(Hardware.Tasks.PlayNotesTask.Main); //Console.InitDefault(); //Shell.InitDefault(); //BasicConsole.PrimaryOutputEnabled = false; //Shell.Default.Execute(); //BasicConsole.PrimaryOutputEnabled = true; //if (!Shell.Default.Terminating) //{ // Console.Default.WarningColour(); // Console.Default.WriteLine("Abnormal shell shutdown!"); // Console.Default.DefaultColour(); //} //else //{ // Console.Default.Clear(); //} } catch { BasicConsole.PrimaryOutputEnabled = true; BasicConsole.SetTextColour(BasicConsole.warning_colour); BasicConsole.WriteLine(ExceptionMethods.CurrentException.Message); BasicConsole.SetTextColour(BasicConsole.default_colour); } BasicConsole.WriteLine(); BasicConsole.WriteLine("---------------------"); BasicConsole.WriteLine(); BasicConsole.WriteLine("End of kernel task."); ExceptionMethods.HaltReason = "Managed main thread ended."; //TODO: Exit syscall }
public static void Main() { BasicConsole.WriteLine("Kernel task! "); BasicConsole.WriteLine(" > Executing normally..."); #region Dictionary Test /*try { UInt32Dictionary dic = new UInt32Dictionary(); for (uint i = 0; i < 9; i += 3) { BasicConsole.WriteLine("Dictionary test loop"); BasicConsole.WriteLine("--------------------"); uint key1 = 0xC0DEC0DEu + (0x100u * i); uint key2 = 0xC0DEC0DEu + (0x100u * (i+1)); uint key3 = 0xC0DEC0DEu + (0x100u * (i+2)); uint value1 = 0xDEADBEE0u + (0x1u * i); uint value2 = 0xDEADBEE0u + (0x1u * (i+1)); uint value3 = 0xDEADBEE0u + (0x1u * (i+2)); dic.Add(key1, value1); dic.Add(key2, value2); dic.Add(key3, value3); for(uint j = 50 * i; j < (50 * (i+1))-20; j++) { dic.Add(j, j); } if (!dic.Contains(key1)) { BasicConsole.WriteLine("Dictionary doesn't contain key 1."); } else if (dic[key1] != value1) { BasicConsole.WriteLine("Dictionary value for key 1 wrong."); } else { BasicConsole.WriteLine("Okay (1)"); } if (!dic.Contains(key2)) { BasicConsole.WriteLine("Dictionary doesn't contain key1"); } else if (dic[key2] != value2) { BasicConsole.WriteLine("Dictionary value for key1 wrong."); } else { BasicConsole.WriteLine("Okay (2)"); } if (!dic.Contains(key3)) { BasicConsole.WriteLine("Dictionary doesn't contain key1"); } else if (dic[key3] != value3) { BasicConsole.WriteLine("Dictionary value for key1 wrong."); } else { BasicConsole.WriteLine("Okay (3)"); } dic.Remove(key1); if (dic.Contains(key1)) { BasicConsole.WriteLine("Dictionary contains key1!"); } else { BasicConsole.WriteLine("Okay (4)"); } BasicConsole.WriteLine("Iterating"); UInt32Dictionary.Iterator itr = dic.GetIterator(); while (itr.HasNext()) { UInt32Dictionary.KeyValuePair pair = itr.Next(); BasicConsole.WriteLine("Pair: key=" + (FOS_System.String)pair.Key + ", value=" + pair.Value); } dic.Remove(key2); for (uint j = (50 * i)+30; j < (50 * (i + 1)); j++) { dic.Add(j, j); } if (dic.Contains(key2)) { BasicConsole.WriteLine("Dictionary contains key2!"); } else { BasicConsole.WriteLine("Okay (5)"); } dic.Remove(key3); if (dic.Contains(key3)) { BasicConsole.WriteLine("Dictionary contains key3!"); } else { BasicConsole.WriteLine("Okay (6)"); } itr = dic.GetIterator(); while (itr.HasNext()) { UInt32Dictionary.KeyValuePair pair = itr.Next(); BasicConsole.WriteLine("Pair: key=" + (FOS_System.String)pair.Key + ", value=" + pair.Value); } } } catch { BasicConsole.WriteLine("Error testing UInt32Dictionary."); BasicConsole.WriteLine(ExceptionMethods.CurrentException.Message); } BasicConsole.DelayOutput(5); */ #endregion DeferredSyscallsInfo_Unqueued = new Queue(256, false); DeferredSyscallsInfo_Queued = new Queue(DeferredSyscallsInfo_Unqueued.Capacity, false); for (int i = 0; i < DeferredSyscallsInfo_Unqueued.Capacity; i++) { DeferredSyscallsInfo_Unqueued.Push(new DeferredSyscallInfo()); } try { BasicConsole.WriteLine(" > Initialising system calls..."); ProcessManager.CurrentProcess.SyscallHandler = SyscallHandler; ProcessManager.CurrentProcess.SyscallsToHandle.Set((int)SystemCallNumbers.RegisterSyscallHandler); ProcessManager.CurrentProcess.SyscallsToHandle.Set((int)SystemCallNumbers.DeregisterSyscallHandler); ProcessManager.CurrentProcess.SyscallsToHandle.Set((int)SystemCallNumbers.StartThread); ProcessManager.CurrentProcess.SyscallsToHandle.Set((int)SystemCallNumbers.SleepThread); ProcessManager.CurrentProcess.SyscallsToHandle.Set((int)SystemCallNumbers.WakeThread); ProcessManager.CurrentProcess.SyscallsToHandle.Set((int)SystemCallNumbers.RegisterPipeOutpoint); ProcessManager.CurrentProcess.SyscallsToHandle.Set((int)SystemCallNumbers.GetNumPipeOutpoints); ProcessManager.CurrentProcess.SyscallsToHandle.Set((int)SystemCallNumbers.GetPipeOutpoints); ProcessManager.CurrentProcess.SyscallsToHandle.Set((int)SystemCallNumbers.WaitOnPipeCreate); ProcessManager.CurrentProcess.SyscallsToHandle.Set((int)SystemCallNumbers.ReadPipe); ProcessManager.CurrentProcess.SyscallsToHandle.Set((int)SystemCallNumbers.WritePipe); ProcessManager.CurrentProcess.SyscallsToHandle.Set((int)SystemCallNumbers.SendMessage); ProcessManager.CurrentProcess.SyscallsToHandle.Set((int)SystemCallNumbers.ReceiveMessage); //ProcessManager.CurrentProcess.OutputMemTrace = true; BasicConsole.WriteLine(" > Starting Idle process..."); Process IdleProcess = ProcessManager.CreateProcess(Tasks.IdleTask.Main, "Idle", false, true); ProcessManager.RegisterProcess(IdleProcess, Scheduler.Priority.ZeroTimed); BasicConsole.WriteLine(" > Starting deferred syscalls thread..."); DeferredSyscallsThread = ProcessManager.CurrentProcess.CreateThread(DeferredSyscallsThread_Main, "Deferred Sys Calls"); #if DEBUG BasicConsole.WriteLine(" > Starting Debugger thread..."); Debug.Debugger.MainThread = ProcessManager.CurrentProcess.CreateThread(Debug.Debugger.Main, "Debugger"); #endif BasicConsole.WriteLine(" > Starting GC Cleanup thread..."); ProcessManager.CurrentProcess.CreateThread(Tasks.GCCleanupTask.Main, "GC Cleanup"); BasicConsole.WriteLine(" > Starting Window Manager..."); Process WindowManagerProcess = ProcessManager.CreateProcess(WindowManagerTask.Main, "Window Manager", false, true); WindowManagerTask_ProcessId = WindowManagerProcess.Id; //WindowManagerProcess.OutputMemTrace = true; ProcessManager.RegisterProcess(WindowManagerProcess, Scheduler.Priority.Normal); BasicConsole.WriteLine(" > Waiting for Window Manager to be ready..."); while (!WindowManagerTask.Ready) { BasicConsole.WriteLine(" > [Wait pause]"); SystemCalls.SleepThread(1000); } BasicConsole.WriteLine(" > Window Manager reported ready."); BasicConsole.WriteLine(" > Starting Device Manager..."); Process DeviceManagerProcess = ProcessManager.CreateProcess(DeviceManagerTask.Main, "Device Manager", false, true); //DeviceManagerProcess.OutputMemTrace = true; ProcessManager.RegisterProcess(DeviceManagerProcess, Scheduler.Priority.Normal); //TODO: Main task for commands etc BasicConsole.WriteLine("Started."); BasicConsole.PrimaryOutputEnabled = false; //BasicConsole.SecondaryOutputEnabled = false; try { BasicConsole.WriteLine("KT > Creating virtual keyboard..."); keyboard = new Hardware.Keyboards.VirtualKeyboard(); BasicConsole.WriteLine("KT > Creating virtual console..."); console = new Consoles.VirtualConsole(); BasicConsole.WriteLine("KT > Connecting virtual console..."); console.Connect(); BasicConsole.WriteLine("KT > Creating main shell..."); Shells.MainShell shell = new Shells.MainShell(console, keyboard); BasicConsole.WriteLine("KT > Running..."); uint loops = 0; while (!Terminating) { try { //FOS_System.String msg = "KT > Hello, world! (" + (FOS_System.String)loops++ + ")"; //console.WriteLine(msg); //BasicConsole.WriteLine(msg); //SystemCalls.SleepThread(1000); shell.Execute(); } catch { BasicConsole.WriteLine("KT > Error executing MainShell!"); BasicConsole.WriteLine(ExceptionMethods.CurrentException.Message); } } } catch { BasicConsole.WriteLine("KT > Error initialising!"); BasicConsole.WriteLine(ExceptionMethods.CurrentException.Message); } //BasicConsole.WriteLine(" > Starting Play Notes task..."); //ProcessManager.CurrentProcess.CreateThread(Hardware.Tasks.PlayNotesTask.Main); //Console.InitDefault(); //Shell.InitDefault(); //BasicConsole.PrimaryOutputEnabled = false; //Shell.Default.Execute(); //BasicConsole.PrimaryOutputEnabled = true; //if (!Shell.Default.Terminating) //{ // Console.Default.WarningColour(); // Console.Default.WriteLine("Abnormal shell shutdown!"); // Console.Default.DefaultColour(); //} //else //{ // Console.Default.Clear(); //} } catch { BasicConsole.PrimaryOutputEnabled = true; BasicConsole.SetTextColour(BasicConsole.warning_colour); BasicConsole.WriteLine(ExceptionMethods.CurrentException.Message); BasicConsole.SetTextColour(BasicConsole.default_colour); } BasicConsole.WriteLine(); BasicConsole.WriteLine("---------------------"); BasicConsole.WriteLine(); BasicConsole.WriteLine("End of kernel task."); ExceptionMethods.HaltReason = "Managed main thread ended."; //TODO: Exit syscall }