Index: /libcaca/trunk/kernel/kernel.c
===================================================================
--- /libcaca/trunk/kernel/kernel.c	(revision 4158)
+++ /libcaca/trunk/kernel/kernel.c	(revision 4159)
@@ -37,4 +37,11 @@
     printf("_start at 0x%x\n", _start);
     printf("kmain() at 0x%x\n", kmain);
+    printf("Types : char[%d] int[%d] long[%d] unsigned long long[%d]\n", sizeof(char), sizeof(int), sizeof(long), sizeof(unsigned long long));
+    
+    enable_interrupt(1);  // Enable Keyboard Interrupt (IRQ1)
+    enable_interrupt(0);  // Enable IRQ0 (timer)
+    enable_interrupt(13);
+    timer_phase(100);     // Fire IRQ0 each 1/100s
+    
     
     processor_get_info(&processor_info);
@@ -44,19 +51,6 @@
     floppy_print_info(&floppy_info);
 
-    enable_interrupt(1);  // Enable Keyboard Interrupt (IRQ1)
-    enable_interrupt(0);  // Enable IRQ0 (timer)
-    enable_interrupt(13);
-    timer_phase(100);     // Fire IRQ0 each 1/100s
-    
-  
-    printf("Waiting 1s\n");
-    sleep(1);
-    printf("Waiting 2s\n");
-    sleep(2);
-    printf("Waiting 3s\n");
-    sleep(3);
-    printf("Ok\n");
     //caca_get_display_driver_list();
-    
+    printf("Entering kernel infinite loop.\n");
     
     while (1)
Index: /libcaca/trunk/kernel/klibc.c
===================================================================
--- /libcaca/trunk/kernel/klibc.c	(revision 4158)
+++ /libcaca/trunk/kernel/klibc.c	(revision 4159)
@@ -1,3 +1,3 @@
-/*
+/* 
  *  libcaca       
  *  libcaca       Colour ASCII-Art library
@@ -36,5 +36,5 @@
 
 /* Our memory mapping */
-static uint32_t *freemem = (uint32_t*) 0x00200000;
+static uint32_t *freemem = (uint32_t *) 0x00200000;
 int kX = 0;
 int kY = 0;
@@ -42,38 +42,45 @@
 void scroll(void)
 {
-  	unsigned char* video, *tmp;
-	
-	for(video=(unsigned char*)0xB8000 ; video<(unsigned char*)0xB8FA0 ; video++){
-        tmp = (unsigned char*) (video+1*160);
-        
-        if(tmp<(unsigned char*)0xB8FA0)
+    unsigned char *video, *tmp;
+
+    for (video = (unsigned char *)0xB8000; video < (unsigned char *)0xB8FA0;
+         video++)
+    {
+        tmp = (unsigned char *)(video + 1 * 160);
+
+        if (tmp < (unsigned char *)0xB8FA0)
             *video = *tmp;
         else
             *video = 0;
-	}
-    
-	kY-=1;
-	if(kY<0) 
-		kY=0;}
+    }
+
+    kY -= 1;
+    if (kY < 0)
+        kY = 0;
+}
 
 void putcar(unsigned char c)
 {
-	unsigned char* video;
-    
-	if(c==10){	
-		kX=0;
-		kY++;
-	}
-	else{
-		video = (unsigned char*) (0xB8000+2*kX+160*kY);
-		*video = c;
-		*(video+1) = 0x07;
-        
-		kX++;
-		if(kX>79){
-			kX = 0;
-			kY++;
-		}
-        if(kY >= 24) {
+    unsigned char *video;
+
+    if (c == 10)
+    {
+        kX = 0;
+        kY++;
+    }
+    else
+    {
+        video = (unsigned char *)(0xB8000 + 2 * kX + 160 * kY);
+        *video = c;
+        *(video + 1) = 0x07;
+
+        kX++;
+        if (kX > 79)
+        {
+            kX = 0;
+            kY++;
+        }
+        if (kY >= 24)
+        {
             scroll();
         }
@@ -84,6 +91,7 @@
 {
     char const *ptr = str;
-    while(*ptr) {
-       	putcar(*ptr++);
+    while (*ptr)
+    {
+        putcar(*ptr++);
     }
 }
@@ -94,10 +102,11 @@
     kX = 0;
     kY = 0;
- 	for(y = 0; y < 25; y++)
-        for(x = 0; x < 80; x++) {
-         	putcar(' ');   
+    for (y = 0; y < 25; y++)
+        for (x = 0; x < 80; x++)
+        {
+            putcar(' ');
         }
     kX = 0;
-    kY = 0;        
+    kY = 0;
 }
 
@@ -106,5 +115,5 @@
 {
     uint32_t *p = freemem;
-    if(!size)
+    if (!size)
         return NULL;
     size = (size + 0x7) / 4;
@@ -123,17 +132,17 @@
     uint32_t oldsize;
     void *p;
-    
-    if(!size)
+
+    if (!size)
         return NULL;
-    
-    if(!ptr)
+
+    if (!ptr)
         oldsize = 0;
     else
     {
-        oldsize = ((uint32_t *)ptr)[-1];
-        if(oldsize >= size)
+        oldsize = ((uint32_t *) ptr)[-1];
+        if (oldsize >= size)
             return ptr;
     }
-    
+
     p = malloc(size);
     memcpy(p, ptr, oldsize);
@@ -169,5 +178,5 @@
 int abs(int j)
 {
-    if(j < 0)
+    if (j < 0)
         return -j;
     return j;
@@ -177,8 +186,8 @@
 {
     /* FIXME: reboot? */
-    while(1);
-}
-
-int atexit(void (*function)(void))
+    while (1);
+}
+
+int atexit(void (*function) (void))
 {
     /* FIXME: register function */
@@ -190,8 +199,8 @@
 {
     uint8_t *ptr = s;
-    
-    while(n--)
+
+    while (n--)
         *ptr++ = c;
-    
+
     return s;
 }
@@ -201,8 +210,8 @@
     uint8_t *destptr = dest;
     uint8_t const *srcptr = src;
-    
-    while(n--)
+
+    while (n--)
         *destptr++ = *srcptr++;
-    
+
     return dest;
 }
@@ -218,8 +227,8 @@
 {
     int len = 0;
-    
-    while(*s++)
+
+    while (*s++)
         len++;
-    
+
     return len;
 }
@@ -227,10 +236,10 @@
 int strcmp(const char *s1, const char *s2)
 {
-    while(*s1 && *s1 == *s2)
+    while (*s1 && *s1 == *s2)
     {
         s1++;
         s2++;
     }
-    
+
     return (int)*s1 - (int)*s2;
 }
@@ -238,10 +247,10 @@
 int strcasecmp(const char *s1, const char *s2)
 {
-    while(*s1 && *s2 && UPPER(*s1) == UPPER(*s2))
+    while (*s1 && *s2 && UPPER(*s1) == UPPER(*s2))
     {
         s1++;
         s2++;
     }
-    
+
     return (int)UPPER(*s1) - (int)UPPER(*s2);
 }
@@ -250,8 +259,8 @@
 {
     uint8_t const *s1 = _s1, *s2 = _s2;
-    
-    while(n--)
-    {
-        if(*s1 != *s2)
+
+    while (n--)
+    {
+        if (*s1 != *s2)
             return (int)*s1 - (int)*s2;
         s1++;
@@ -265,8 +274,8 @@
     char *new;
     unsigned int len = strlen(s);
-    
+
     new = malloc(len + 1);
     memcpy(new, s, len + 1);
-    
+
     return new;
 }
@@ -275,8 +284,8 @@
 {
     do
-        if(*s == c)
-            return (char *)(intptr_t)s;
-    while(*s++);
-    
+        if (*s == c)
+            return (char *)(intptr_t) s;
+    while (*s++);
+
     return NULL;
 }
@@ -296,11 +305,11 @@
 }
 
-int feof(FILE *stream)
-{
-    /* FIXME */
-    return 0;
-}
-
-char *fgets(char *s, int size, FILE *stream)
+int feof(FILE * stream)
+{
+    /* FIXME */
+    return 0;
+}
+
+char *fgets(char *s, int size, FILE * stream)
 {
     /* FIXME */
@@ -308,10 +317,10 @@
 }
 
-size_t fwrite(const void *ptr, size_t size, size_t nmemb, FILE *stream)
-{
-    return 0;
-}
-
-int fclose(FILE *fp)
+size_t fwrite(const void *ptr, size_t size, size_t nmemb, FILE * stream)
+{
+    return 0;
+}
+
+int fclose(FILE * fp)
 {
     /* FIXME */
@@ -325,69 +334,87 @@
     args_list args;
     args_start(args, fmt);
-    
+
     char *s;
     int ptr = 0;
     int i = 0;
-    
-    for (; fmt[i]; ++i) {
-        if ((fmt[i]!='%') && (fmt[i]!='\\')) {
+
+    for (; fmt[i]; ++i)
+    {
+        if ((fmt[i] != '%') && (fmt[i] != '\\'))
+        {
             str[ptr++] = fmt[i];
             continue;
-        } else if (fmt[i] == '\\') {
-            switch (fmt[++i]) {
-                case 'a': str[ptr++] = '\a'; break;
-                case 'b': str[ptr++] = '\b'; break;
-                case 't': str[ptr++] = '\t'; break;
-                case 'n': str[ptr++] = '\n'; break;
-                case 'r': str[ptr++] = '\r'; break;
-                case '\\':str[ptr++] = '\\'; break;
+        }
+        else if (fmt[i] == '\\')
+        {
+            switch (fmt[++i])
+            {
+            case 'a':
+                str[ptr++] = '\a';
+                break;
+            case 'b':
+                str[ptr++] = '\b';
+                break;
+            case 't':
+                str[ptr++] = '\t';
+                break;
+            case 'n':
+                str[ptr++] = '\n';
+                break;
+            case 'r':
+                str[ptr++] = '\r';
+                break;
+            case '\\':
+                str[ptr++] = '\\';
+                break;
             }
             continue;
         }
-        
-        switch (fmt[++i]) {
-            case 's':
-                s = (char *)args_next(args, char *);
-                while (*s)
-                    str[ptr++] = *s++;
-                break;
-            case 'c':
-                str[ptr++] = (char)args_next(args, int);
-                break;
-            case 'p':
-            case 'x':
-                htoa((unsigned long)args_next(args, unsigned long), tmp);
-                memcpy(&str[ptr], tmp, strlen(tmp));
-                ptr+=strlen(tmp);
-                break;
-            case 'd':
-                itoa((unsigned long)args_next(args, unsigned long), tmp);
-                memcpy(&str[ptr], tmp, strlen(tmp));
-                ptr+=strlen(tmp);
-                break;
-            case '%':
-                str[ptr++] = '%';
-                break;
-            default:
-                str[ptr++] = fmt[i];
-                break;
-        }
-    }
-    
+
+        switch (fmt[++i])
+        {
+        case 's':
+            s = (char *)args_next(args, char *);
+            while (*s)
+                str[ptr++] = *s++;
+            break;
+        case 'c':
+            str[ptr++] = (char)args_next(args, int);
+            break;
+        case 'p':
+        case 'x':
+            htoa((unsigned long)args_next(args, unsigned long), tmp);
+            memcpy(&str[ptr], tmp, strlen(tmp));
+            ptr += strlen(tmp);
+            break;
+        case 'd':
+            itoa((unsigned long)args_next(args, unsigned long), tmp);
+            memcpy(&str[ptr], tmp, strlen(tmp));
+            ptr += strlen(tmp);
+            break;
+        case '%':
+            str[ptr++] = '%';
+            break;
+        default:
+            str[ptr++] = fmt[i];
+            break;
+        }
+    }
+
     str[ptr] = '\0';
     args_end(args);
-    
+
     print(str);
-    
-    return 0;
-}
-
-int fprintf(FILE *stream, const char *format, ...)
-{
-    /* FIXME */
-    return 0;
-}
-
-int fflush(FILE *stream)
+
+    return 0;
+}
+
+int fprintf(FILE * stream, const char *format, ...)
+{
+    /* FIXME */
+    return 0;
+}
+
+int fflush(FILE * stream)
 {
     /* FIXME */
@@ -400,51 +427,69 @@
     args_list args;
     args_start(args, fmt);
-    
+
     char *s;
     int ptr = 0;
     int i = 0;
-    
-    for (; fmt[i]; ++i) {
-        if ((fmt[i]!='%') && (fmt[i]!='\\')) {
+
+    for (; fmt[i]; ++i)
+    {
+        if ((fmt[i] != '%') && (fmt[i] != '\\'))
+        {
             str[ptr++] = fmt[i];
             continue;
-        } else if (fmt[i] == '\\') {
-            switch (fmt[++i]) {
-                case 'a': str[ptr++] = '\a'; break;
-                case 'b': str[ptr++] = '\b'; break;
-                case 't': str[ptr++] = '\t'; break;
-                case 'n': str[ptr++] = '\n'; break;
-                case 'r': str[ptr++] = '\r'; break;
-                case '\\':str[ptr++] = '\\'; break;
+        }
+        else if (fmt[i] == '\\')
+        {
+            switch (fmt[++i])
+            {
+            case 'a':
+                str[ptr++] = '\a';
+                break;
+            case 'b':
+                str[ptr++] = '\b';
+                break;
+            case 't':
+                str[ptr++] = '\t';
+                break;
+            case 'n':
+                str[ptr++] = '\n';
+                break;
+            case 'r':
+                str[ptr++] = '\r';
+                break;
+            case '\\':
+                str[ptr++] = '\\';
+                break;
             }
             continue;
         }
-    
-        switch (fmt[++i]) {
-            case 's':
-                s = (char *)args_next(args, char *);
-                while (*s)
-                    str[ptr++] = *s++;
-                break;
-            case 'c':
-                str[ptr++] = (char)args_next(args, int);
-                break;
-            case 'p':
-            case 'x':
-                htoa((unsigned long)args_next(args, unsigned long), tmp);
-                memcpy(&str[ptr], tmp, strlen(tmp));
-                ptr+=strlen(tmp);
-                break;
-            case 'd':
-                itoa((unsigned long)args_next(args, unsigned long), tmp);
-                memcpy(&str[ptr], tmp, strlen(tmp));
-                ptr+=strlen(tmp);
-                break;
-            case '%':
-                str[ptr++] = '%';
-                break;
-            default:
-                str[ptr++] = fmt[i];
-                break;
+
+        switch (fmt[++i])
+        {
+        case 's':
+            s = (char *)args_next(args, char *);
+            while (*s)
+                str[ptr++] = *s++;
+            break;
+        case 'c':
+            str[ptr++] = (char)args_next(args, int);
+            break;
+        case 'p':
+        case 'x':
+            htoa((unsigned long)args_next(args, unsigned long), tmp);
+            memcpy(&str[ptr], tmp, strlen(tmp));
+            ptr += strlen(tmp);
+            break;
+        case 'd':
+            itoa((unsigned long)args_next(args, unsigned long), tmp);
+            memcpy(&str[ptr], tmp, strlen(tmp));
+            ptr += strlen(tmp);
+            break;
+        case '%':
+            str[ptr++] = '%';
+            break;
+        default:
+            str[ptr++] = fmt[i];
+            break;
         }
     }
@@ -465,24 +510,20 @@
 void usleep(unsigned long usec)
 {
-   	u32 start = ticks;
-    signed int diff  = 0;
-    
-    while(1) {
+    u32 start = ticks;
+    signed int diff = 0;
+
+    while (1)
+    {
         diff = (signed int)(ticks - start);
-        if(diff >= (signed int)(usec/20)) break;
-    }
-}
-
-void sleep(unsigned long sec)	
-{
-	usleep(sec*1000);	
-}
-
-/* time.h functions */
-  u64 rdtsc() {
-    u64 x;
-    __asm__ volatile ("rdtsc" : "=A" (x));
-    return x;
-}
+        if (diff >= (signed int)(usec / 20))
+            break;
+    }
+}
+
+void sleep(unsigned long sec)
+{
+    usleep(sec * 1000);
+}
+
 
 int gettimeofday(struct timeval *tv, struct timezone *tz)
@@ -490,16 +531,16 @@
     static int usec = 0;
     static int sec = 0;
-    
+
     /* FIXME */
     usec += 10000;
-    if(usec > 1000000)
+    if (usec > 1000000)
     {
         sec++;
         usec -= 1000000;
     }
-    
+
     tv->tv_sec = sec;
     tv->tv_usec = usec;
-    
+
     return 0;
 }
@@ -510,5 +551,5 @@
     double ret = 0.0;
 #ifdef HAVE_FSIN_FCOS
-    asm volatile("fcos" : "=t" (ret) : "0" (x));
+    asm volatile ("fcos":"=t" (ret):"0"(x));
 #else
     double x2;
@@ -516,13 +557,13 @@
     double fact = 1.0;
     int i;
-    
+
     x = x - ((double)(int)(x / (2 * M_PI))) * (2 * M_PI);
     x2 = x * x;
-    
+
     /* cos(x) = 1/0! - x^2/2! + x^4/4! - x^6/6! ... */
-    for(i = 0; i < 10; i++)
+    for (i = 0; i < 10; i++)
     {
         ret += num / fact;
-        num *= - x2;
+        num *= -x2;
         fact *= (2 * i + 1) * (2 * i + 2);
     }
@@ -535,5 +576,5 @@
     double ret = 0.0;
 #ifdef HAVE_FSIN_FCOS
-    asm volatile("fsin" : "=t" (ret) : "0" (x));
+    asm volatile ("fsin":"=t" (ret):"0"(x));
 #else
     double x2;
@@ -541,14 +582,14 @@
     double fact = 1.0;
     int i;
-    
+
     x = x - ((double)(int)(x / (2 * M_PI))) * (2 * M_PI);
     x2 = x * x;
     num = x;
-    
+
     /* sin(x) = x/1! - x^3/3! + x^5/5! - x^7/7! ... */
-    for(i = 0; i < 10; i++)
+    for (i = 0; i < 10; i++)
     {
         ret += num / fact;
-        num *= - x2;
+        num *= -x2;
         fact *= (2 * i + 2) * (2 * i + 3);
     }
@@ -561,20 +602,21 @@
     double ret = x;
     int i;
-    
+
     /* This is Newton's method */
-    for(i = 0; i < 10; i++)
+    for (i = 0; i < 10; i++)
         ret = (ret * ret + x) / (ret * 2.0);
-    
+
     return ret;
 }
 
 
-/* reverse:  reverse string s in place */
+/* reverse: reverse string s in place */
 void reverse(char s[])
 {
     int i, j;
     char c;
-    
-    for (i = 0, j = strlen(s)-1; i<j; i++, j--) {
+
+    for (i = 0, j = strlen(s) - 1; i < j; i++, j--)
+    {
         c = s[i];
         s[i] = s[j];
@@ -588,22 +630,26 @@
 {
     int i, sign;
-    
-    if ((sign = n) < 0)  /* record sign */
-        n = -n;          /* make n positive */
+
+    if ((sign = n) < 0)         /* record sign */
+        n = -n;                 /* make n positive */
     i = 0;
-    do {       /* generate digits in reverse order */
-        s[i++] = n % 10 + '0';   /* get next digit */
-    } while ((n /= 10) > 0);     /* delete it */
+    do
+    {                           /* generate digits in reverse order */
+        s[i++] = n % 10 + '0';  /* get next digit */
+    }
+    while ((n /= 10) > 0);      /* delete it */
     if (sign < 0)
         s[i++] = '-';
     s[i] = '\0';
     reverse(s);
-} 
-
-void htoa(unsigned int value, char s[]) {
+}
+
+void htoa(unsigned int value, char s[])
+{
     int i = 8;
     int ptr = 0;
-    while (i-- > 0) {
-        s[ptr++] = "0123456789abcdef"[(value>>(i*4))&0xf];
+    while (i-- > 0)
+    {
+        s[ptr++] = "0123456789abcdef"[(value >> (i * 4)) & 0xf];
     }
     s[ptr] = 0;
Index: /libcaca/trunk/kernel/kernel.h
===================================================================
--- /libcaca/trunk/kernel/kernel.h	(revision 4158)
+++ /libcaca/trunk/kernel/kernel.h	(revision 4159)
@@ -31,4 +31,6 @@
 #define sti             __asm__("sti"::)
 
+#define rdtsc(low,high) \
+__asm__ __volatile__("rdtsc" : "=a" (low), "=d" (high))
 
 
Index: /libcaca/trunk/kernel/klibc.h
===================================================================
--- /libcaca/trunk/kernel/klibc.h	(revision 4158)
+++ /libcaca/trunk/kernel/klibc.h	(revision 4159)
@@ -42,5 +42,5 @@
 typedef unsigned short u16;
 typedef unsigned int u32;
-typedef unsigned long int u64;
+typedef unsigned long long u64;
 
 #ifndef size_t
@@ -124,5 +124,4 @@
 
 /* time.h functions */
-u64 rdtsc(void);
 int gettimeofday(struct timeval *tv, struct timezone *tz);
 int time(void *);
Index: /libcaca/trunk/kernel/drivers/processor.h
===================================================================
--- /libcaca/trunk/kernel/drivers/processor.h	(revision 4158)
+++ /libcaca/trunk/kernel/drivers/processor.h	(revision 4159)
@@ -93,7 +93,9 @@
     char vendor[13];
     unsigned int features;
+    u32 frequency;
 };
 
 
 int processor_get_info(struct processor_info *processor_info);
+u32 processor_get_frequency(struct processor_info *processor_info);
 void processor_print_info(struct processor_info *processor_info);
Index: /libcaca/trunk/kernel/drivers/processor.c
===================================================================
--- /libcaca/trunk/kernel/drivers/processor.c	(revision 4158)
+++ /libcaca/trunk/kernel/drivers/processor.c	(revision 4159)
@@ -17,4 +17,5 @@
 #include "kernel.h"
 #include "klibc.h"
+#include "drivers/timer.h"
 #include "processor.h"
 
@@ -50,5 +51,33 @@
     processor_info->features = a;
 
+    processor_info->frequency = 0;
+    processor_info->frequency = processor_get_frequency(processor_info);
+
     return 0;
+}
+
+u32 processor_get_frequency(struct processor_info * processor_info)
+{
+    if (processor_info->frequency)
+        return processor_info->frequency;
+    u64 srdtsc64, erdtsc64;
+    u32 srdtsc_l, srdtsc_h;
+    u32 erdtsc_l, erdtsc_h;
+
+    rdtsc(srdtsc_l, srdtsc_h);  /* Get RDTSC */
+    sleep(2);                   /* Sleep for 2 seconds */
+    rdtsc(erdtsc_l, erdtsc_h);  /* Get RDTSC again */
+
+    srdtsc64 = srdtsc_h;
+    srdtsc64 <<= 32;
+    srdtsc64 |= srdtsc_l;
+    erdtsc64 = erdtsc_h;
+    erdtsc64 <<= 32;
+    erdtsc64 |= erdtsc_l;
+
+
+    u32 diff = erdtsc64 - srdtsc64;     /* Cycle count for 2 seconds */
+    diff /= 2;                  /* Divide by 2 to get cycles per sec */
+    return diff;
 }
 
@@ -57,4 +86,24 @@
     printf("CPU%d\n", processor_info->id);
     printf("Vendor ID : %s\n", processor_info->vendor);
+    if (processor_info->frequency > 1000000000)
+    {
+        printf("Frequency : ~%dGhz (or something like that)\n",
+               processor_info->frequency / 1000000000);
+    }
+    else if (processor_info->frequency > 1000000)
+    {
+        printf("Frequency : ~%dMhz (or something like that)\n",
+               processor_info->frequency / 1000000);
+    }
+    else if (processor_info->frequency > 1000)
+    {
+        printf("Frequency : ~%dKhz (or something like that)\n",
+               processor_info->frequency / 1000);
+    }
+    else
+    {
+        printf("Frequency : ~%dhz (you must be running Bochs)\n",
+               processor_info->frequency);
+    }
     printf("Features : 0x%x\n", processor_info->features);
 }
Index: /libcaca/trunk/kernel/drivers/timer.c
===================================================================
--- /libcaca/trunk/kernel/drivers/timer.c	(revision 4158)
+++ /libcaca/trunk/kernel/drivers/timer.c	(revision 4159)
@@ -1,3 +1,3 @@
-/* 
+/*
  *  libcaca       
  *  libcaca       Colour ASCII-Art library
@@ -23,26 +23,35 @@
 void timer_phase(int hz)
 {
-    unsigned int divisor = 1193180 / hz;        /* Calculate our divisor */
-    /* 
-       0x43 is the Mode/Command register
-
-       From
-       http://wiki.osdev.org/Programmable_Interval_Timer#Read_Back_Status_Byte 
-       : Bits Usage 6 and 7 Select channel : 0 0 = Channel 0 0 1 = Channel 1
-       1 0 = Channel 2 1 1 = Read-back command (8254 only) 4 and 5 Access mode 
-       : 0 0 = Latch count value command 0 1 = Access mode: lobyte only 1 0 =
-       Access mode: hibyte only 1 1 = Access mode: lobyte/hibyte 1 to 3
-       Operating mode : 0 0 0 = Mode 0 (interrupt on terminal count) 0 0 1 =
-       Mode 1 (hardware re-triggerable one-shot) 0 1 0 = Mode 2 (rate
-       generator) 0 1 1 = Mode 3 (square wave generator) 1 0 0 = Mode 4
-       (software triggered strobe) 1 0 1 = Mode 5 (hardware triggered strobe)
-       1 1 0 = Mode 2 (rate generator, same as 010b) 1 1 1 = Mode 3 (square
-       wave generator, same as 011b) 0 BCD/Binary mode: 0 = 16-bit binary, 1 = 
-       four-digit BCD
-
+    unsigned int divisor = 1193180 / hz;   /* Calculate our divisor */
+    /*
+      0x43 is the Mode/Command register
+      
+     From http://wiki.osdev.org/Programmable_Interval_Timer#Read_Back_Status_Byte : 
+     Bits         Usage
+     6 and 7      Select channel :
+                  0 0 = Channel 0
+                  0 1 = Channel 1
+                  1 0 = Channel 2
+                  1 1 = Read-back command (8254 only)
+     4 and 5      Access mode :
+                  0 0 = Latch count value command
+                  0 1 = Access mode: lobyte only
+                  1 0 = Access mode: hibyte only
+                  1 1 = Access mode: lobyte/hibyte
+     1 to 3       Operating mode :
+                  0 0 0 = Mode 0 (interrupt on terminal count)
+                  0 0 1 = Mode 1 (hardware re-triggerable one-shot)
+                  0 1 0 = Mode 2 (rate generator)
+                  0 1 1 = Mode 3 (square wave generator)
+                  1 0 0 = Mode 4 (software triggered strobe)
+                  1 0 1 = Mode 5 (hardware triggered strobe)
+                  1 1 0 = Mode 2 (rate generator, same as 010b)
+                  1 1 1 = Mode 3 (square wave generator, same as 011b)
+     0            BCD/Binary mode: 0 = 16-bit binary, 1 = four-digit BCD
+     
      */
-    unsigned short command = 0 b00110110;
+    unsigned short command = 0b00110110;
     outb(0x43, command);
-    outb(0x40, divisor & 0xFF); /* Set low byte of divisor */
-    outb(0x40, divisor >> 8);   /* Set high byte of divisor */
+    outb(0x40, divisor & 0xFF);            /* Set low byte of divisor */
+    outb(0x40, divisor >> 8);              /* Set high byte of divisor */
 }
Index: /libcaca/trunk/build-kernel
===================================================================
--- /libcaca/trunk/build-kernel	(revision 4158)
+++ /libcaca/trunk/build-kernel	(revision 4159)
@@ -10,8 +10,8 @@
 LDFLAGS="-nostdlib -Wl,-N -Wl,-Ttext -Wl,100000"
 
-./configure --disable-slang --disable-ncurses --disable-win32 \
-	            --disable-conio --disable-x11 --disable-gl --disable-network \
-	            --enable-vga --disable-imlib2 --disable-doc \
-	            --host i386
+#./configure --disable-slang --disable-ncurses --disable-win32 \
+#	            --disable-conio --disable-x11 --disable-gl --disable-network \
+#	            --enable-vga --disable-imlib2 --disable-doc \
+#	            --host i386
 
 # Compile cacademo, leave it as an object
