1.6 KiB
Concepts you may want to Google beforehand: CPU timer, keyboard interrupts, scancode
Goal: Implement our first IRQ handlers: the CPU timer and the keyboard
Everything is now ready to test our hardware interrupts.
Timer
The timer is easy to configure. First we'll declare an init_timer()
on cpu/timer.h
and
implement it on cpu/timer.c
. It is just a matter of computing the clock frequency and
sending the bytes to the appropriate ports.
We will now fix kernel/utils.c int_to_ascii()
to print the numbers in the correct order.
For that, we need to implement reverse()
and strlen()
.
Finally, go back to the kernel/kernel.c
and do two things. Enable interrupts again
(very important!) and then initialize the timer interrupt.
Go make run
and you'll see the clock ticking!
Keyboard
The keyboard is even easier, with a drawback. The PIC does not send us the ASCII code for the pressed key, but the scancode for the key-down and the key-up events, so we will need to translate those.
Check out drivers/keyboard.c
where there are two functions: the callback and
the initialization which configures the interrupt callback. A new keyboard.h
was
created with the definitions.
keyboard.c
also has a long table to translate scancodes to ASCII keys. For the time
being, we will only implement a simple subset of the US keyboard. You can read
more about scancodes here
I don't know about you, but I'm thrilled! We are very close to building a simple shell. In the next chapter, we will expand a little bit on keyboard input