oxytoxin

unix-like kernel
git clone git://git.evenfri.xyz/oxytoxin.git
Log | Files | Refs | README | LICENSE

init.c (835B)


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