34 lines
806 B
C
34 lines
806 B
C
// ke_debug.c - debugging utilities
|
|
#include <stdarg.h>
|
|
#include <stdint.h>
|
|
#include <string.h>
|
|
#include <hal_api.h>
|
|
#include <ke_spinlock.h>
|
|
#include <printf.h>
|
|
int _fltused; // fuckass
|
|
|
|
int gDebugEnabled = 0;
|
|
void (*PrintChar)(char, uint32_t, uint32_t);
|
|
|
|
void kernel_putchar(char c) {
|
|
PrintChar(c, 0x00FF00, 0x000000);
|
|
}
|
|
|
|
__declspec(dllexport) void DbgPrint(const char* fmt, ...) {
|
|
if (!gDebugEnabled) return;
|
|
|
|
static SPINLOCK sl = {0};
|
|
uintptr_t flags = KeAcquireSpinlock(&sl);
|
|
va_list va;
|
|
va_start(va, fmt);
|
|
vprintf(fmt, va);
|
|
va_end(va);
|
|
KeReleaseSpinlock(&sl, flags);
|
|
}
|
|
|
|
void KeInitDebug(void (*PrintPtr)(char, uint32_t, uint32_t), int v) {
|
|
gDebugEnabled = v;
|
|
PrintChar = PrintPtr;
|
|
printf_set_putchar(kernel_putchar);
|
|
}
|