コード例 #1
0
ファイル: Pager.cs プロジェクト: willvin313/SharpOS
        /// <summary>
        /// Returns the paging granularity of the pointer <paramref name="page" />.
        /// </summary>
        /// <returns>
        /// The granularity level or -1 if the pointer is not page-aligned.
        /// </returns>
        public static uint GetPointerGranularity(void *page)
        {
            ulong pagei  = (ulong)page;
            uint  levels = GetBigGranularity() + 1;

            for (uint x = 0; x < levels; ++x)
            {
                PageAllocator.Errors err = PageAllocator.Errors.Success;

                uint size = GetGranularitySize(x, &err);

                if (err != PageAllocator.Errors.Success)
                {
                    TextMode.Write("Error: ");
                    TextMode.Write((int)err);
                    Diagnostics.Assert(false, "Failed to get pager granularity!");
                }

                if ((pagei & (ulong)(size - 1)) == 0)
                {
                    return(x);
                }
            }

            return(0xFFFFFFFF);
        }
コード例 #2
0
ファイル: Thread.cs プロジェクト: willvin313/SharpOS
 internal void Dump()
 {
     TextMode.Write("Thread stack: ");
     TextMode.Write((int)stackAddress, true);
     TextMode.Write(" function: ");
     TextMode.Write((int)functionAddress, true);
     TextMode.Write(" position: ");
     TextMode.Write((int)stackPointer, true);
     TextMode.WriteLine();
 }
コード例 #3
0
 public unsafe void Dump()
 {
     // TODO: make this thread safe!
     TextMode.WriteLine("--------------");
     TextMode.Write("Count: ");
     TextMode.Write(Count);
     TextMode.WriteLine();
     for (int i = 0; i < Count; i++)
     {
         Thread thread = schedule[i] as Thread;
         thread.Dump();
     }
     TextMode.WriteLine("--------------");
 }
コード例 #4
0
 public static unsafe void OnEvent(object obj)
 {
     TextMode.WriteLine("HIT");
     try {
         spinLock.Enter();
         for (int x = 0; x < dispatchCount; ++x)
         {
             if (dispathTable[x].obj == obj)
             {
                 MemoryUtil.Call((void *)dispathTable[x].address, (void *)0);
             }
         }
     }
     finally {
         spinLock.Exit();
     }
 }
コード例 #5
0
ファイル: Debug.cs プロジェクト: willvin313/SharpOS
        static public void Setup2()
        {
            foreach (Device device in DeviceManager.GetOnlineDevicesWithName("COM_0x3F8"))
            {
                if (device is ISerialDevice)
                {
                    COM1 = new DebugHandler((ISerialDevice)device);
                    TextMode.WriteLine("Sending: Hello!");
                    COM1.WriteLine("Hello!");
                    break;
                }
            }

            foreach (Device device in DeviceManager.GetOnlineDevicesWithName("COM_0x2F8"))
            {
                if (device is ISerialDevice)
                {
                    COM2 = new DebugHandler((ISerialDevice)device);
                    break;
                }
            }
        }