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;
+}