Hand-made Web Server, Built From 200 TTL Chips
ps writes "Bill Buzbee has constructed a hand-made CPU, complete with
hardware address translation, memory mapped I/O, and DMA, out of 200
74-series TTL chips wired together with thousands of individually wrapped
wires. By using a port of Adam Dunkels' uIP TCP/IP stack to the Magic-1, it
currently serves up live web pages
at an amazing speed of 3 MHz. See the website for photos and
schematics."
And as part of its stress-testing procedure, its been slashdotted!
This just goes to show the kind of amazing innovation that can still come out of a garage project. One guy working on his own can sometimes come up with ideas that the big guys like Intel etc are just too slow to be able to jump on. They're all fiddling around trying to get their buggy Verilog tools to work, while this guy just goes and wire wraps it in a few evenings. Bravo! I'll bet it takes the big semiconductor companies at least a year to catch up with this.
He posted his 3 Mhz server on slashdot.. i guess that by now that fine wire-mess is a melted wire-mess...
- Already slow even before hitting the front page: Check
- Millions of bored geeks have just dragged themselves into work: Check
Yep, there is no chance this will get slashdotted, but in case it does, I think there is a mirror working here.
I Am My Own Worst Enemy
P.S. Cool project Bill.
Hulk SMASH Celiac Disease
Magic-1 Stats
* Files served: 804
* Boot time: Sunday, June 05 2005 - 08:59:01 PM
* Current time: Monday, June 06 2005 - 07:05:14 AM
* Ticks mod 64: 56
* uIP start time: Sunday, June 05 2005 - 10:18:36 PM
* Clock speed: 3.0 Mhz
* OS Version: 1.33
* Slashdotted: Monday, June 06 2005 - 07:13:14 AM
THIS is the type of stories that Slashdot should be posting! Cool engineering type stuff. Enough with the "M$" slamfest and what is Apple/Sony/Nintendo doing today crap.
Mirrordot cache
As I write this, the vast majority of the 38 comments are about /.'ing the machine, blah blah blah.
I, for one, think it's a neat project, and bow to Buzbee's superior geekdom.
ps writes "Bill Buzbee has constructed a hand-made CPU, complete with hardware address translation, memory mapped I/O, and DMA, out of 200 74-series TTL chips wired together with thousands of individually wrapped wires. By using a port of Adam Dunkels' uIP TCP/IP stack to the Magic-1, it currently serves up live web pages at an amazing speed of 3 MHz. See the website for photos and schematics."
If you were a real geek you'd know that the web server is far cooler! ;P
Time is an illusion. Lunchtime doubly so. - Douglas Adams
Dennis Kuschel from Germany already did a similar project years ago. check his german page http://mycpu.dr.ag/ or his english page http://mycpu-en.dr.ag/ Dennis also wrote a custom OS with network stack and a c64-compatible basic interpreter for his homebrew-computer.
Magic-1 is a homebuilt minicomputer. It doesn't use an off-the-shelf microprocessor, but rather has a custom CPU made out of 74 Series TTL chips. Altogether there are more than 200 chips in Magic-1 connected together with thousands of individually wrapped wires. And, it works. Not only the hardware, but there's also a full ANSI C compiler for Magic-1 (retargeted LCC), and a rudimentary homebrew operating system. You can even telnet into Magic-1 and play Original Adventure.
This web site has served as the development repository for the project, and contains lots of pictures documenting the construction, as well as full documentation and diaries stretching back to the project's beginning in 2001. You can also find a few videos of Magic-1 running, including the first time it worked.
Start here, and then check out the Overview and Photo Gallery. To dig deeper, browse through Technical Info, Construction - and if you're really interested, you can even download Magic-1's full schematics.
Magic
In the summer of 1980 I celebrated my freshly minted B.S. in Journalism by blowing most of the cash I collected in graduation gifts on a TRS-80 Model 1 computer. Sitting on the floor of my apartment I fired it up, typed in the sample BASIC program and then "RUN".
"BILL", I responded.
Wow! I was blown away. This was just a machine, but I could interact with it using language that we both understood. As a Liberal Arts graduate with next to no technical background, I found this completely astonishing. Over the next year, I continued to play with my TRS-80 Model 1 while working as a journalist on a small-town Kansas newspaper. I decided that I really wanted to learn more about how computers worked, so I went back to college and picked up a M.S. in Computer Science.
Now, more than 20 years later, I find myself with an urge to touch that magic again by building my own computer from scratch. By "scratch", I mean designing my own instruction set, wire-wrapping a CPU out of a pile of 74 series TTL devices and writing (or porting) my own assembler, compiler, linker, text editor and operating system.
I'm calling this computer the "Magic-1", or M-1 for short. It's a one-address, microprogrammed machine with one-byte opcodes. It features 8/16-bit data operations, functioning on an 8-bit wide data bus with 16-bit addresses (mapped via 2K-byte pages into a 22-bit physical address space). Code and data address spaces can be shared or disjoint, giving each process up to 128K bytes of addressing. User and supervisor modes exist, along with hardware address translation, memory-mapped IO, and support for DMA and externally-generated interrupts. As far as components go, it is built entirely out of 74LS and 74F-series TTL devices plus modern SRAM and old bi-polar PROMs for the microcode store. I designed it to run at 4 Mhz, but missed a couple of critical paths - so ended up at 3 Mhz. Goals
OK, so I understand wanting to do your own CPU, buy why on earth are you doing it this way? I mean, why TTL - why not FPGA? And really, 16-bit virtual addresses in a 22-bit physical address space! What's the deal with that?
I guess any project should start off with some notion what of what you're trying to achieve. My high-level project goals are: bullet
Touch the magic. By this I mean to gain a deeper understanding of how computers work, and specifically computers similar to those of the late 70's and early 80's that first fired my interest. For this reason, the Z80 loomed large in my mind throughout the design process, and running with an 8-bit data bus and 16-bit addresses just seemed right. Although I'm largely trying to use parts that would have been current in that time, I'm not shooting for historical accuracy. My choice of
Where law ends, tyranny begins -- William Pitt
Blinky lights~Real Computer
10 years ago I worked in a mainframe shop that had upgraded from the 4381 to a 9121. Neither system had much "eye candy". That meant that the client didn't have much to show off in the "big window" of the data center when tours/investors were guided thru.
Unless Tex was working.(and thankfully he almost always there). He was the client's rep that ordered paper by the semi for us & was able to bend Standard Register to his will with a mere phone call(one semi load of paper a year will usually do that, we did multiples)
Tex would lead the tour to the window and happily point to the elderly IBM network controller(box was actually blue on the sides, model forgotten) with all its blinking status leds and tell em "there is the computer".
They'd make "pretty lights" noises and continue along, Tex would grin from ear to ear & we'd have to wait till they left before we could run outta air laughing.
Tex dreaded the times anyone talked about network upgrades.
Come on guys, this is 3,000,000hz! That's like, wow.
Modern computers come with like 2.4 or something. This is wAY WAY faster, no way will we slashdot it.
This is a prime case where the submitter should have : 1) warned the site's owner, 2) made arrangements for a mirror or coral cache or bittorrent whatever. Because you KNOW this bitch was gonna go down like a three-year-old trying to stop a stampeding herd of elephants.
And the alledged "management" of slashdot should have at least warned the poor sap before unleashing this upon his little corner of the web.
That said, this sounds uber-l33t, and I'm planning to check it out once the smoking rubble is cleared away.
the preceding comment is my own and in no way reflects the opinion of the Joint Chiefs of Staff
The real sad thing is that from a traceroute, it looks like he's hosting the site from his personal DSL connection. So, he probably can't even contact anyone for help or to even complain.
Hope he doesn't need to use the Internet any time soon.
DRM-free, beeyotch!!!!
the preceding comment is my own and in no way reflects the opinion of the Joint Chiefs of Staff
Points missed: pretty much all of them.
RTFA, he states that he knows he can use FPGA's etc. but doesn't want to. He WANTS the nostalgia value of wiring everything from bare basics and, short of wiring millions of transistors together, has done it. It was a personal project that was never supposed to have any value except that he can say "I made that".
Personally, I'd love to have the money to start on something like this myself. It's something to show the grandchildren... this is how we used to do it and this is one that **I** made.
It never hurts to forget where we've come from. You might as well ask why we're bothering to keep BBC Micros, ZX Spectrum's, Commodore's, PDP's in museums. This wasn't a "practical" project, it was a personal one.
Also, I think it's a good thing to propogate the knowledge that is needed to build something manually from bare components rather than rely on a manufacturer of FPGA's, etc. to still be making the same components in another 50 years, the software to program them still be around etc.
I've often pondered on what would happen if we had, say, some sort of nuclear war that put all the current methods of manufacture out of action. At the moment, everything is built on having a certain amount of technology available to build upon to fabricate the "latest" technology.
When those layers are removed, you will have to go back to basics. This is why I was also against the scrapping of coastguard listening stations that would listen out for ordinary AM-radio morse code SOS signals. It's the lowest common demoninator that can be easily fabricated from the lowest-level components.
We shouldn't forget where we've come from in case we ever had a need to get back from there!
Is this an Amish version of a web server or something? I know the Amish insist on doing things the hard way, such as plowing a field with a horse. Why would a person choose to build a system today using old tech such as this? Must be some religious thing or perhaps a new Amish Sect? Compish? Or is it simply Stupish? ;)
Sure, a 3 MHz TTL device isn't going to compete with anything comtemporary, particularly a commercial microprocessor.
True, nobody is going to buy one due to the labor cost to build it.
But can anyone think that it was built to set the world on fire? Has nobody but me ever built something simply for the love of doing it, or the knowledge gained from figuring out how to do so? There's more to building something (whether it be from a kit or personal design) than the usefulness of the end result.
Well you two are a natural pair, aren't you? you have a homebrew sex toy, he has a homebrew web server. now all you need is someone to build a homebrew credit card processing server.
/. doesn't need to check everything, but when the site specifically says it's running on a 3MHz box at home...
# cat
Damn, my RAM is full of llamas.
Shouldn't be a problem. Back in the 80's I remember wirewrapping Ciarcia's projects up to 10MHz. Judicious use of decoupling caps (.1uf) and standard digital design techniques were necessary but TTL and CMOS was pretty idiot proof at those frequencies.
3MHz should be plenty fine. It really depends on what the layout is of the chips and other circuits, how long the wires are, where/how they are spread out on the board, and how his power and ground is done. Power and Ground will be the biggie. If they are in actual planes on the board and he has plenty of decoupling capacitors, then he should easily be able to get over 10 MHz. We used to be able to get 16MHz 68000's running like this ages ago.
So, if a guy wanted to build a more "modern" homebrew CPU, what options are there? Are there any decent CAD tools that don't cost a thousand million dollars? And once a layout is done, is there anywhere you can get just one single chip made for a reasonable price?
LesPaul,
I built a CPU using freeware tools as part of my PhD project. The paper is "A 12-bit 80MS/s Pipelined ADC with Bootstrapped Digital Calibration" published in the IEEE Journal of Solid-State Circuits, May 2005. You can google the title if you want to see the paper. Anyway, I designed a 24-bit microprogramed CPU in 0.25um CMOS to act as the calibration controller of the Analog-to-Digital Converter (ADC). The project was great because I got to design the architecutre of the CPU, the microcode/instruction set, I wrote a custom assembler, etc. I designed the circuits using viewdraw (public domain UNIX schematic capture tool). I designed the logic and tested the circuits using a public domain VHDL simulator (can't remember which one.. alliance maybe?). I laid out the circuit using Magic, a public domain layout editor running on Unix or Linux. The only thing that cost money was fabricating the chip. There is a service called MOSIS (www.mosis.org) that will do multi-project runs to lower the cost for you. I think the cheapest you will get is a couple of thousand bucks for 40 parts or so. Mine was something like $40k but I had high performance analog circuits in a fancy process. Email me if you need more info at carl.grace@yahoo.com
Cheers,
Carl
Although I'm a software guy, I did get some great advice from folks who actually knew what they were doing. Power/ground & decoupling were given lots of attention, and I was also helped by finding some nice wire-wrap prototype boards that had good power and ground planes. What's keeping Magic-1 from going faster than 3Mhz is my memory access mechanism. I don't support wait states, and rather a lot happens during each clock cycle. In any event, except when being Slashdotted, 3Mhz is plenty fast enough for a homebrew project.