public static void RemoveCursor() { AXP.Outb(0x3D4, 14); AXP.Outb(0x3D5, 0x07); AXP.Outb(0x3D4, 15); AXP.Outb(0x3D5, 0xD0); }
public static void Beep(uint frequency) { uint divisor = 1193180 / frequency; AXP.Outb(0x43, 0xB6); AXP.Outb(0x42, (byte)(divisor & 0xFF)); AXP.Outb(0x42, (byte)((divisor >> 8) & 0xFF)); }
private void Level_1() { // Remove Cursor AXP.Outb(0x3D4, 14); AXP.Outb(0x3D5, 0x07); AXP.Outb(0x3D4, 15); AXP.Outb(0x3D5, 0xD0); // }
public static void Reboot() { byte good = 0x02; while ((good & 0x02) != 0) { good = AXP.Inb(0x64); } AXP.Outb(0x64, 0xFE); //Pulse reset pin Cosmos.Core.Global.CPU.Halt(); }
public static void Mode0(uint frequency) { IDT.Remap(); IRQ.ClearMask(0); IRQ.ClearMask(15); uint divisor = 1193180 / frequency; AXP.Outb(0x43, 0x30); AXP.Outb(0x40, (byte)(divisor & 0xFF)); AXP.Outb(0x40, (byte)((divisor >> 8) & 0xFF)); }
public static void Remap() { AXP.Outb(0x20, 0x11); AXP.Outb(0xA0, 0x11); AXP.Outb(0x21, 0x20); AXP.Outb(0xA1, 0x28); AXP.Outb(0x21, 0x04); AXP.Outb(0xA1, 0x02); AXP.Outb(0x21, 0x01); AXP.Outb(0xA1, 0x01); AXP.Outb(0x21, 0x0); AXP.Outb(0xA1, 0x0); }
public static void ClearMask(byte IRQline) { ushort port; if (IRQline < 8) { port = 0x20 + 1; } else { port = 0xA0 + 1; IRQline -= 8; } var value = (byte)(AXP.Inb(port) & ~(1 << IRQline)); AXP.Outb(port, value); }
// IRQ0 public static void HandleInterrupt_20(ref IRQContext aContext) { Global.PIC.EoiMaster(); AXP.Outb(0x20, 0x20); PIT.called = true; }