kernel_main.c 1.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263
  1. #include <kernel_main.h>
  2. #include <asm/boot.h>
  3. #include <asm/port_io.h>
  4. #include <kernel/hw/keyboard.h>
  5. #include <kernel/interrupt.h>
  6. #include <kernel/mem.h>
  7. #include <kernel/stdio.h>
  8. #include <kernel/vga.h>
  9. void kernel_main(void)
  10. {
  11. MAKE_BREAK_POINT();
  12. uint32_t result;
  13. result = check_a20_on();
  14. if (result) {
  15. vga_printk("A20 is ON\n", 0x0fU);
  16. } else {
  17. vga_printk("A20 is NOT ON\n", 0x0fU);
  18. }
  19. uint32_t mem_size = 0;
  20. mem_size += 1024 * asm_mem_size_info.n_1k_blks;
  21. mem_size += 64 * 1024 * asm_mem_size_info.n_64k_blks;
  22. char buf[128] = { 0 };
  23. snprintf(buf, 128, "Memory size: %d bytes (%d MB), 16k blocks: %d, 64k blocks: %d\n",
  24. mem_size, mem_size / 1024 / 1024, (int32_t)asm_mem_size_info.n_1k_blks,
  25. (int32_t)asm_mem_size_info.n_64k_blks);
  26. vga_printk(buf, 0x0fu);
  27. vga_printk("Initializing interrupt descriptor table...\n", 0x0fu);
  28. init_idt();
  29. vga_printk("Interrupt descriptor table initialized!\n", 0x0fu);
  30. vga_printk("Initializing heap space\n", 0x0fu);
  31. init_heap();
  32. vga_printk("Heap space initialized!\n", 0x0fu);
  33. vga_printk("Testing k_malloc...\n", 0x0fu);
  34. char* k_malloc_buf = (char*)k_malloc(sizeof(char) * 128);
  35. snprintf(k_malloc_buf, 128, "This text is printed on the heap!\n");
  36. vga_printk(k_malloc_buf, 0x0fu);
  37. k_free(k_malloc_buf);
  38. vga_printk("No work to do, halting...\n", 0x0fU);
  39. while (1) {
  40. // disable interrupt
  41. asm_cli();
  42. if (keyboard_has_data()) {
  43. process_keyboard_data();
  44. }
  45. asm_sti();
  46. asm_hlt();
  47. }
  48. }