c1ad0fc5/1/2026, 8:41:11 PM
~kernel/timer.c
.c
C
(text/x-csrc)
#include <stdint.h>
#include "module.h"
#include "timer.h"

static uint64_t tick_count = 0;

static inline void outb(uint16_t port, uint8_t val) {
    asm volatile ("outb %0, %1" : : "a"(val), "Nd"(port));
}

void timer_init(void) {
    // PIT channel 0, mode 3 (square wave), lobyte/hibyte access
    outb(0x43, 0x36);
    // Frequency: 1193182 Hz / divisor = desired frequency (e.g., 100 Hz)
    uint16_t divisor = 11931; // 1193182 / 100 ≈ 11931
    outb(0x40, divisor & 0xFF);
    outb(0x40, (divisor >> 8) & 0xFF);
}

void timer_irq_handler(void) {
    tick_count++;
    // Could print a dot or update something; for now just increment.
}