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

59 lines
1.4 KiB
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>
2022-01-09 03:06:03 +00:00
#include <kernaux/multiboot2.h>
2022-01-12 09:40:35 +00:00
void poweroff();
2022-01-09 03:06:03 +00:00
2022-01-14 05:40:51 +00:00
extern const struct KernAux_Multiboot2_Header multiboot2_header;
2022-01-09 03:06:03 +00:00
static void panic(const char *str);
void main(
2022-01-15 11:17:06 +00:00
const uint32_t multiboot2_info_magic,
2022-01-13 04:11:27 +00:00
const struct KernAux_Multiboot2_Info *const multiboot2_info
2022-01-09 03:06:03 +00:00
) {
2022-01-14 05:40:51 +00:00
if (!KernAux_Multiboot2_Header_is_valid(&multiboot2_header)) {
panic("Multiboot 2 header is invalid");
} else {
kernaux_drivers_console_printf("Multiboot 2 header is valid\n");
2022-01-14 05:40:51 +00:00
}
KernAux_Multiboot2_Header_print(
&multiboot2_header,
kernaux_drivers_console_printf
);
2022-01-14 05:40:51 +00:00
2022-01-15 11:17:06 +00:00
if (multiboot2_info_magic != KERNAUX_MULTIBOOT2_INFO_MAGIC) {
panic("Multiboot 2 info magic number is invalid");
2022-01-10 02:24:49 +00:00
} else {
kernaux_drivers_console_printf(
"Multiboot 2 info magic number is valid\n"
);
2022-01-09 03:06:03 +00:00
}
2022-01-13 04:11:27 +00:00
if (!KernAux_Multiboot2_Info_is_valid(multiboot2_info)) {
2022-01-09 03:06:03 +00:00
panic("Multiboot 2 info is invalid");
2022-01-10 02:24:49 +00:00
} else {
kernaux_drivers_console_printf("Multiboot 2 info is valid\n");
2022-01-09 03:06:03 +00:00
}
2022-01-09 03:40:55 +00:00
KernAux_Multiboot2_Info_print(
multiboot2_info,
kernaux_drivers_console_printf
);
2022-01-09 03:06:03 +00:00
}
2022-01-12 09:40:35 +00:00
void poweroff()
2022-01-09 03:06:03 +00:00
{
2022-01-12 09:40:35 +00:00
kernaux_asm_i386_outportw(0x604, 0x2000);
2022-01-09 03:06:03 +00:00
}
void panic(const char *const str)
{
kernaux_drivers_console_printf("panic: %s\n", str);
2022-01-15 10:42:13 +00:00
poweroff();
2022-01-09 03:06:03 +00:00
}