diff options
-rw-r--r-- | config.h.in | 3 | ||||
-rwxr-xr-x | configure | 14 | ||||
-rw-r--r-- | pk/init.c | 3 | ||||
-rw-r--r-- | pk/logo.c | 51 | ||||
-rw-r--r-- | pk/pk.ac | 5 | ||||
-rw-r--r-- | pk/pk.h | 1 | ||||
-rw-r--r-- | pk/pk.mk.in | 1 |
7 files changed, 78 insertions, 0 deletions
diff --git a/config.h.in b/config.h.in index c23bf16..c15bc0a 100644 --- a/config.h.in +++ b/config.h.in @@ -27,6 +27,9 @@ /* Define if floating-point emulation is enabled */ #undef PK_ENABLE_FP_EMULATION +/* Define if the RISC-V logo is to be displayed */ +#undef PK_ENABLE_LOGO + /* Define if virtual memory support is enabled */ #undef PK_ENABLE_VM @@ -1301,6 +1301,7 @@ Optional Features: --enable-optional-subprojects Enable all optional subprojects --disable-vm Disable virtual memory + --disable-logo Disable boot logo --disable-fp-emulation Disable floating-point emulation --disable-atomics Emulate atomic ops nonatomically @@ -4047,6 +4048,19 @@ $as_echo "#define PK_ENABLE_VM /**/" >>confdefs.h fi +# Check whether --enable-vm was given. +if test "${enable_vm+set}" = set; then : + enableval=$enable_vm; +fi + +if test "x$enable_logo" != "xno"; then : + + +$as_echo "#define PK_ENABLE_LOGO /**/" >>confdefs.h + + +fi + # Check whether --enable-fp-emulation was given. if test "${enable_fp_emulation+set}" = set; then : enableval=$enable_fp_emulation; @@ -93,6 +93,9 @@ uintptr_t boot_loader(struct mainvars* args) if (current.is_supervisor) { supervisor_vm_init(); +#ifdef PK_ENABLE_LOGO + print_logo(); +#endif write_csr(mepc, current.entry); asm volatile("eret"); __builtin_unreachable(); diff --git a/pk/logo.c b/pk/logo.c new file mode 100644 index 0000000..8f868e8 --- /dev/null +++ b/pk/logo.c @@ -0,0 +1,51 @@ +#include <string.h> +#include "file.h" + +#define W 46 +#define D 21 +#define T 5 + +void print_logo() +{ + static const char end[] = "\n INSTRUCTION SETS WANT TO BE FREE\n\n"; + static const char fill[T] = {'r', ' ', 'v', ' ', 'r'}; + static const char logo[D][T] = + {{0, 14, 46, 46, 46}, + {0, 18, 46, 46, 46}, + {13, 20, 46, 46, 46}, + {16, 22, 46, 46, 46}, + {18, 22, 46, 46, 46}, + {18, 22, 46, 46, 46}, + {18, 22, 46, 46, 46}, + {16, 22, 44, 46, 46}, + {13, 20, 42, 46, 46}, + {2, 18, 40, 46, 46}, + {2, 14, 38, 44, 46}, + {4, 10, 36, 42, 46}, + {6, 12, 34, 40, 46}, + {8, 14, 32, 38, 46}, + {10, 16, 30, 36, 46}, + {12, 18, 28, 34, 46}, + {14, 20, 26, 32, 46}, + {16, 22, 24, 30, 46}, + {18, 22, 22, 28, 46}, + {20, 20, 20, 26, 46}, + {22, 22, 22, 24, 46}}; + + char result[D*(W+1) + sizeof(end)]; + char* pos = result; + for (size_t i = 0; i < D; i++) { + for (size_t j = 0, p = 0; j < T; j++) { + if (p == logo[i][j]) + continue; + do { + *pos++ = fill[j]; + p++; + } while (p < logo[i][j]); + } + *pos++ = '\n'; + } + memcpy(pos, end, sizeof(end)); + + file_write(stderr, result, (pos - result) + sizeof(end)); +} @@ -3,6 +3,11 @@ AS_IF([test "x$enable_vm" != "xno"], [ AC_DEFINE([PK_ENABLE_VM],,[Define if virtual memory support is enabled]) ]) +AC_ARG_ENABLE([vm], AS_HELP_STRING([--disable-logo], [Disable boot logo])) +AS_IF([test "x$enable_logo" != "xno"], [ + AC_DEFINE([PK_ENABLE_LOGO],,[Define if the RISC-V logo is to be displayed]) +]) + AC_ARG_ENABLE([fp-emulation], AS_HELP_STRING([--disable-fp-emulation], [Disable floating-point emulation])) AS_IF([test "x$enable_fp_emulation" != "xno"], [ AC_DEFINE([PK_ENABLE_FP_EMULATION],,[Define if floating-point emulation is enabled]) @@ -52,6 +52,7 @@ int snprintf(char* out, size_t n, const char* s, ...); void init_tf(trapframe_t*, long pc, long sp, int user64); void start_user(trapframe_t* tf) __attribute__((noreturn)); void dump_tf(trapframe_t*); +void print_logo(); void unhandled_trap(trapframe_t*); void handle_misaligned_load(trapframe_t*); diff --git a/pk/pk.mk.in b/pk/pk.mk.in index 72f4412..3c0b455 100644 --- a/pk/pk.mk.in +++ b/pk/pk.mk.in @@ -24,6 +24,7 @@ pk_c_srcs = \ console.c \ vm.c \ string.c \ + logo.c \ pk_asm_srcs = \ mentry.S \ |