init.c (626B)
1 #include "oxytoxin.h" 2 3 size_t read(void *buf, size_t size) { 4 size_t bytes_read; 5 size_t i; 6 char *ptr; 7 8 ptr = (char *)buf; 9 bytes_read = 0; 10 11 for (i = 0; i < size; i++) { 12 ptr[i] = keyboard_read(); 13 bytes_read++; 14 } 15 return bytes_read; 16 } 17 18 void start_kernel(uint32_t magic, multiboot_info_t *mbi) { 19 char c; 20 size_t bytes; 21 22 (void)magic; 23 (void)mbi; 24 25 tty_init(); 26 gdt_init(); 27 idt_init(); 28 pit_init(1000); 29 keyboard_init(); 30 ata_init(); 31 32 asm volatile ("sti"); 33 34 while (1) { 35 bytes = read(&c, 1); 36 37 if (bytes > 0) { 38 tty_write(&c, 1); 39 } else { 40 asm volatile("hlt"); 41 } 42 } 43 }