:: commit 74c7c0d776c655d99166820d5adb9a37f2fe875e

mintsuki <mintsuki@protonmail.com> — 2020-10-20 00:38

parents: 54eaf96860

Add E9_OUTPUT config option

diff --git a/limine.bin b/limine.bin
index 035d981e..8869a106 100644
Binary files a/limine.bin and b/limine.bin differ
diff --git a/stage2/lib/config.c b/stage2/lib/config.c
index 686b2d75..8f07660a 100644
--- a/stage2/lib/config.c
+++ b/stage2/lib/config.c
@@ -8,6 +8,8 @@
 
 #define SEPARATOR '\n'
 
+bool config_ready = false;
+
 static char *config_addr;
 
 int init_config(int drive, int part) {
@@ -33,6 +35,8 @@ int init_config(int drive, int part) {
         }
     }
 
+    config_ready = true;
+
     return 0;
 }
 
diff --git a/stage2/lib/config.h b/stage2/lib/config.h
index 788eb3c4..b5a0108b 100644
--- a/stage2/lib/config.h
+++ b/stage2/lib/config.h
@@ -4,6 +4,8 @@
 #include <stddef.h>
 #include <stdbool.h>
 
+extern bool config_ready;
+
 int init_config(int drive, int part);
 int config_get_entry_name(char *ret, size_t index, size_t limit);
 int config_set_entry(size_t index);
diff --git a/stage2/lib/print.c b/stage2/lib/print.c
index 630e634e..e4b1a91c 100644
--- a/stage2/lib/print.c
+++ b/stage2/lib/print.c
@@ -3,8 +3,12 @@
 #include <stdint.h>
 #include <lib/print.h>
 #include <lib/blib.h>
-#include <sys/cpu.h>
+#include <lib/config.h>
 #include <lib/term.h>
+#include <lib/libc.h>
+#include <sys/cpu.h>
+
+static int e9_output = -1;
 
 static const char *base_digits = "0123456789abcdef";
 
@@ -114,6 +118,11 @@ void print(const char *fmt, ...) {
 static char print_buf[PRINT_BUF_MAX];
 
 void vprint(const char *fmt, va_list args) {
+    if (config_ready && e9_output == -1) {
+        e9_output = config_get_value(print_buf, 0, PRINT_BUF_MAX, "E9_OUTPUT") &&
+                    !strcmp(print_buf, "yes");
+    }
+
     size_t print_buf_i = 0;
 
     for (;;) {
@@ -170,8 +179,8 @@ void vprint(const char *fmt, va_list args) {
 out:
     term_write(print_buf, print_buf_i);
 
-#ifdef E9_OUTPUT
-    for (size_t i = 0; i < print_buf_i; i++)
-        outb(0xe9, print_buf[i]);
-#endif
+    if (e9_output == 1) {
+        for (size_t i = 0; i < print_buf_i; i++)
+            outb(0xe9, print_buf[i]);
+    }
 }
diff --git a/test/limine.cfg b/test/limine.cfg
index 20cb5e2c..330d0549 100644
--- a/test/limine.cfg
+++ b/test/limine.cfg
@@ -1,6 +1,7 @@
 DEFAULT_ENTRY=0
 TIMEOUT=3
 GRAPHICS=yes
+E9_OUTPUT=yes
 
 THEME_BLACK=80000000
 THEME_RED=aa0000
tab: 248 wrap: offon