diff --git a/paw/stos/head/ke/bpal.h b/paw/stos/head/ke/bpal.h index 0575881..f7bcb95 100644 --- a/paw/stos/head/ke/bpal.h +++ b/paw/stos/head/ke/bpal.h @@ -97,6 +97,11 @@ VOID KeBpalInit(VOID); */ VOID KeBpalGetHandle(BPAL_HANDLE *Result); +/* + * Returns true if the BPAL is initialized + */ +BOOLEAN KeBpalIsInit(VOID); + /* * Obtain the kernel load virtual memory base */ diff --git a/paw/stos/head/ke/knot.h b/paw/stos/head/ke/knot.h index aa99eb4..4663d4e 100644 --- a/paw/stos/head/ke/knot.h +++ b/paw/stos/head/ke/knot.h @@ -14,12 +14,14 @@ /* * Valid knot reasons * - * @KNOT_MISC: Misc. reason - * @KNOT_UNBOUND_RSRC: Unbounded resource + * @KNOT_MISC: Misc. reason + * @KNOT_UNBOUND_RSRC: Unbounded resource + * @KNOT_BAD_BOOT_PROTO: Bad boot protocol */ typedef enum { KNOT_MISC, - KNOT_UNBOUND_RSRC + KNOT_UNBOUND_RSRC, + KNOT_BAD_BOOT_PROTO } KNOT_REASON; /* diff --git a/paw/stos/ke/bpal/bpal.c b/paw/stos/ke/bpal/bpal.c index d64b4e5..57a9551 100644 --- a/paw/stos/ke/bpal/bpal.c +++ b/paw/stos/ke/bpal/bpal.c @@ -7,6 +7,7 @@ */ #include +#include #include #include @@ -17,6 +18,7 @@ #endif /* !_BOOT_PROTO */ static BPAL_HANDLE BpalHandle; +static BOOLEAN IsInit = false; VOID KeBpalGetHandle(BPAL_HANDLE *Result) @@ -28,6 +30,12 @@ KeBpalGetHandle(BPAL_HANDLE *Result) *Result = BpalHandle; } +BOOLEAN +KeBpalIsInit(VOID) +{ + return IsInit; +} + VOID KeBpalInit(VOID) { @@ -37,9 +45,14 @@ KeBpalInit(VOID) case 'l': if (RtlMemCmp(BootProto, "limine", 6) == 0) { KeBpalLimineInit(&BpalHandle); + IsInit = true; return; } } - /* TODO: PANIC HERE */ + KeKnot( + KNOT_BAD_BOOT_PROTO, + "got bad boot protocol '%s'\n", + BootProto + ); } diff --git a/paw/stos/ke/knot.c b/paw/stos/ke/knot.c index f5390f4..13611a7 100644 --- a/paw/stos/ke/knot.c +++ b/paw/stos/ke/knot.c @@ -7,6 +7,7 @@ */ #include +#include #include #include @@ -18,7 +19,8 @@ /* Reason lookup table */ static const CHAR *ReasonTable[] = { [KNOT_MISC] = "unspecified reason", - [KNOT_UNBOUND_RSRC] = "unbounded resource" + [KNOT_UNBOUND_RSRC] = "unbounded resource", + [KNOT_BAD_BOOT_PROTO] = "bad boot protocol" }; /* Globals */ @@ -40,7 +42,10 @@ KiKnot(KNOT_REASON Reason, const CHAR *Fmt, ...) { va_start(Ap, Fmt); FmtPrintf(KnotBuf, sizeof(KnotBuf), Fmt, Ap); - BootVidInitCons(&KnotAttr); + + if (KeBpalIsInit()) { + BootVidInitCons(&KnotAttr); + } TRACE("\033[H\033[2J"); TRACE(KnotMessage);