You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
Carlos 8ad1936237
Fixed warnings
9 years ago
..
cpu lesson 20 finished: timer + keyboard 9 years ago
drivers lesson 21, keyboard input and shell 9 years ago
kernel lesson 20 finished: timer + keyboard 9 years ago
Makefile Fixed warnings 9 years ago
README.md lesson 20 finished: timer + keyboard 9 years ago
boot lesson 20, preliminar 9 years ago

README.md

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