using IL2CPU.API.Attribs; namespace Cosmos.Core { // Non hardware class, only used by core and hardware drivers for ports etc. /// /// CPU class. Non hardware class, only used by core and hardware drivers for ports etc. /// public class CPU { // Amount of RAM in MB's. // needs to be static, as Heap needs it before we can instantiate objects /// /// Get amount of RAM in MB's. Plugged. /// [PlugMethod(PlugRequired = true)] public static uint GetAmountOfRAM() => throw null; // needs to be static, as Heap needs it before we can instantiate objects /// /// Get end of the kernel. Plugged. /// [PlugMethod(PlugRequired = true)] public static uint GetEndOfKernel() => throw null; /// /// Update IDT. Plugged. /// [PlugMethod(PlugRequired = true)] public void UpdateIDT(bool aEnableInterruptsImmediately) => throw null; /// /// Init float. Plugged. /// [PlugMethod(PlugRequired = true)] public void InitFloat() => throw null; /// /// Init SSE. Plugged. /// [PlugMethod(PlugRequired = true)] public void InitSSE() => throw null; /// /// Zero fill. Plugged. /// [PlugMethod(PlugRequired = true)] public static void ZeroFill(uint aStartAddress, uint aLength) => throw null; /// /// Hult the CPU. Plugged. /// [PlugMethod(PlugRequired = true)] public void Halt() => throw null; /// /// Reboot the CPU. /// public void Reboot() { // Disable all interrupts DisableInterrupts(); var myPort = new IOPort(0x64); while ((myPort.Byte & 0x02) != 0) { } myPort.Byte = 0xFE; Halt(); // If it didn't work, Halt the CPU } /// /// Enable interrupts. Plugged. /// [PlugMethod(PlugRequired = true)] private static void DoEnableInterrupts() => throw null; /// /// Disable interrupts. Plugged. /// [PlugMethod(PlugRequired = true)] private static void DoDisableInterrupts() => throw null; /// /// Check if interrupts enabled. /// [AsmMarker(AsmMarker.Type.Processor_IntsEnabled)] public static bool mInterruptsEnabled; /// /// Enable interrupts. /// public static void EnableInterrupts() { mInterruptsEnabled = true; DoEnableInterrupts(); } /// /// Returns if the interrupts were actually enabled. /// /// bool value. public static bool DisableInterrupts() { DoDisableInterrupts(); var xResult = mInterruptsEnabled; mInterruptsEnabled = false; return xResult; } } }