using System; using System.Collections.Generic; using System.Text; namespace Cosmos.Hardware2 { public class RTC: Hardware { private const ushort AddressPort = 0x70; private const ushort DataPort = 0x71; private static void WaitForReady() { do { IOWriteByte(AddressPort, 10); } while ((IOReadByte(DataPort) & 0x80) != 0); } public static byte GetSeconds() { WaitForReady(); IOWriteByte(AddressPort, 0); return FromBCD(IOReadByte(DataPort)); } public static byte GetMinutes() { WaitForReady(); IOWriteByte(AddressPort, 2); return FromBCD(IOReadByte(DataPort)); } public static byte GetHours() { WaitForReady(); IOWriteByte(AddressPort, 4); return FromBCD(IOReadByte(DataPort)); } //ToDo convert this to an extension method for FromBCD in Cosmos.Kernel /// /// Converts a BCD coded value to hex coded /// /// BCD coded /// Hex coded private static byte FromBCD(byte value) { return (byte)(((value >> 4) & 0x0F) * 10 + (value & 0x0F)); } } }