summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--kernel/drivers/pit.c14
-rw-r--r--kernel/init/kernel.c2
-rwxr-xr-xmeta/run.sh3
3 files changed, 13 insertions, 6 deletions
diff --git a/kernel/drivers/pit.c b/kernel/drivers/pit.c
index 1e9048f..060fc54 100644
--- a/kernel/drivers/pit.c
+++ b/kernel/drivers/pit.c
@@ -4,7 +4,8 @@
#define PIT_IO_MODE_COMMAND 0x43
u64 clock_num_ms_ticks = 0;
-u64 pit_counter = 0;
+u32 pit_counter = 0;
+u32 switch_counter = 0;
u16 hertz;
u64 pit_num_ms(void) {
@@ -22,7 +23,8 @@ u16 read_pit_count(void) {
return count;
}
-void set_pit_count(u16 hertz) {
+void set_pit_count(u16 _hertz) {
+ hertz = _hertz;
u16 divisor = 1193180 / hertz;
/*
@@ -44,9 +46,13 @@ void set_pit_count(u16 hertz) {
void int_clock(reg_t regs) {
outb(0x20, 0x20);
pit_counter++;
- if (pit_counter*1000 >= hertz) {
+ if (pit_counter * 1000 >= hertz) {
pit_counter = 0;
- clock_num_ms_ticks++;
+ clock_num_ms_ticks += 1000 / hertz;
+ }
+ switch_counter++;
+ if (switch_counter * 500 >= hertz) {
+ switch_counter = 0;
switch_task();
}
}
diff --git a/kernel/init/kernel.c b/kernel/init/kernel.c
index 6b160a6..55c65b2 100644
--- a/kernel/init/kernel.c
+++ b/kernel/init/kernel.c
@@ -67,7 +67,7 @@ void kernel_main(u32 kernel_end, unsigned long magic, unsigned long addr,
klog("Syscalls Initalized", LOG_SUCCESS);
pit_install();
- set_pit_count(500);
+ set_pit_count(100);
klog("PIT driver installed", LOG_SUCCESS);
ata_init();
diff --git a/meta/run.sh b/meta/run.sh
index 6cf1787..9231f14 100755
--- a/meta/run.sh
+++ b/meta/run.sh
@@ -2,7 +2,8 @@
scriptdir="$(dirname "$0")"
cd "$scriptdir"
cd ..
-qemu-system-i386 -netdev user,id=n0,hostfwd=tcp:127.0.0.1:6001-:6000 -device rtl8139,netdev=n0 -object filter-dump,id=id,netdev=n0,file=./logs/netout -d int -no-reboot -no-shutdown -chardev stdio,id=char0,logfile=./logs/serial.log,signal=off -serial chardev:char0 -drive id=disk,file=./meta/ext2.img,if=none -device ahci,id=ahci -device ide-hd,drive=disk,bus=ahci.0 -m 512M -cdrom ./kernel/myos.iso -s
+#qemu-system-i386 -netdev user,id=n0,hostfwd=tcp:127.0.0.1:6001-:6000 -device rtl8139,netdev=n0 -object filter-dump,id=id,netdev=n0,file=./logs/netout -d int -no-reboot -no-shutdown -chardev stdio,id=char0,logfile=./logs/serial.log,signal=off -serial chardev:char0 -drive id=disk,file=./meta/ext2.img,if=none -device ahci,id=ahci -device ide-hd,drive=disk,bus=ahci.0 -m 512M -cdrom ./kernel/myos.iso -s
+qemu-system-i386 -netdev user,id=n0,hostfwd=tcp:127.0.0.1:6001-:6000 -device rtl8139,netdev=n0 -object filter-dump,id=id,netdev=n0,file=./logs/netout -no-reboot -no-shutdown -chardev stdio,id=char0,logfile=./logs/serial.log,signal=off -serial chardev:char0 -drive id=disk,file=./meta/ext2.img,if=none -device ahci,id=ahci -device ide-hd,drive=disk,bus=ahci.0 -m 512M -cdrom ./kernel/myos.iso -s
# Sync the sysroot
cd ./meta/
mkdir ./mount