using System; using System.Collections.Generic; using System.Linq; using System.Text; using Cosmos.Kernel.Boot.Glue; namespace Cosmos.Kernel.Boot { public static class DebugUtil { private static bool mInitialized; private static void CheckInitialized() { if (!mInitialized) { mInitialized = true; Console.Write("Initializing COM1..."); IO.InitIO(); IO.InitSerial(0); SendMessage("Debug", "Comport initialized!"); } } [GlueMethod(MethodType = GlueMethodTypeEnum.Debug_Write)] [GlueMethod(MethodType = GlueMethodTypeEnum.Debug_WriteLine)] public static void SendMessage(string aModule, string aData) { CheckInitialized(); IO.WriteSerialString(0, "\r\n"); } public static void SendHandleIrq(byte aIRQ) { CheckInitialized(); IO.WriteSerialString(0, "\r\n"); } public static void SendKeyboardScanCodeReceived(uint aChar) { CheckInitialized(); IO.WriteSerialString(0, ""); } public static void SendKeyboardCharReceived(KeyboardKeys aChar, bool aReleased) { CheckInitialized(); IO.WriteSerialString(0, ""); } public static void SendError(string aModule, string aData) { CheckInitialized(); IO.WriteSerialString(0, "\r\n"); } public static void SendWarning(string aModule, string aData) { CheckInitialized(); IO.WriteSerialString(0, "\r\n"); } public static void SendIDT_RegisterInterrupt(ushort aInterrupt) { CheckInitialized(); IO.WriteSerialString(0, "\r\n"); } public static void SendIDT_InterruptOccurred(ushort aInterrupt, uint aParam) { CheckInitialized(); IO.WriteSerialString(0, "\r\n"); } public static void SendMM_Init(uint aStart, uint aLength) { CheckInitialized(); IO.WriteSerialString(0, "\r\n"); } public static void SendMM_Alloc(uint aStartAddr, uint aLength) { CheckInitialized(); IO.WriteSerialString(0, "\r\n"); } private static void WriteNumber(uint aValue) { WriteNumber(aValue, 32); } private static void WriteNumber(uint aValue, byte aBitCount) { uint xValue = aValue; byte xCurrentBits = aBitCount; IO.WriteSerialString(0, "0x"); while (xCurrentBits >= 4) { xCurrentBits -= 4; byte xCurrentDigit = (byte)((xValue >> xCurrentBits) & 0xF); string xDigitString = null; switch (xCurrentDigit) { case 0: xDigitString = "0"; goto default; case 1: xDigitString = "1"; goto default; case 2: xDigitString = "2"; goto default; case 3: xDigitString = "3"; goto default; case 4: xDigitString = "4"; goto default; case 5: xDigitString = "5"; goto default; case 6: xDigitString = "6"; goto default; case 7: xDigitString = "7"; goto default; case 8: xDigitString = "8"; goto default; case 9: xDigitString = "9"; goto default; case 10: xDigitString = "A"; goto default; case 11: xDigitString = "B"; goto default; case 12: xDigitString = "C"; goto default; case 13: xDigitString = "D"; goto default; case 14: xDigitString = "E"; goto default; case 15: xDigitString = "F"; goto default; default: IO.WriteSerialString(0, xDigitString); break; } } } public static void SendMultiBoot_MMap(BootInformationStruct.MMapEntry aEntry) { IO.WriteSerialString(0, "\r\n"); } public static void SendMM_MemChunkFound(uint aStart, uint aLength) { IO.WriteSerialString(0, "\r\n"); } } }