In the beginning....
Magic-1 really began during a lunchtime discussion with Ken Sumrall at Vito's
Pizza in Sunnyvale, CA sometime in the Spring of 2001. I was complaining
to Ken about how as a compiler writer I was woefully ignorant about how CPU
hardware really worked. I hadn't taken any electronics classes in college,
and was only vaguely aware of what transistors, resistors and capacitors were.
Ken recalled an old series of magazine articles by Forrest Mims on building a
very simple CPU from TTL parts, and suggested I read it. Over the next few
weeks, I tracked down those articles, as well as Mims' "Understanding Digital
Computers" and a textbook by Albert Paul Malvino, "Digital Computer
Electronics."
I read them all, and when I next had lunch with Ken at Vito's I reported back
that it all seemed much clearer now - so much so that I thought I could even
build a CPU myself. Then Ken said, "well, why don't you?".
Why not, indeed?
And so the Magic-1 project began.
Using the 4-bit CPU designs in the Mims and Malvino books as a starting
point, over the summer of 2001 I gradually worked out the basic shape of my
Magic architecture. All of my design and sketch work was done by hand on
graph paper and kept in a binder. However, by the Fall of 2001 it was
clear to me that I needed some better way of organizing my work. I decided
to set up a development website to hold the project. That way, I could
refer to it anywhere and any time. That decision turned out to be one of
my better ones, and this website was born.
Construction Photo Diaries
Since the beginning of this web site, I've been frequently updating
development diaries. The ones mostly dealing with design may be found
under Technical Info, and are almost entirely words. Once I started
construction, though, I started putting together photo diaries to document my
progress. They are broken down by task, and have some temporal overlap.
Here they are:
| 12-6-2001: I begin a running development diary, and start off with an
embarrassingly optimistic schedule. |
| 12-18-2001: Do basic design of fault/interrupt
mechanism, and make mistake that eventually becomes the
last bug to fix before Magic-1 comes alive
two-and-a-half years later. |
| 12-29-2001: Complete first
rev. of the microcode. |
| 1-6-2002: Magic-1 simulator complete enough to
trace call/return sequence. |
| 1-8-2002: Simulate Fibonacci
function and flesh out software conventions |
| 1-13-2002: Magic-1 assembler (qas) takes
shape |
| 1-18-2002: Big-endian vs.
little-endian |
| 2-28-2002: Page fault mechanism
works in simulator |
| 3-9-2002: Decide on construction
technique: wire-wrap prototype boards |
| 6-3-2002: During LCC retargeting, decide to
significantly change Magic instruction
set architecture |
| 6-4-2002: Compile Fibonacci program in
C to Magic assembly |
| 6-22-2002: Move to split code and
data spaces |
| 6-25-2002: Design context switch to
work well with Minix operating system |
| 7-12-2002: Complete microcode
rewrite |
| 8-13-2002: Drop support for rotate
instructions |
| 9-11-2002: Gil Smith give me basic electronics lesson, as well as a
wire-wrap gun & supplies |
| 9-22-2002: Buy card cage on eBay
and begin construction [pictures] |
| Fall 2002: During a Vito's lunch, I ask Ken Sumrall how to know what value
resistors to use. He introduces me to
Ohm's
Law. |
| 3-30-2003: Inspired by John Doran's
D16/M, complete ALU/Register card
schematics |
| 4-13-2003: Complete
control card schematics |
| 4-14-2003: Thoughts on front
panel |
| 5-3-2003: First rev of
schematics complete |
| 5-6-2003: Move build environment from
Linux to Windows |
| 5-16-2003: Thoughts on new Magic-1
simulator |
| 5-27-2003: Fibonacci runs on
new simulator |
| 6-3-2003: New assembler functional |
| 6-21-2003: Hit 100% coverage
on Magic architectural validation test suite |
| 6-23-2003: Alistair Roe emails with thoughts on an enclosure for Magic-1 |
| 8-3-2003: Retarget LCC C compiler
to Magic & create retargeting notes |
| 8-10-2003: On my birthday, C
version of Fibonacci runs in simulator |
| 8-27-2003: David Conroy teaches me
about signal integrity |
| 9-18-2003: Decide to use
cut-strip-wrap wire-wrapping technique |
| 1-3-2004: Design complete,
construction begins |
| 1-18-2004: Magic-1's heart beats for the first time [pictures] |
| 1-26-2004: Front panel logic card
complete, [pictures] |
| 2-9-2004: Memory card complete, [pictures] |
| 2-20-2004: EPROM daughter card complete, [pictures] |
| 2-26-2004: Device card complete, [pictures] |
| 3-7-2004: Microcode sequencer
comes to life |
| 3-9-2004: First instruction
executed |
| 3-19-2004: Control card complete, [pictures] |
| 4-8-2004: Premature bringup attempt |
| 4-12-2004: ALU/Register card complete, [pictures] |
| 4-12-2004: Bring-up attempt - failure! |
| 4-13-2004: Success! Magic-1 runs Fibonacci,
[video] |
| 4-25-2004: Dave Conroy debugging
session finds ungrounded memory chip |
| 5-3-2005: Magic-1 talks |
| 5-8-2004: Sieve of Erasthones benchmark runs |
| 5-16-2004: IDE interface comes alive;
Alistair Roe's enclosure concept |
| 7-23-2004: Basic bringup complete |
| 9-12-2004: User-mode programs
work; telnet access to Magic-1 |
| 9-15-2004: Dhrystone benchmark
runs |
| 9-22-2004: fork() implemented using
copy-on-write |
| 10-23-2004: Magic-1's Dhrystone
score hits 384 (0.25 MIPS) |
| 10-31-2004: Colossal Cave
Adventure runs |
| 4-9-2005: Alistair Roe's enclosure and
front panel arrives on doorstep |
| 5-13-2005: Magic-1 is hardware complete. |