#include "string.h" #include "console.h" #include "memory.h" #include "floppy.h" #include "irq.h" #include "process.h" #include "fileobj.h" #include "types.h" void init(); // Multiboot flags #define MB_MEM_VALID 1 typedef struct { unsigned int flags; unsigned int mem_lower; unsigned int mem_upper; // ... } multiboot_info_t; extern unsigned int multiboot_magic; extern multiboot_info_t *multiboot_info; struct process_item init_proc; void halt() { __asm__("cli"); __asm__("hlt"); } int kebab_read(struct file_object *fo, void *buffer, size_t n) { char *p = buffer; char *kebab = "kebab"; int i = 0; for (; n > 0; n--, p++) { *p = kebab[i]; i = (i + 1) % 5; } } struct fops kebab_fops = { .read = &kebab_read, }; struct file_object kebab_fo; int main() { char buffer[256]; clrscr(); printf("LumpiOS v 1e-16 entry point\n\n"); if (multiboot_magic != 0x2BADB002) { panic("Borked multiboot magic!! Something is wrong..."); } if (!(multiboot_info->flags & MB_MEM_VALID)) { panic("Bootloader forgot to give us memory info :E"); } memory_init((multiboot_info->mem_lower + multiboot_info->mem_upper) * 1024); irq_init(); // floppy_init(); console_init(); keyboard_init(); fileobj_init(&kebab_fo); kebab_fo.fops = &kebab_fops; devfs_register_device("kebab", &kebab_fo); // cli(); process_init(&init_proc, (unsigned int)&init); context_init(&init_proc.cx); cur_proc = &init_proc; cur_cx = &cur_proc->cx; cur_proc->next = cur_proc; cur_proc->prev = cur_proc; internal_init_process(&init_proc); num_processes++; // printf("cr3 was 0x%x\n", cur_cx->pd); // printf(" Shhoasdasasdoop 0x%x\n", cur_cx->pd); set_cr3(cur_cx->pd); }