Elements of Computing Systems is a book and course/project series designed
for university students. The book explains computer hardware and a complete
software stack. The idea is to show students how to create a computer system
starting at the gate level, and build all of the tools/compilers needed for
a modern computer system. The projects for the course get you to create:
A computer processor (starting with only Nand gates)
An assembler
A virtual machine
A compiler for a high level language called Jack
An "operating system" (actually closer to a standard library)
An application (in my case I implemented a clone of pacman)
The course projects may be completed in any order (or even skipped) because
simulators and tools are provided if you don't build upon your previous
projects.
The projects are fairly primitive/simple. This choice was intentional so
that students could complete the projects in a reasonable amount of time. As
you can see from the screenshot of my game, the hardware only supports
monochrome graphics.
I am currently working on a software rasterizer that is capable of running
on the SPU's of the Cell processor. My goal is to write a flexible rendering
system that allows for programmable vertex and fragment shaders while still
remaining high performance.
A tutorial on how to create a self replicating program (called a Quine) in
C. Of course, the ideas presented in the tutorial are equally applicable to
other languages.