diff --git a/misc/system.c b/misc/system.c
index aaeeae5..dee79bd 100644
--- a/misc/system.c
+++ b/misc/system.c
@@ -5,29 +5,187 @@
  */
 
 #include <stdio.h>
+#include <stdlib.h>
+#include <signal.h>
+#include <time.h>
+#include <sys/time.h>
+#include <sys/timeb.h>
+#include <sys/types.h>
+#include <sys/wait.h>
+
 #include "windows.h"
+#include "miscemu.h"
+
+typedef struct
+{
+    FARPROC16 callback;  /* NULL if not in use */
+    INT32     rate;
+    INT32     ticks;
+} SYSTEM_TIMER;
+
+#define NB_SYS_TIMERS   8
+#define SYS_TIMER_RATE  54925
+
+static SYSTEM_TIMER SYS_Timers[NB_SYS_TIMERS];
+static int SYS_NbTimers = 0;
+static BOOL32 SYS_TimersDisabled = FALSE;
+
+/***********************************************************************
+ *           SYSTEM_TimerTick
+ */
+static void SYSTEM_TimerTick(void)
+{
+    int i;
+
+    for (i = 0; i < NB_SYS_TIMERS; i++)
+    {
+        if (!SYS_Timers[i].callback) continue;
+        if ((SYS_Timers[i].ticks -= SYS_TIMER_RATE) <= 0)
+        {
+            SYS_Timers[i].ticks += SYS_Timers[i].rate;
+            SYS_Timers[i].callback();
+        }
+    }
+}
+
+
+/**********************************************************************
+ *           SYSTEM_StartTicks
+ *
+ * Start the system tick timer.
+ */
+static void SYSTEM_StartTicks(void)
+{
+    static BOOL32 handler_installed = FALSE;
+
+    if (!handler_installed)
+    {
+        handler_installed = TRUE;
+        SIGNAL_SetHandler( SIGALRM, SYSTEM_TimerTick, 1 );
+    }
+#ifndef __EMX__ /* FIXME: Time don't work... Use BIOS directly instead */
+    {
+        struct itimerval vt_timer;
+
+        vt_timer.it_interval.tv_sec = 0;
+        vt_timer.it_interval.tv_usec = 54929;
+        vt_timer.it_value = vt_timer.it_interval;
+        setitimer( ITIMER_REAL, &vt_timer, NULL );
+    }
+#endif
+}
+
+
+/**********************************************************************
+ *           SYSTEM_StopTicks
+ *
+ * Stop the system tick timer.
+ */
+static void SYSTEM_StopTicks(void)
+{
+#ifndef __EMX__ /* FIXME: Time don't work... Use BIOS directly instead */
+    struct itimerval vt_timer;
+
+    vt_timer.it_interval.tv_sec = 0;
+    vt_timer.it_interval.tv_usec = 0;
+    vt_timer.it_value = vt_timer.it_interval;
+    setitimer( ITIMER_REAL, &vt_timer, NULL );
+#endif
+}
 
 
 /***********************************************************************
  *           InquireSystem   (SYSTEM.1)
- */
-DWORD InquireSystem( WORD code, WORD drive, BOOL16 enable )
+ *
+ * Note: the function always takes 2 WORD arguments, contrary to what
+ *       "Undocumented Windows" says.
+  */
+DWORD InquireSystem( WORD code, WORD arg )
 {
     WORD drivetype;
 
     switch(code)
     {
     case 0:  /* Get timer resolution */
-        return 54925;
+        return SYS_TIMER_RATE;
 
     case 1:  /* Get drive type */
-        drivetype = GetDriveType16( drive );
+        drivetype = GetDriveType16( arg );
         return MAKELONG( drivetype, drivetype );
 
     case 2:  /* Enable one-drive logic */
-        fprintf( stderr, "InquireSystem(2): set single-drive %d not supported\n", enable );
+        fprintf( stderr, "InquireSystem(2): set single-drive %d not supported\n", arg );
         return 0;
     }
     fprintf( stderr, "InquireSystem: unknown code %d\n", code );
     return 0;
 }
+
+
+/***********************************************************************
+ *           CreateSystemTimer   (SYSTEM.2)
+ */
+WORD CreateSystemTimer( WORD rate, FARPROC16 callback )
+{
+    int i;
+
+    for (i = 0; i < NB_SYS_TIMERS; i++)
+        if (!SYS_Timers[i].callback)  /* Found one */
+        {
+            SYS_Timers[i].rate = (UINT32)rate * 1000;
+            if (SYS_Timers[i].rate < SYS_TIMER_RATE)
+                SYS_Timers[i].rate = SYS_TIMER_RATE;
+            SYS_Timers[i].ticks = SYS_Timers[i].rate;
+            SYS_Timers[i].callback = callback;
+            if ((++SYS_NbTimers == 1) && !SYS_TimersDisabled)
+                SYSTEM_StartTicks();
+            return i + 1;  /* 0 means error */
+        }
+    return 0;
+}
+
+
+/***********************************************************************
+ *           KillSystemTimer   (SYSTEM.3)
+ *
+ * Note: do not confuse this function with USER.182
+ */
+WORD SYSTEM_KillSystemTimer( WORD timer )
+{
+    if (!timer || (timer > NB_SYS_TIMERS)) return timer;  /* Error */
+    SYS_Timers[timer-1].callback = NULL;
+    if ((!--SYS_NbTimers) && !SYS_TimersDisabled) SYSTEM_StopTicks();
+    return 0;
+}
+
+
+/***********************************************************************
+ *           EnableSystemTimers   (SYSTEM.4)
+ */
+void EnableSystemTimers(void)
+{
+    SYS_TimersDisabled = FALSE;
+    if (SYS_NbTimers) SYSTEM_StartTicks();
+}
+
+
+/***********************************************************************
+ *           DisableSystemTimers   (SYSTEM.5)
+ */
+void DisableSystemTimers(void)
+{
+    SYS_TimersDisabled = TRUE;
+    if (SYS_NbTimers) SYSTEM_StopTicks();
+}
+
+
+/***********************************************************************
+ *           SYSTEM_GetTimerProc
+ *
+ * Return the timer proc of a system timer. Used by thunking code.
+ */
+FARPROC16 SYSTEM_GetTimerProc( WORD timer )
+{
+    if (!timer || (timer > NB_SYS_TIMERS)) return NULL;
+    return SYS_Timers[timer-1].callback;
+}
