]> Zhao Yanbai Git Server - kernel.git/commitdiff
修复在default tty最顶上显示内核版本及编译信息造成的tty坐标错误的问题
authoracevest <zhaoyanbai@126.com>
Tue, 24 Sep 2024 15:47:05 +0000 (23:47 +0800)
committeracevest <zhaoyanbai@126.com>
Tue, 24 Sep 2024 15:47:05 +0000 (23:47 +0800)
include/tty.h
kernel/setup.c
kernel/tty.c

index 1a6955815804e3307672a777dd45a8d73cf7efb3..3d81ec0655b0fd28512b288c88cfc87861285565 100644 (file)
@@ -31,6 +31,10 @@ typedef struct tty {
     unsigned int fg_color;
     unsigned int bg_color;
 
+    // 最大字符数
+    int max_x;
+    int max_y;
+
     // 记录对应的显存起始位置
     unsigned long base_addr;
 } tty_t;
index adffa9d23e8afe7d4fdea50124efd867b27dd775..e5aa7610f63a9e302ef6fa4ccf7ca0e197c85561 100644 (file)
@@ -48,7 +48,29 @@ const char *version = "KERNEL v" VERSION " @" BUILDER
 void print_kernel_version() {
     //
     extern tty_t *const default_tty;
-    tty_write_at(default_tty, 0, 0, version, (size_t)strlen(version));
+    tty_t *const tty = default_tty;
+
+    int len = strlen(version);
+
+    for (int i = 0; i < tty->max_x; i++) {
+        char c = i < len ? version[i] : ' ';
+        c = c != '\n' ? c : ' ';
+        c = c != '\t' ? c : ' ';
+
+        //
+        uint32_t fg_color = tty->fg_color;
+        uint32_t bg_color = tty->bg_color;
+
+        fg_color = TTY_WHITE | TTY_FG_HIGHLIGHT;
+        bg_color = TTY_CYAN;
+
+        //
+        char *dst = (char *)tty->base_addr;
+
+        //
+        dst[i * 2 + 0] = c;
+        dst[i * 2 + 1] = ((bg_color) << 4) | (fg_color);
+    }
 
     //
     printk(version);
index 370c2f9f9bbefbf158f2622a8d816f60fac52269..132d02c3769e30071514e346339bb2579be56fa6 100644 (file)
@@ -75,6 +75,9 @@ void init_tty(tty_t *tty, const char *name, unsigned long base) {
     tty->fg_color = TTY_FG_HIGHLIGHT | TTY_GREEN;  // 高亮
     tty->bg_color = TTY_BLACK;                     // 不闪
 
+    tty->max_x = MAX_X;
+    tty->max_y = MAX_Y;
+
     tty->base_addr = base;
 
     for (int i = 0; i < TTY_VRAM_SIZE; i += 2) {