2015-08-17 16:41:38 +00:00
|
|
|
#include "../cpu/isr.h"
|
|
|
|
#include "../drivers/screen.h"
|
|
|
|
#include "kernel.h"
|
|
|
|
#include "../libc/string.h"
|
|
|
|
#include "../libc/mem.h"
|
2015-08-18 08:31:28 +00:00
|
|
|
#include <stdint.h>
|
2015-08-17 16:41:38 +00:00
|
|
|
|
2015-08-18 08:14:06 +00:00
|
|
|
void kernel_main() {
|
2015-08-17 16:41:38 +00:00
|
|
|
isr_install();
|
|
|
|
irq_install();
|
|
|
|
|
2015-08-28 08:52:05 +00:00
|
|
|
asm("int $2");
|
|
|
|
asm("int $3");
|
|
|
|
|
2015-08-17 16:41:38 +00:00
|
|
|
kprint("Type something, it will go through the kernel\n"
|
|
|
|
"Type END to halt the CPU or PAGE to request a kmalloc()\n> ");
|
|
|
|
}
|
|
|
|
|
|
|
|
void user_input(char *input) {
|
|
|
|
if (strcmp(input, "END") == 0) {
|
|
|
|
kprint("Stopping the CPU. Bye!\n");
|
|
|
|
asm volatile("hlt");
|
|
|
|
} else if (strcmp(input, "PAGE") == 0) {
|
|
|
|
/* Lesson 22: Code to test kmalloc, the rest is unchanged */
|
2015-08-18 08:31:28 +00:00
|
|
|
uint32_t phys_addr;
|
|
|
|
uint32_t page = kmalloc(1000, 1, &phys_addr);
|
2015-08-17 16:41:38 +00:00
|
|
|
char page_str[16] = "";
|
|
|
|
hex_to_ascii(page, page_str);
|
|
|
|
char phys_str[16] = "";
|
|
|
|
hex_to_ascii(phys_addr, phys_str);
|
|
|
|
kprint("Page: ");
|
|
|
|
kprint(page_str);
|
|
|
|
kprint(", physical address: ");
|
|
|
|
kprint(phys_str);
|
|
|
|
kprint("\n");
|
|
|
|
}
|
|
|
|
kprint("You said: ");
|
|
|
|
kprint(input);
|
|
|
|
kprint("\n> ");
|
|
|
|
}
|