From 5447eca29c66d2283f536b8b0c3b94c5a73a8801 Mon Sep 17 00:00:00 2001 From: acevest Date: Tue, 24 Sep 2024 23:25:13 +0800 Subject: [PATCH] =?utf8?q?default=20tty=E6=9C=80=E9=A1=B6=E4=B8=8A?= =?utf8?q?=E4=B8=80=E8=A1=8C=E4=BF=9D=E7=95=99=E7=94=A8=E6=9D=A5=E6=98=BE?= =?utf8?q?=E7=A4=BA=E5=86=85=E6=A0=B8=E7=9A=84=E7=89=88=E6=9C=AC=E5=8F=8A?= =?utf8?q?=E7=BC=96=E8=AF=91=E6=97=B6=E9=97=B4=E7=AD=89=E4=BF=A1=E6=81=AF?= MIME-Version: 1.0 Content-Type: text/plain; charset=utf8 Content-Transfer-Encoding: 8bit --- kernel/setup.c | 11 ++++++++++- kernel/tty.c | 10 ++++++---- 2 files changed, 16 insertions(+), 5 deletions(-) diff --git a/kernel/setup.c b/kernel/setup.c index 6bf2142..adffa9d 100644 --- a/kernel/setup.c +++ b/kernel/setup.c @@ -45,6 +45,15 @@ const char *version = "KERNEL v" VERSION " @" BUILDER "]" "\n\n"; +void print_kernel_version() { + // + extern tty_t *const default_tty; + tty_write_at(default_tty, 0, 0, version, (size_t)strlen(version)); + + // + printk(version); +} + void setup_kernel() { printk("sysenter esp mode: %s\n", #if FIXED_SYSENTER_ESP_MODE @@ -87,7 +96,7 @@ void setup_kernel() { detect_cpu(); boot_delay(DEFAULT_BOOT_DELAY_TICKS); - printk(version); + print_kernel_version(); boot_delay(DEFAULT_BOOT_DELAY_TICKS); extern tty_t *const monitor_tty; diff --git a/kernel/tty.c b/kernel/tty.c index f574aeb..370c2f9 100644 --- a/kernel/tty.c +++ b/kernel/tty.c @@ -129,9 +129,11 @@ void tty_do_scroll_up(tty_t *tty) { return; } - // - char *dst = (char *)tty->base_addr; - for (int src = BYTES_PER_LINE; src < (MAX_Y * BYTES_PER_LINE); src++) { + // 如果是default_tty则保留用来显示内核版本及编译时间信息 + const int keep = tty != default_tty ? 0 : BYTES_PER_LINE; + + char *dst = (char *)tty->base_addr + keep; + for (int src = BYTES_PER_LINE + keep; src < (MAX_Y * BYTES_PER_LINE); src++) { *dst++ = *(char *)(tty->base_addr + src); } @@ -260,7 +262,7 @@ void tty_switch(tty_t *tty) { outb(VGA_CRTC_START_ADDR_H, VGA_CRTC_ADDR); outb((offset >> 8) & 0xFF, VGA_CRTC_DATA); outb(VGA_CRTC_START_ADDR_L, VGA_CRTC_ADDR); - outb((offset)&0xFF, VGA_CRTC_DATA); + outb((offset) & 0xFF, VGA_CRTC_DATA); irq_restore(flags); current_tty = tty; -- 2.44.0