MVOS
MVOS is a custom-written operating system for the PC architecture. It served no real purpose except that of education: there is no better way in my opinion to understand how something works than to do it yourself.
I am posting this here as a way to 1) collect my thoughts in one place, and 2) hopefully provide some insight, direction, and a contact for anyone interested in doing the same.
The Beginnings
In August of 2004, I was inspired by some old DOS code I had once played with. Wanting to draw boxes and colors to the DOS text-mode display, I had found in a book that I should write data to B800:0000. What was this magic number? And how did that result in text being put on the screen?
Alas, Windows XP, my OS at the time, did not allow this kind of access. For one, it is obviously lacking a full-screen text mode display. So I did some research. I stumbled across a simple bootloader written in Intel assembly language that printed to the screen! So I copied it to a floppy disk (yes, I'm old enough to know what those are), rebooted the computer, and it worked!
MVOS 5.0
Things got progressively more complex from those humble beginnings as a mere bootloader, resulting in a system that: * Was written in a combination of C++ and Intel Assembly * Could be copied to a FAT12-formatted floppy disk (or disk image) and booted on a real or emulated PC * Ran in full 32-bit (or 64-bit!) Protected Mode, without BIOS support (except for VGA mode switching) * Supported keyboard and mouse input * Could read the floppy disk by interacting with the controller directly * Supported an extensible file system interface, of which only read-only FAT12 was implemented * Could enumerate devices on the PCI bus. I briefly experimented with interfacing with a data-acquisition board (for a possible real-world use of what I had written!) but the documentation proved too sparse to be useful.
Another item of note: when I was writing this, the only OS I had seriously used was Windows. As such, a lot of the ideas I used were inspired by the Windows API and books on Windows internals. Linux geeks, hold your collective tongues. There's a lot I like now about the Linux / POSIX design, and a present-day redesign would almost certainly draw from that. You build from what you know!
Enough chat, how about some pictures!
To come! Descriptions, features, how exactly do you do this?
