Add hulk.time and msleep()
This commit is contained in:
parent
6251fee3ff
commit
9f8a4ea100
@ -6,6 +6,7 @@ module hulk.pit;
|
||||
import hulk.cpu;
|
||||
import hulk.klog;
|
||||
import hulk.console;
|
||||
import hulk.time;
|
||||
|
||||
struct Pit
|
||||
{
|
||||
@ -29,8 +30,6 @@ struct Pit
|
||||
private enum ubyte MC_RATE_GENERATOR = 0x04u;
|
||||
private enum ubyte MC_BINARY = 0x00u;
|
||||
|
||||
private static __gshared ulong milliseconds;
|
||||
|
||||
public static void initialize()
|
||||
{
|
||||
Klog.writefln("\a3Initializing PIT");
|
||||
@ -41,6 +40,6 @@ struct Pit
|
||||
|
||||
public static void isr()
|
||||
{
|
||||
milliseconds++;
|
||||
Time.ms_isr();
|
||||
}
|
||||
}
|
||||
|
42
src/hulk/time.d
Normal file
42
src/hulk/time.d
Normal 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)
|
||||
{
|
||||
}
|
||||
}
|
||||
}
|
Loading…
x
Reference in New Issue
Block a user