summaryrefslogtreecommitdiff
path: root/ui/daemon/ui.c
diff options
context:
space:
mode:
Diffstat (limited to 'ui/daemon/ui.c')
-rw-r--r--ui/daemon/ui.c54
1 files changed, 54 insertions, 0 deletions
diff --git a/ui/daemon/ui.c b/ui/daemon/ui.c
new file mode 100644
index 0000000..1cdc55b
--- /dev/null
+++ b/ui/daemon/ui.c
@@ -0,0 +1,54 @@
+// file : ui/daemon/ui.c
+// project : Salis-VM
+// author : Paul Oliver <contact@pauloliver.dev>
+
+#include <signal.h>
+#include <stdbool.h>
+#include <stdint.h>
+#include <threads.h>
+#include <zlib.h>
+
+#include "arch_spec.h"
+#include "arch_inst.h"
+#include "compress.h"
+#include "logger.h"
+#include "salis.h"
+#include "timer.h"
+
+static bool g_running = true;
+
+static void quit(int signo) {
+ log_attention("Signal %d received, will stop simulator soon", signo);
+ salis_signal_stop_no_check();
+ g_running = false;
+}
+
+int main(void) {
+ log_info("Initializing daemon UI");
+ log_info("Installing signal handlers");
+ signal(SIGINT, quit);
+ signal(SIGTERM, quit);
+
+#if defined(COMMAND_NEW)
+ salis_init();
+#endif
+
+#if defined(COMMAND_LOAD)
+ salis_load();
+#endif
+
+ struct TimerSPS timer_sps;
+
+ while (g_running) {
+ timer_sps_reset(&timer_sps);
+ salis_start();
+ sleep(1);
+ salis_signal_stop_no_check();
+ salis_wait();
+ timer_sps_measure(&timer_sps);
+ log_info("Running simulation @%#018lx steps/s", (uint64_t)timer_sps.steps_per_sec);
+ }
+
+ salis_save_and_free();
+ return 0;
+}