diff --git a/src/kernel/arch_i386/interrupts.c b/src/kernel/arch_i386/interrupts.c index a8f6a6e..a41b6e3 100644 --- a/src/kernel/arch_i386/interrupts.c +++ b/src/kernel/arch_i386/interrupts.c @@ -119,6 +119,26 @@ void kernel_panic(char *message, cpu_registers_t *regs){ void install_irq_handler(void (*handler)(), uint8_t irqno){ interrupt_handlers[irqno] = handler; } +void pit_reload(uint8_t mode, uint16_t reload){ + const uint16_t PIT_CMD = 0x43; + const uint16_t PIT_DATA = 0x40; + outb(PIT_CMD, 0b00110000 + mode); //channel 0, low/high byte, rate generator mode + + outb(PIT_DATA, reload >> 8); + outb(PIT_DATA, reload & 0xff); + return; +} +void pit_init(uint32_t freq){ + uint32_t reload_value = 0x10000; + if(freq <= 18){ + pit_reload(0b100, reload_value); + } + if(freq >= 1193181){ + pit_reload(0b100, reload_value >> 16); + } + reload_value = ((3579545 * 256)/(3 * 256))/(freq); + pit_reload(0b100, reload_value); +} void idt_load(){ // for(uint32_t i = 0; i < 32; i++){ @@ -169,6 +189,8 @@ void idt_load(){ for(int i = 0; i < 16; i++){ interrupt_handlers[i] = 0; } + + pit_init(1193181); // asm volatile("lidt (%0)" : : "m"(&idt_desc)); // outb(0x20, 0x11 ); // outb(0xa0, 0x11); diff --git a/src/kernel/kmain.c b/src/kernel/kmain.c index e651480..44121ab 100644 --- a/src/kernel/kmain.c +++ b/src/kernel/kmain.c @@ -36,8 +36,6 @@ extern void kmain(kernel_info_t *kernel_info){ fcreate("/dev", VFILE_DIRECTORY, kmalloc(1), 1); fcreate("/tmp", VFILE_DIRECTORY, kmalloc(1), 1); - vfile_t *file = fopen("/dev"); - printf("%x", file); mlog("KERNEL", "Initializing Scheduler & starting PID 1\n", MLOG_PRINT); boot_info = kernel_info; scheduler_init(); diff --git a/src/kernel/system/scheduler.c b/src/kernel/system/scheduler.c index e5defd7..9c2ad8e 100644 --- a/src/kernel/system/scheduler.c +++ b/src/kernel/system/scheduler.c @@ -30,7 +30,7 @@ void scheduler_init(){ install_irq_handler(schedule, 0); // printf("Installing scheduler"); } - +uint32_t timer = 0; cpu_registers_t *schedule(cpu_registers_t *regs){ // if(queue_length == 0){ // return regs; diff --git a/src/kernel/system/vfs.c b/src/kernel/system/vfs.c index 992ca55..aed0f61 100644 --- a/src/kernel/system/vfs.c +++ b/src/kernel/system/vfs.c @@ -174,9 +174,9 @@ vfile_t *fopen(char *name){ if(name[strlen(name) - 1] == '/'){ name[strlen(name) - 1] = 0; } - printf("%s\n", name); + // printf("%s\n", name); char *dir = strtok(name, '/'); - printf("%s", name); + // printf("%s", name); char *tmp = dir; uint32_t filename_offset = 0; vfile_t *current_dir = &root_dir; @@ -185,12 +185,12 @@ vfile_t *fopen(char *name){ dir = tmp; tmpfile = search_dir(tmp, *current_dir); if(!tmpfile){ - printf("not found\n"); + // printf("not found\n"); return 0; } switch(tmpfile->type){ case VFILE_DIRECTORY: - printf("found directory in %s: %s\n", current_dir->name, tmpfile->name); + // printf("found directory in %s: %s\n", current_dir->name, tmpfile->name); current_dir = tmpfile; break; case VFILE_MOUNT: