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>
|
|
|
|
|
|
|
|
void halt();
|
|
|
|
|
|
|
|
static void panic(const char *str);
|
|
|
|
|
|
|
|
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");
|
2022-01-10 02:24:49 +00:00
|
|
|
} else {
|
|
|
|
kernaux_console_printf("Multiboot 2 magic number is valid\n");
|
2022-01-09 03:06:03 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
if (!KernAux_Multiboot2_is_valid(multiboot2_info)) {
|
|
|
|
panic("Multiboot 2 info is invalid");
|
2022-01-10 02:24:49 +00:00
|
|
|
} else {
|
|
|
|
kernaux_console_printf("Multiboot 2 info is valid\n");
|
2022-01-09 03:06:03 +00:00
|
|
|
}
|
2022-01-09 03:40:55 +00:00
|
|
|
|
2022-01-10 01:30:40 +00:00
|
|
|
KernAux_Multiboot2_print(multiboot2_info, kernaux_console_printf);
|
2022-01-09 03:06:03 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
void halt()
|
|
|
|
{
|
|
|
|
panic("Kernel main function returned");
|
|
|
|
}
|
|
|
|
|
|
|
|
void panic(const char *const str)
|
|
|
|
{
|
2022-01-10 01:30:40 +00:00
|
|
|
kernaux_console_printf("panic: %s\n", str);
|
2022-01-09 03:06:03 +00:00
|
|
|
kernaux_asm_i386_hang();
|
|
|
|
}
|