kernel_main.c 1.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142
  1. #include <kernel_main.h>
  2. #include <asm/boot.h>
  3. #include <kernel/interrupt.h>
  4. #include <kernel/mem.h>
  5. #include <kernel/stdio.h>
  6. #include <kernel/vga.h>
  7. void kernel_main(void)
  8. {
  9. MAKE_BREAK_POINT();
  10. uint32_t result;
  11. result = check_a20_on();
  12. if (result) {
  13. vga_printk("A20 is ON\n", 0x0fU);
  14. } else {
  15. vga_printk("A20 is NOT ON\n", 0x0fU);
  16. }
  17. uint32_t mem_size = 0;
  18. mem_size += 1024 * asm_mem_size_info.n_1k_blks;
  19. mem_size += 64 * 1024 * asm_mem_size_info.n_64k_blks;
  20. char buf[128] = { 0 };
  21. snprintf(buf, 128, "Memory size: %d bytes (%d MB), 16k blocks: %d, 64k blocks: %d\n",
  22. mem_size, mem_size / 1024 / 1024, (int32_t)asm_mem_size_info.n_1k_blks,
  23. (int32_t)asm_mem_size_info.n_64k_blks);
  24. vga_printk(buf, 0x0fu);
  25. vga_printk("Initializing interrupt descriptor table...\n", 0x0fu);
  26. init_idt();
  27. vga_printk("Interrupt descriptor table initialized!\n", 0x0fu);
  28. vga_printk("No work to do, halting...\n", 0x0fU);
  29. _loop:
  30. asm("hlt");
  31. goto _loop;
  32. }