From a6bbbe9634e770f30324be5f05f144989a9be48d Mon Sep 17 00:00:00 2001 From: Arjob Mukherjee Date: Sun, 17 Nov 2024 04:20:27 +0530 Subject: [PATCH] Now kdisp*() only defined for non-graphical, debug builds We were writing to VGA text buffer even for graphics builds, which makes no sense. With this change VGA Text related functions are only included for non-graphical, debug builds. Note: * For Graphical, debug builds though kearly_printf will be defined, it will not print anywhere. It will later print to VirtualScreen, but its yet implemented. --- include/kernel.h | 2 ++ src/kernel/kpanic.c | 2 ++ src/kernel/printk.c | 19 ++++++++++++------- src/kernel/x86/CMakeLists.txt | 5 ++++- src/kernel/x86/kernel.c | 7 ++++++- 5 files changed, 26 insertions(+), 9 deletions(-) diff --git a/include/kernel.h b/include/kernel.h index b84ab83..d6c65d4 100644 --- a/include/kernel.h +++ b/include/kernel.h @@ -16,7 +16,9 @@ typedef struct KernelStateInfo { enum { KERNEL_PHASE_STATE_BOOT_COMPLETE = 0, +#if defined(DEBUG) && !defined(GRAPHICS_MODE_ENABLED) KERNEL_PHASE_STATE_TEXTDISP_READY, +#endif KERNEL_PHASE_STATE_PMM_READY, KERNEL_PHASE_STATE_SALLOC_READY, KERNEL_PHASE_STATE_VMM_READY, diff --git a/src/kernel/kpanic.c b/src/kernel/kpanic.c index df0b7b3..a505957 100644 --- a/src/kernel/kpanic.c +++ b/src/kernel/kpanic.c @@ -64,7 +64,9 @@ void kpanic_ndu (UINT line, const CHAR* file, const CHAR* fmt, ...) #ifdef DEBUG kdebug_printf ("%s", buffer); + #ifndef GRAPHICS_MODE_ENABLED kearly_printf (buffer); + #endif #endif k_halt(); diff --git a/src/kernel/printk.c b/src/kernel/printk.c index 33e847d..a0ce355 100644 --- a/src/kernel/printk.c +++ b/src/kernel/printk.c @@ -29,13 +29,15 @@ static IntTypes s_readtype (const CHAR **fmt, CHAR *c); static U64 s_readint (IntTypes inttype, va_list *l); #if defined(DEBUG) -static void s_prnstr (const CHAR *str); + #if !defined(GRAPHICS_MODE_ENABLED) +static void s_prnstr (const CHAR* str); -static void s_prnstr (const CHAR *str) +static void s_prnstr (const CHAR* str) { - for (;*str;str++) + for (; *str; str++) kdisp_putc (*str); } + #endif /*************************************************************************************************** * Prints on screen the arguments in the format specified. @@ -50,8 +52,6 @@ static void s_prnstr (const CHAR *str) **************************************************************************************************/ INT kearly_printf (const CHAR *fmt, ...) { - KERNEL_PHASE_VALIDATE(KERNEL_PHASE_STATE_TEXTDISP_READY); - va_list l; va_start (l, fmt); @@ -60,10 +60,15 @@ INT kearly_printf (const CHAR *fmt, ...) va_end (l); - s_prnstr (buffer); + #if !defined(GRAPHICS_MODE_ENABLED) + KERNEL_PHASE_VALIDATE(KERNEL_PHASE_STATE_TEXTDISP_READY); + s_prnstr (buffer); + #else + // TODO: VirtualScreen not yet implemented. + #endif return len; } -#endif +#endif // DEBUG /*************************************************************************************************** * Writes to a string pointer the arguments in the format specified. diff --git a/src/kernel/x86/CMakeLists.txt b/src/kernel/x86/CMakeLists.txt index 5a2ab2f..7185f69 100644 --- a/src/kernel/x86/CMakeLists.txt +++ b/src/kernel/x86/CMakeLists.txt @@ -9,9 +9,12 @@ set(KERNEL_X86_SOURCES ${CMAKE_CURRENT_SOURCE_DIR}/process.c ${CMAKE_CURRENT_SOURCE_DIR}/syscalls.c ${CMAKE_CURRENT_SOURCE_DIR}/tss.c - ${CMAKE_CURRENT_SOURCE_DIR}/vgadisp.c ) + if (MOS_BUILD_MODE STREQUAL "DEBUG" AND NOT MOS_GRAPHICS_ENABLED) + LIST(APPEND KERNEL_X86_SOURCES ${CMAKE_CURRENT_SOURCE_DIR}/vgatext.c) + endif() + compile_lib( NAME kernel_X86 SOURCES ${KERNEL_X86_SOURCES} diff --git a/src/kernel/x86/kernel.c b/src/kernel/x86/kernel.c index ce268fe..c4eb370 100644 --- a/src/kernel/x86/kernel.c +++ b/src/kernel/x86/kernel.c @@ -62,8 +62,11 @@ void kernel_main () FUNC_ENTRY(); KERNEL_PHASE_SET(KERNEL_PHASE_STATE_BOOT_COMPLETE); + +#if defined(DEBUG) && !defined(GRAPHICS_MODE_ENABLED) // Initialize Text display - kdisp_init (); + kdisp_init(); +#endif // Initilaize Physical Memory Manger kpmm_init (); @@ -148,9 +151,11 @@ void kernel_main () KERNEL_PHASE_SET(KERNEL_PHASE_STATE_KERNEL_READY); kearly_printf ("\r[OK]"); +#if defined(DEBUG) && !defined(GRAPHICS_MODE_ENABLED) kdisp_ioctl (DISP_SETATTR,k_dispAttr (BLACK,GREEN,0)); kearly_println ("Kernel initialization finished.."); kdisp_ioctl (DISP_SETATTR,k_dispAttr (BLACK,LIGHT_GRAY,0)); +#endif //--------------- int cpuflags_present = 0;