mirror of
https://github.com/danbulant/Cosmos
synced 2026-05-22 22:09:12 +00:00
234 lines
No EOL
6.8 KiB
C#
234 lines
No EOL
6.8 KiB
C#
using System;
|
|
using System.Collections.Generic;
|
|
using System.Text;
|
|
|
|
namespace Cosmos.Hardware {
|
|
public static class DebugUtil {
|
|
public static void Initialize() {
|
|
}
|
|
|
|
public static void StartLogging() {
|
|
// placeholder, later on, we will need some kind of locking
|
|
}
|
|
|
|
public static void EndLogging() {
|
|
// placeholder, later on, we will need some kind of locking
|
|
}
|
|
|
|
public static void SendMessage(string aModule, string aData) {
|
|
StartLogging();
|
|
WriteSerialString("<Message Type=\"Info\" Module=\"");
|
|
WriteSerialString(aModule);
|
|
WriteSerialString("\" String=\"");
|
|
WriteSerialString(aData);
|
|
WriteSerialString("\"/>\r\n");
|
|
EndLogging();
|
|
}
|
|
|
|
public static void SendError(string aModule, string aData) {
|
|
StartLogging();
|
|
WriteSerialString("<Error Type=\"Info\" Module=\"");
|
|
WriteSerialString(aModule);
|
|
WriteSerialString("\" String=\"");
|
|
WriteSerialString(aData);
|
|
WriteSerialString("\"/>\r\n");
|
|
EndLogging();
|
|
}
|
|
|
|
public static unsafe void SendATA_BlockReceived(byte aController, byte aDrive, uint aBlock, ushort* aValue) {
|
|
StartLogging();
|
|
byte* xValueBytes = (byte*)aValue;
|
|
for (int i = 0; i < 4; i++) {
|
|
WriteSerialString("<ATA_BlockPartReceived");
|
|
WriteNumber((uint)i, 8, false);
|
|
WriteSerialString(" Controller=\"");
|
|
WriteNumber(aController, 8);
|
|
WriteSerialString("\" Drive=\"");
|
|
WriteNumber(aDrive, 8);
|
|
WriteSerialString("\" Block=\"");
|
|
WriteNumber(aBlock, 24);
|
|
WriteSerialString("\" Contents=\"0x");
|
|
for (int j = 0; j < 128; j++) {
|
|
WriteNumber(xValueBytes[(i * 128) + j], 8, false);
|
|
}
|
|
WriteSerialString("\"/>\r\n");
|
|
}
|
|
EndLogging();
|
|
}
|
|
|
|
public static void ATA_ReadBlock(byte aStep, ushort aControllerAddres, byte aDrive, uint aBlock) {
|
|
StartLogging();
|
|
WriteSerialString("<ATA_ReadBlock");
|
|
WriteNumber(aStep, 8);
|
|
WriteSerialString(" ControllerAddress=\"");
|
|
DebugUtil.WriteNumber(aControllerAddres, 16);
|
|
WriteSerialString("\" Drive=\"");
|
|
DebugUtil.WriteNumber(aDrive, 8);
|
|
WriteSerialString("\" Block=\"");
|
|
DebugUtil.WriteNumber(aBlock, 32);
|
|
WriteSerialString("\"/>\r\n");
|
|
EndLogging();
|
|
}
|
|
|
|
public static void SendNumber(string aModule, string aDescription, uint aNumber, byte aBits) {
|
|
StartLogging();
|
|
WriteSerialString("<Number Module=\"");
|
|
WriteSerialString(aModule);
|
|
WriteSerialString("\" Description=\"");
|
|
WriteSerialString(aDescription);
|
|
WriteSerialString("\" Number=\"");
|
|
DebugUtil.WriteNumber(aNumber, aBits);
|
|
WriteSerialString("\"/>\r\n");
|
|
EndLogging();
|
|
}
|
|
|
|
public static void SendATA_BlockPartReceived(byte aController, byte aDrive, uint aBlock, byte aPart, ushort aValue) {
|
|
StartLogging();
|
|
WriteSerialString("<ATA_BlockPartReceived Controller=\"");
|
|
WriteNumber(aController, 8);
|
|
WriteSerialString("\" Drive=\"");
|
|
WriteNumber(aDrive, 8);
|
|
WriteSerialString("\" Block=\"");
|
|
WriteNumber(aBlock, 24);
|
|
WriteSerialString("\" Part=\"");
|
|
WriteNumber(aPart, 8);
|
|
WriteSerialString("\" Value=\"");
|
|
WriteNumber(aValue, 16);
|
|
WriteSerialString("\"/>");
|
|
EndLogging();
|
|
}
|
|
|
|
public static void WriteNumber(uint aNumber, byte aBits) {
|
|
WriteNumber(aNumber, aBits, true);
|
|
}
|
|
public static void WriteNumber(uint aNumber, byte aBits, bool aWritePrefix) {
|
|
uint xValue = aNumber;
|
|
byte xCurrentBits = aBits;
|
|
if (aWritePrefix) {
|
|
WriteSerialString("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:
|
|
WriteSerialString(xDigitString);
|
|
break;
|
|
}
|
|
}
|
|
}
|
|
|
|
public static unsafe void LogInterruptOccurred(Interrupts.InterruptContext* aContext) {
|
|
uint aInterrupt = aContext->Interrupt;
|
|
StartLogging();
|
|
WriteSerialString("<InterruptOccurred Interrupt=\"");
|
|
WriteNumber(aContext->Interrupt, 32);
|
|
WriteSerialString("\" SS=\"");
|
|
WriteNumber(aContext->SS, 32);
|
|
WriteSerialString("\" GS=\"");
|
|
WriteNumber(aContext->GS, 32);
|
|
WriteSerialString("\" FS=\"");
|
|
WriteNumber(aContext->FS, 32);
|
|
WriteSerialString("\" ES=\"");
|
|
WriteNumber(aContext->ES, 32);
|
|
WriteSerialString("\" DS=\"");
|
|
WriteNumber(aContext->DS, 32);
|
|
WriteSerialString("\" CS=\"");
|
|
WriteNumber(aContext->CS, 32);
|
|
WriteSerialString("\" ESI=\"");
|
|
WriteNumber(aContext->ESI, 32);
|
|
WriteSerialString("\" EBP=\"");
|
|
WriteNumber(aContext->EBP, 32);
|
|
WriteSerialString("\" ESP=\"");
|
|
WriteNumber(aContext->ESP, 32);
|
|
WriteSerialString("\" EBX=\"");
|
|
WriteNumber(aContext->EBX, 32);
|
|
WriteSerialString("\" EDX=\"");
|
|
WriteNumber(aContext->EDX, 32);
|
|
WriteSerialString("\" ECX=\"");
|
|
WriteNumber(aContext->ECX, 32);
|
|
WriteSerialString("\" EAX=\"");
|
|
WriteNumber(aContext->EAX, 32);
|
|
WriteSerialString("\" Param=\"");
|
|
WriteNumber(aContext->Param, 32);
|
|
WriteSerialString("\" EIP=\"");
|
|
WriteNumber(aContext->EIP, 32);
|
|
WriteSerialString("\" EFlags=\"");
|
|
WriteNumber(aContext->EFlags, 32);
|
|
WriteSerialString("\" UserESP=\"");
|
|
WriteNumber(aContext->UserESP, 32);
|
|
WriteSerialString("\"/>\r\n");
|
|
EndLogging();
|
|
}
|
|
|
|
public static void WriteBinary(string aModule, string aMessage, uint aBlock, byte[] aValue) {
|
|
StartLogging();
|
|
WriteSerialString("<Binary Module=\"");
|
|
WriteSerialString(aModule);
|
|
WriteSerialString("\" Message=\"");
|
|
WriteSerialString(aMessage);
|
|
WriteSerialString("\" Block=\"0x");
|
|
WriteNumber(aBlock, 24);
|
|
WriteSerialString("\" Value=\"");
|
|
for (int i = 0; i < aValue.Length; i++) {
|
|
WriteNumber(aValue[i], 8, false);
|
|
}
|
|
WriteSerialString("\"/>\r\n");
|
|
}
|
|
|
|
public static void WriteSerialString(string aData) {
|
|
//for (int i = 0; i < aData.Length; i++) {
|
|
// Serial.WriteSerial(0, (byte)aData[i]);
|
|
//}
|
|
}
|
|
}
|
|
} |