Skip to content

Commit 6240e61

Browse files
authored
Merge pull request #40 from kushagra765/0.07
Added PIT Driver
2 parents c47b548 + 2214458 commit 6240e61

File tree

4 files changed

+32
-2
lines changed

4 files changed

+32
-2
lines changed

build.sh

+2-1
Original file line numberDiff line numberDiff line change
@@ -22,13 +22,14 @@ nasm -f elf32 ./kernel/cpu/load_isr.asm -o load_isr.o
2222
i686-elf-gcc -I./kernel/include/ -I./kernel/drivers/ -c ./kernel/cpu/isr.c -o isr.o
2323
nasm -f elf32 ./kernel/cpu/load_irq.asm -o load_irq.o
2424
i686-elf-gcc -I./kernel/include/ -c ./kernel/cpu/irq.c -o irq.o
25+
i686-elf-gcc -I./kernel/ -I./kernel/include/ -c ./kernel/drivers/pit/pit.c -o pit.o
2526
i686-elf-gcc -I./kernel/drivers/ -c ./kernel/system/panic.c -o panic.o
2627
i686-elf-gcc -I./kernel/include/ -I./kernel/drivers/ -c ./kernel/system/memory.c -o memory.o
2728
i686-elf-gcc -I./kernel/drivers/ -I./kernel/system/ -I./kernel/include/ -c ./kernel/system/vtconsole.c -o vtconsole.o
2829
i686-elf-gcc -I./kernel/include/ -I./kernel/drivers/ -c ./kernel/fs/vfs/vfs.c -o vfs.o
2930

3031

31-
i686-elf-gcc -T ./kernel/arch/i386/linker.ld -o PlatypusOS.bin -ffreestanding -O2 -nostdlib boot.o vga.o keyboard.o ports.o gdt.o load_gdt.o idt.o load_idt.o isr.o load_isr.o irq.o load_irq.o panic.o memory.o vtconsole.o vfs.o main.o
32+
i686-elf-gcc -T ./kernel/arch/i386/linker.ld -o PlatypusOS.bin -ffreestanding -O2 -nostdlib boot.o vga.o keyboard.o ports.o gdt.o load_gdt.o idt.o load_idt.o isr.o load_isr.o irq.o load_irq.o pit.o panic.o memory.o vtconsole.o vfs.o main.o
3233

3334
# After linking everything, remove the object files
3435
rm *.o

init/main.c

+4-1
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
#include <vga/vga.h>
22
#include <keyboard/keyboard.h>
33
#include <system/vtconsole.h>
4+
#include <pit/pit.h>
45
#include <vfs.h>
56
#include <gdt.h>
67
#include <idt.h>
@@ -25,6 +26,8 @@ void kernel_main() {
2526
writestr("[OK] Load ISR\n");
2627
init_irq();
2728
writestr("[OK] Load IRQ\n");
29+
writestr("[OK] Load PIT\n");
30+
init_timer(50);
2831

2932
/* Load Drivers */
3033
init_keyboard();
@@ -42,4 +45,4 @@ void kernel_main() {
4245
settextcolor(COLOR_WHITE, COLOR_BLACK);
4346
writestr("Hi! There's not much to do yet, but come back later for more stuff!\n");
4447
writestr("user@kernel: ");
45-
}
48+
}

kernel/drivers/pit/pit.c

+19
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
#include "pit.h"
2+
#include <cpu/irq.h>
3+
#include <kernel/ports.h>
4+
5+
int kernel_timer_ticks = 0;
6+
7+
void handler_timer() {
8+
kernel_timer_ticks++;
9+
}
10+
11+
void init_timer(int frequency) {
12+
13+
install_irq_handler(0, handler_timer);
14+
int divisor = 1193180 / frequency;
15+
16+
outp(0x43, 0x36);
17+
outp(0x40, frequency & 0xFF);
18+
outp(0x40, frequency >> 8);
19+
}

kernel/drivers/pit/pit.h

+7
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
#ifndef _PIT_H
2+
#define _PIT_H
3+
4+
void handler_timer();
5+
void init_timer(int frequency);
6+
7+
#endif //_PIT_H

0 commit comments

Comments
 (0)