libkernaux/examples/kernel-grub-multiboot2/main.c

48 lines
985 B
C
Raw Normal View History

2022-01-09 03:30:36 +00:00
#include <stdarg.h>
2022-01-09 03:06:03 +00:00
#include <stdint.h>
#include <kernaux/asm/i386.h>
#include <kernaux/drivers/console.h>
#include <kernaux/multiboot2.h>
2022-01-09 03:30:36 +00:00
#include <kernaux/printf.h>
2022-01-09 03:06:03 +00:00
void halt();
static void panic(const char *str);
2022-01-09 03:30:36 +00:00
static void printf(const char *format, ...);
2022-01-09 03:06:03 +00:00
void main(
const uint32_t multiboot2_magic,
const struct KernAux_Multiboot2 *const multiboot2_info
) {
if (multiboot2_magic != KERNAUX_MULTIBOOT2_MAGIC) {
panic("Multiboot 2 magic number is invalid");
}
if (!KernAux_Multiboot2_is_valid(multiboot2_info)) {
panic("Multiboot 2 info is invalid");
}
2022-01-09 03:40:55 +00:00
KernAux_Multiboot2_print(multiboot2_info, printf);
2022-01-09 03:06:03 +00:00
}
void halt()
{
panic("Kernel main function returned");
}
void panic(const char *const str)
{
2022-01-09 03:30:36 +00:00
printf("panic: %s\n", str);
2022-01-09 03:06:03 +00:00
kernaux_asm_i386_hang();
}
2022-01-09 03:30:36 +00:00
void printf(const char *const format, ...)
{
va_list va;
va_start(va, format);
kernaux_printf_va(kernaux_console_putc, format, va);
va_end(va);
}