What's the best attainable level with BonaFide's content?
It's a really good thing to see OS development sites like this not give up for years past and to come.
I have a question I feel is extremely important. In short: What is the most I can expect being able to do after studying and compiling and experimenting with every single bit of tutorial and sample code information contained in BonaFide website sections?
I have tried to learn about operating system development since around November 2004. I started learning assembly language in a DOS/Win9x environment, which took me 6 months to get a basic working level and to understand the basics of protected mode such as the GDT; and bought an AMD Ahlon 64 3000+.
I previously had 3 years of knowing how to program basic things (Visual Basic, a little bit of C, and yet less about assembly; also HTML).
All of the time in between was used to make countless failed kernel attempts, but I learned and used basic information found here and in the Google cache, and a little bit in MegaTokyo, and other interesting miscellaneous pages.
Up to now these are the things I have been able to achieve:
- Create a typical floppy "Hello World!" kernel
- I can read/write memory and I/O ports of 8, 16, 32 and 64 bits, shift and rotate bits and that kind of things in NASM assembly
- I can reprogram the PIC, the PIT, read the CMOS, set up a basic protected mode GDT and IDT, enable A20 the "easy" way, and do a basic scan of the PCI
- Make a kernel to copy the contents of a hard disk to another identical one using PIO and 28-bit LBA
- Modify and cleanup the bootf boot sector to boot a real mode image
- I was able to install the bootr master boot record into a 2GB USB FAT16 memory stick and booted as if it was a hard disk plugged in the USB
- I can enter the most basic Protected Mode, Unreal Mode and Long Mode
- When it comes to paging, I can only barely identity-map memory
- I understand the most basic Portable Executable file structure and can make basic Win32 programs by hand
- I practically understand completely the file format of 16 and 256-color ICO icons with a single image in them
- I can detect ATA/ATAPI devices pretty accurately
- I know how to wait for the NEXT vertical retrace, the NEXT RTC update using a 2-loop algorithm (you get the idea; does anybody know what algorithm I'm talking about? It's like the one from the Tutorial Part 2 from Denthor of Asphyxia for WaitRetrace)
- I can enter 300x200 and 640x480 VGA graphics mode using registers, but I don't understand fully what I'm doing, and I have tried entering ModeX but with no success
- I can load text fonts for 80x25 text mode but I understand much less how the code works
- I can read raw keyboard scan codes and PS/2 mouse data very accurately, but don't understand completely the PS/2 mouse initialization and cannot yet handle it as user inputs
- I don't understand memory management or filesystem algorithms yet
- I created a simple compiler with a C/assembly-mixed language according to the compiler tutorial at BonaFide
- I almost completely translated MenuetOS (FASM?) sources to NASM, but some sections like networking were left disabled because I couldn't translate them
- I currently use Win98/DOS for fast and easy low level tests
- I have fiddled with Bresenham and Bezier algorithms but I don't really understand them even when I've been able to code sample snippets for them using Turbo C
Here is my website so you can see what practical things I have done while attempting to start my own and yet-to-exist kernel: [Click here]
Now, given a summary of what I'm globally able to do, and a demonstration of the things I have done and applied with my best programming effort in the real world, and which is actually what I have achieved from 2005 to 2011 working in this full time
What, and how much more could I learn from BonaFide documents, and what would I be able to achieve, if I were to invest up to one more year studying much more seriously and carefully every tutorial and source code found here, both in the documents of the "old" BonaFide website as well as those of the "current" site?
What should be the next thing I should do, should read, etc., to master the things I can't do, and to actually have greater success with kernel and advanced programming, given my "middle-level" programming which is still not particularly applied yet in the real world?
Do you have some sort of specific project or specific program I should be able to do other than a kernel, to truly demonstrate that I have improved and will be actually able to succeed in real-life system programming?
Can you please give me a specific list of all kinds of algorithms, ordered from basic to advanced, I should learn from now on assuming I'm in a relatively "poor" performance level?