July 20, 2015 by Marco Cecconi
I am attempting to build a computer from prime principles. Am I crazy? Probably. But I have a plan.
Let's start from the beginning
Because not knowing how stuff works bugs me to no end. It's not enough for me to use a programming language. In the past I dabbled and spent more than a little time playing with lower level stuff like assembly. I also spent considerable time thinking architecturally about systems -- in fact I have been a senior software architect (whatever that means, lol). This is to say: I try not to be monodimensional and I like to approach systems from different angles, I like taking a look from orbit and zooming in with a microscope -- and all the views in between.
My knowledge has gaps when going from the transistor to the computer. I know the parts and how to assemble a computer, but not how, for example, to build a CPU or memory chip. I want to find out! I have come across two things that tipped me over the edge and got me started
The reason why I want to build a computer is that doing something in practice is way more interesting that studying how it should be done.
I am not deranged enough (yet...) to literally build a computer transistor by transistor. Would you spend years soldering together memory banks bit by bit? It makes no sense. What I plan to do is cheat by removing the tedious parts and leaving the fun ones. I will do so by "scaling". If I built something, say, an adder, I'll let myself buy premade adders like a TI-7483. So as long as what I'm avoiding to do is a repetition of what I've done, I'm fine.
I am not sure if this makes all the step necessary feasible, if not, I'll cheat more, because YOLO. I will take basic electrical components for granted, too -- I know how transistors, resistors, caps, LEDs, etc. work from my physics labs days.
In detail, here's what the current journey plan looks like:
I don't know if I'll be able to go to all the way to point 8. Stuff gets harder as we go down the list. On top of that, there are BIOSes, OSes, compilers, etc. Also there's a factor of costs involved to consider. We shall see.
NAND gates are interesting because they are easy to build and you can use them to build every other kind of gate. I think it's a good starting point to build a computer!
I've taken the circuit from hyperphysics and modified it to suit my needs. Here's what I came up with:
Which should look like this once on the breadboard:
I expect the led to be ON if no buttons are pressed, or if only one button is pressed, and OFF is both buttons are pressed.
Success! The circuit behaves as expected. It even ran on the first attempt! Here's a pic of the running circuit, attached to my Arduino as power source.
For someone as fat fingered as I am, with no experience in electronics, this was a lot of fun! I can't wait to take the next step!
Hi, I'm Marco Cecconi. I am the founder of Intelligent Hack, developer, hacker, blogger, conference lecturer. Bio: ex Stack Overflow core team, ex Toptal EM.Read more
December 02, 2020 by Marco Cecconi
Some lessons learned over the past 8 years of remote work in some of the best remote companies on the planetRead more
November 25, 2020 by Marco Cecconi
Our newest open source initiative, intelligent cache, is available for useRead more
November 19, 2020 by Marco Cecconi
In this post, Salvatore Sanfilippo puts together a list of qualities that I believe make the most difference in programmers’ productivity.Read more
October 27, 2020 by Marco Cecconi
Today I want to introduce our second engineering team: Team EMEARead more
October 23, 2020 by Marco Cecconi
LEGO star-ships aren't made to collect dust on a shelf, but to explore strange new worldsRead more
We can say that Mr. Robot is having a moment. The main character was one of the top choices and thus is perhaps the most/least realistic/annoying/inspiring portrayal of what it’s like to be a computer programmer today.Read more…