After I learned programming I was asking myself, how to write code on the lowest level. There had to be a way to execute code without an Operating System. I wanted to know how the hardware is really programmed. How to read from HD? How to access PCI cards? How is all this working together. And how is everything connected electrically? What, if I only have the hardware but no mainboard or any software?
So it was interessted and began to learn digital electronics and microcontroller for hardware, and learning programming an os for the software part. The electronic side is finished now. I know most about it and the rest I can learn myself or search for in the internet. I designed a CPU in a FPGA, I designed circuit boards and realized a "Happy Brithday" playback device, Temperature sensor, using displays, generating VGA signals, programming microcontrollers and, the most important thing, how to read datasheets. (manual for electronic things, mostly digital ICs)
I know about signal delay and the problems of high frequency, etc.
Now I want to programm the hardware directly. I want to control the graphics card and display text and images, read and write from and to harddisk, cdrom, memory... I want to program a Filesystem and enumerate the PCI bus... and so on.
My goal is a small console which can run programs (compiled with gcc). The programs should be able to get fully access to the hardware, so I can quickly try and test things. But to run programs I need more things and a stable specified environment. So I decided to create a small OS for this purpose.
I like what I've learned and what I am still learning on the way there. Today I use Grub to boot a multiboot compatible kernel that uses Paging and Interrupts. One Timer is used for the minimalistic Scheduler and another one for updating the system time via RTC/CMOS. I have a fully working physical and virtual memory manager and I am able to create new threads in kernel or user space.
In future I will program the APIC, VGA, PCI, CDRom, Harddisk, Sound, Filesystem and a console. The exact list of what is planned is on my computer at home.
Next thing is to extend the Scheduler and extend system calls for process handling. And that's were... lets say I lack of motivation in the past half year. After that I plan to implement VGA and PCI. But first I need to wait until I get motivated.
-------------------
Or to say all this in one sentence: I started programming an OS for educational and entertainment purpose.
