This website is the closest thing I've found to what I've been looking for, but I don't understand it yet.
My idea is to have only a few components in a system. I want to write a small BIOS/OS which can write and read to any memory location based on input from the serial/COM port. I envisioned the commands to be simple (e.g. "w 00fff 0008" to write the value of 8h to memory locatoin 00fff" or "r 00fff" to display the value of memory locaton 00fff). I want to read and understand every single instruction along the way so it is necessary to start with a ROM image that is as small as possible.
At first I only want to support the memory and a serial/COM interface. I do NOT want to support a keyboard, mouse, network, disk drive, video or anything else. Just a basic interface to understand the process from CPU reset/turn-on to a running program that can't even be called a real operating system. It'd be computer hardware and I'd have taken control of it so it'd be doing what I want.
I found SIMNOW and downloaded it - I'm running it on Vista and it works. My first day I started getting errors because I have no BIOS or memory image (although the workspace GUI shows the basic devices and their connections).
I want to document my progress and eventually hit the more complicated milestones:
a) write to multiple memory locations
b) fetch two values from memory, operate on the values, write to a third location and finally read that location and verify correct operation.
c) enable keyboard function - type a key to see it echoed over the serial/com i/o
d) enable vga with a driver - type a key to see it echoed over the display
etc, etc, etc. One small baby step forward at a time documented clearly with diagrams and pictures.
Any advice for a new BIOS/OS enthusiast?
Thanks! 
My idea is to have only a few components in a system. The CPU <-> northbridge <-> memory <-> southbrdige <-> ROM (for BIOS) with an additional connection from the southbridge to a serial/COM port.
I want to write a small BIOS/OS which can write and read to any memory location based on input from the serial/COM port. I envisioned the commands to be simple (e.g. "w 00fff 0008" to write the value of 8h to memory locatoin 00fff" or "r 00fff" to display the value of memory locaton 00fff).
That's it at first - no keyboard, mouse, network, disk drive, video or anything else. Just a basic interface to understand the process from CPU reset/turn-on to a running program that can't even be called a real operating system. It'd be computer hardware and I'd have taken control of it so it'd be doing what I want.
I found SIMNOW and downloaded it - I'm running it on Vista and it works but I started getting errors because I have no BIOS or memory image (although the workspace GUI shows the basic devices and their connections).
I want to document my progress and eventually hit the more complicated milestones:
a) write to multiple memory locations
b) fetch two values from memory, operate on the values, write to a third location and finally read that location and verify it worked.
c) enable keyboard function - type a key to see it echoed over the serial/com i/o
d) enable vga with a driver - type a key to see it echoed over the display
etc, etc, etc. One small baby step forward at a time documented clearly with diagrams and pictures.
Any advice for a new BIOS/OS enthusiast?
Thanks! 
Kailas - Thanks for your comments. I've loved playing with assembler ever since my first 6502 computer. Since then I've played with 6809, Z80, 8086, x86, x86_64, PPC, and ARM. It's great fun; but it can be a little difficult getting information on the other hardware in one's computer!
a really nice project. I remember the efforts I had put to write a code in assembler to put machine in 32bit and just to display a string after that.
dont know if this will be useful to emulate some other processor and boot a different os. still thinking if this can be done using ur project.
Abhijeet - the book by Burgess, that I mention in the documentation page, is a really good example of a more complete (32-bit) operating system. The other books, about OS X, Linux, and BSD are in-depth discussions of real operating systems for which the code is available. But they are rather heavy going.
I'm slowly getting round to improving the documentation, and I'll look to improve the system in the future, but it's just a hobby so I can't devote all my time to it!
Ian
Hello,
I am very interested in OS design and implementation. I want to build my small learning OS. I have completed the Galvin theory book. Now where should i look further?
It would be nice if you can add more documentation on your site for learning.
thanks
abhijeet nayak
I'll make a real effort Matt! I do have a real life also, but I'll see what can be done.
Come on Ian, hurry up with the rest of the Docs 
This makes for fun Lunch Time reading!
Cheers!
Matt
All code here will work on any x86_64 chip, Intel or AMD. I originally started this work using an Athlon 64, but now use both Intel and AMD dual core chips.
Also note that SimNow, despite what the documentation implies, works perfectly well on Intel chips also. You really need it if developing low-level x86_64 code!
Is it AMD only ??
Not Intel core2duo ??
Thanks for posting this code and even putting some explanation of the code.
I really enjoyed taking a look at this, as I played with a lot of very raw 32 bit protected mode code back in the 90s, so it's pleasing to be able to update some of that knowledge to include the AMD64 architecture by looking through your work.
Thanks for sharing - nice code! 
Script by Dagon Design