Sounds great - cant wait for tutorial 17.
As for tutorial 16, I have a few comments.
In the Hal files for the PIT and PIC, you use a huge number of define statements and pass data between functions as integers.
Purely as mechanism to prevent stupid errors (partly because no programmer is immune to them; certainly not me, and because stupid errors will really mess a kernel up if not realized), wouldn't it be better to pass all the constants as part of enumerations? This would have the advantage that, if someone decided that they wanted to pass a number, not a specific element of an enumeration, they would have to explicitly cast it. This means that if they didn't intend to, the possible error would be caught at compile time rather than knowing there was a bug somewhere in the huge mass of code if the kernel crashed.
On a different note, I realize that you are trying to write the kernel to be both C and C++ compatible but what is the point of having C++ compatibility without using its Object Orientated design?
For my kernel, I am not trying to have the C compatibility. Everything I can is implemented as classes, using as much of the 'hide as much of the innards as possible' so the programmer doesn't need to, nor has access to, the inner workings (also along the Pandora's box idea from one of the earlier tutorials).
And on a complete side note, I would like to thank you for everything you have done on the OS development series. Because of my interest (which is a result of finding this site

), I now have an interview to work at a company called Symbian in which, if I get a job, I will be doing something very akin to this for top of the range mobile phones.
Andrew