Add hulk.time and msleep()

This commit is contained in:
Josh Holtrop 2023-10-26 16:18:26 -04:00
parent 6251fee3ff
commit 9f8a4ea100
2 changed files with 44 additions and 3 deletions

View File

@ -6,6 +6,7 @@ module hulk.pit;
import hulk.cpu; import hulk.cpu;
import hulk.klog; import hulk.klog;
import hulk.console; import hulk.console;
import hulk.time;
struct Pit struct Pit
{ {
@ -29,8 +30,6 @@ struct Pit
private enum ubyte MC_RATE_GENERATOR = 0x04u; private enum ubyte MC_RATE_GENERATOR = 0x04u;
private enum ubyte MC_BINARY = 0x00u; private enum ubyte MC_BINARY = 0x00u;
private static __gshared ulong milliseconds;
public static void initialize() public static void initialize()
{ {
Klog.writefln("\a3Initializing PIT"); Klog.writefln("\a3Initializing PIT");
@ -41,6 +40,6 @@ struct Pit
public static void isr() public static void isr()
{ {
milliseconds++; Time.ms_isr();
} }
} }

42
src/hulk/time.d Normal file
View File

@ -0,0 +1,42 @@
/**
* Time functionality.
*/
module hulk.time;
import core.volatile;
struct Time
{
/** System uptime (ms). */
private static __gshared ulong s_uptime;
/**
* Millisecond ISR.
*/
public static void ms_isr()
{
s_uptime++;
}
/**
* Get system uptime (ms).
*/
public static @property ulong uptime()
{
return s_uptime;
}
/**
* Sleep for the given amount of time (ms).
*
* @param count
* Number of milliseconds to sleep for.
*/
public static void msleep(ulong count)
{
ulong wait_for = s_uptime + count + 1;
while (volatileLoad(&s_uptime) < wait_for)
{
}
}
}