diff --git a/include/sys/amd64/hw/con.h b/include/sys/amd64/hw/con.h index 1380509..3d6f99c 100644 --- a/include/sys/amd64/hw/con.h +++ b/include/sys/amd64/hw/con.h @@ -1,3 +1,4 @@ #pragma once void amd64_con_putc(int c); +void amd64_con_init(void); diff --git a/include/sys/string.h b/include/sys/string.h index e0775eb..3e61306 100644 --- a/include/sys/string.h +++ b/include/sys/string.h @@ -11,6 +11,7 @@ void *memcpy(void *restrict dst, const void *restrict src, size_t cnt); void *memmove(void *dst, const void *src, size_t cnt); void *memset(void *dst, int v, size_t count); +uint16_t *memsetw(uint16_t *dst, uint16_t v, size_t count); int memcmp(const void *a, const void *b, size_t count); size_t strlen(const char *s); diff --git a/sys/amd64/hw/con.c b/sys/amd64/hw/con.c index b0a314a..400628c 100644 --- a/sys/amd64/hw/con.c +++ b/sys/amd64/hw/con.c @@ -8,6 +8,8 @@ #define ESC_ESC 1 #define ESC_CSI 2 +#define ATTR_DEFAULT 0x1700 + static uint16_t *con_buffer = (uint16_t *) (0xB8000 + 0xFFFFFF0000000000); static uint16_t x = 0, y = 0; static uint16_t saved_x = 0, saved_y = 0; @@ -18,7 +20,7 @@ static uint32_t esc_argv[8]; static size_t esc_argc; static char esc_letter = 0; static int esc_mode = 0; -static uint16_t attr = 0x700; +static uint16_t attr = ATTR_DEFAULT; static void amd64_con_moveto(uint8_t row, uint8_t col) { uint16_t pos = row * 80 + col; @@ -34,7 +36,7 @@ static void amd64_con_scroll(void) { for (int i = 0; i < 22; ++i) { memcpy(&con_buffer[i * 80], &con_buffer[(i + 1) * 80], 80 * 2); } - memset(&con_buffer[22 * 80], 0, 80 * 2); + memsetw(&con_buffer[22 * 80], ATTR_DEFAULT, 80); y = 22; } } @@ -51,7 +53,7 @@ static void process_csi(void) { switch (v % 10) { case 0: // Reset - attr = 0x700; + attr = ATTR_DEFAULT; break; } break; @@ -194,3 +196,7 @@ void amd64_con_putc(int c) { break; } } + +void amd64_con_init(void) { + memsetw(con_buffer, attr, 80 * 25); +} diff --git a/sys/amd64/kernel.c b/sys/amd64/kernel.c index 83177ae..0453759 100644 --- a/sys/amd64/kernel.c +++ b/sys/amd64/kernel.c @@ -12,6 +12,7 @@ #include "sys/amd64/hw/rs232.h" #include "sys/amd64/hw/ps2.h" #include "sys/amd64/hw/rtc.h" +#include "sys/amd64/hw/con.h" #include "sys/panic.h" #include "sys/assert.h" #include "sys/fs/vfs.h" @@ -37,6 +38,7 @@ void kernel_main(struct amd64_loader_data *data) { amd64_idt_init(); amd64_mm_init(data); amd64_acpi_init(); + amd64_con_init(); amd64_apic_init(); rtc_init(); diff --git a/sys/string.c b/sys/string.c index 33763c4..8c36c18 100644 --- a/sys/string.c +++ b/sys/string.c @@ -158,6 +158,13 @@ void *memset(void *blk, int v, size_t sz) { return blk; } +uint16_t *memsetw(uint16_t *blk, uint16_t v, size_t sz) { + for (size_t i = 0; i < sz; ++i) { + blk[i] = v; + } + return blk; +} + void *memcpy(void *dst, const void *src, size_t sz) { for (size_t i = 0; i < sz; ++i) { ((char *) dst)[i] = ((const char *) src)[i]; diff --git a/usr/init.c b/usr/init.c index 959a091..43a273e 100644 --- a/usr/init.c +++ b/usr/init.c @@ -154,7 +154,7 @@ static int cmd_exec(const char *cmd) { } static void prompt(void) { - printf("\033[34;41mygg\033[0m > "); + printf("\033[36mygg\033[0m > "); } int main(int argc, char **argv) {