Fill in the VSmile port
diff --git a/contiki-vsmile/contiki-main.c b/contiki-vsmile/contiki-main.c
new file mode 100644
index 0000000..a271b8a
--- /dev/null
+++ b/contiki-vsmile/contiki-main.c
@@ -0,0 +1,93 @@
+/*
+ * Copyright 2021, Adrien Destugues, pulkomandy@pulkomandy.tk
+ * Distributed under terms of the MIT license.
+ */
+
+// Contiki includes
+#include "ctk.h"
+
+#include "clock-conf.h"
+
+#include "program-handler.h"
+
+// Applications
+#include "netconf-dsc.h"
+#include "dhcp-dsc.h"
+#include "www-dsc.h"
+#include "webserver-dsc.h"
+#include "ftp-dsc.h"
+#include "telnet-dsc.h"
+#include "email-dsc.h"
+#include "irc-dsc.h"
+#include "editor-dsc.h"
+#include "calc-dsc.h"
+#include "processes-dsc.h"
+#include "shell-dsc.h"
+#include "about-dsc.h"
+
+// Use the vga_frame counter as a main clock. It would be nice to have a
+// millisecond-precision (or more) clock, but this will do for now.
+clock_time_t clock_time(void)
+{
+	return 0;
+}
+
+// For debugging purposes only. Actually I didn't see it being called yet.
+void
+log_message(const char *part1, const char *part2)
+{
+	  //printf("%s%s\n", part1, part2);
+}
+
+
+int main(void)
+{
+	static volatile int* const SYSTEM_CTRL = 0x3d20;
+	static volatile int* const WATCHDOG_CLEAR = 0x3d24;
+	
+	*SYSTEM_CTRL = 0;
+	*WATCHDOG_CLEAR = 0x55aa;
+	
+	ek_init();
+	conio_init();
+	ctk_init();
+
+	program_handler_init();
+#if 0
+#if 0
+  program_handler_add(&netconf_dsc,   "Network setup", 1);
+  program_handler_add(&dhcp_dsc,      "DHCP client",   1);
+  program_handler_add(&www_dsc,       "Web browser",   1);
+  program_handler_add(&webserver_dsc, "Web server",    1);
+  program_handler_add(&ftp_dsc,       "FTP client",    1);
+  program_handler_add(&telnet_dsc,    "Telnet",        1);
+  program_handler_add(&email_dsc,     "E-mail",        1);
+  program_handler_add(&irc_dsc,       "IRC client",    1);
+#endif
+	program_handler_add(&editor_dsc,    "Editor",        1);
+	program_handler_add(&calc_dsc,      "Calculator",    1);
+	program_handler_add(&processes_dsc, "Processes",     1);
+	program_handler_add(&shell_dsc,     "Command shell", 1);
+#endif
+	program_handler_add(&about_dsc,     "About Contiki", 0);
+
+	// Call ek_run until everything is initialized. Then, load welcome.prg.
+	while(1) {
+		if(ek_run() == 0) {
+			//program_handler_load("welcome.prg", NULL);
+			about_init();
+			//TODO we don't have a loader; so call the init func directly
+			break;
+		}
+	}
+
+	// Run the main loop.
+	while(1) {
+		if (ek_run() == 0) {
+			// We are out of events to run, sleep a little.
+			// TODO wait_vsync(1);
+		}
+	}
+
+    return 0;
+}