loading
Building an 8-bit TTL computer sounds like a daunting and complicated task, or at least it did to me when I started out on my journey to understand the architecture of a basic CPU. When it comes down to it, a CPU is fairly simple in operation once you learn the fundamentals behind all of its processes. This project is intended to help anyone interested in building their own computer and gaining the wonderful knowledge that comes along with the process. Don't be afraid to try, you can only learn.

This project will start off by describing the basics of electronics. After that, the fundamentals of binary and boolean logic will be described. Lastly we will then move onto the function of the various parts of a simple-as-possible computer (with a few modifications) as described in Malvino's text Digital Computer Electronics. This means that the end product of this Instructable will be a computer that you can program with a unique instruction set. This project also leaves many of the design aspects of the computer up to you and serves as a guide for building your own computer. This is because there are many ways to approach this project. If you already have a sound understanding of boolean logic and the workings of binary feel free to skip to the meat of the project. I hope that you all enjoy and get something out of a build like this, I know that I sure did.

For this project you will need:

1.) A power supply
2.) Breadboards + lots of wires
3.) LED's for output
4.) Various logic IC's (discussed later)
5.) Free time
6.) A willingness to mess up and learn from mistakes
7.) A lot of patience

Optional (but very useful):

1.) Oscilloscope
2.) Digital multimeter
3.) EEPROM programmer
4.) Sonic screwdriver

Useful Links for a Project Like This:

Digital Computer Electronics: 
http://www.amazon.com/Digital-computer-electronics-Albert-Malvino/dp/007039861
TTL Cookbook: http://www.amazon.com/TTL-Cookbook-Understanding-Transistor-Transistor-Integrated/dp/B0049UUV38

Step 1: What Is a Computer?

This may seem like a very simplistic question that does not need answering when, in fact, it is a question that many people do not know the true answer to. Computers have existed a lot longer than the transistor in mechanical and theoretical form. The actual definition of a computer was thought up by a very intelligent individual by the name of Alan Turing. He described a machine that was termed the Turing Machine. Every computer that we use today, from the computer or cell phone that you are reading this on to supercomputers all can be classified as a Turing Machine at their most simplistic level.

What is a Turing Machine? A Turing Machine consists of 4 parts: the tape, head, table and state register. To visualize the operation of such a machine you first have to imagine a film strip spanning infinitely in each direction. Now imagine that each cell of this film strip can contain only one of a defined set of symbols (like an alphabet). For this example let us imagine that each cell can only contain either a "0" or a"1". These cells can be rewritten an infinite amount of time but retain their information indefinitely until they are changed again. The part of the Turing Machine known as the head can write symbols to the cells as well as either increment or decrement its position on the film strip by a given integer (whole number) of cells. The next part is the table which holds a given set of instructions for the head to execute such as "move right 4 cells" and "set cell to 1". The fourth and final part of a Turing Machine is its state register whose purpose is to hold the current state of the machine. The state includes the instruction as well as the current data on the tape.

That is how simple the operation of a computer is. When your computer operates, it is actually operating as a turing machine. It processes data held on your computer by a given set of instructions and algorithms. The computer described in this Instructable is a very simplistic model of a computer, but it still operates as one that you can program with a set of instructions that it will follow and execute.

Useful Links:

Wikipedia on Turing Machines: 
http://en.wikipedia.org/wiki/Turing_machine
<p>Great manual!</p><p>I've made it using Your design, but on an unusual medium: pixels :D Here's the simulator if you wanna see this in motion operating: <a href="https://realhet.wordpress.com/2015/09/02/bitmap-logic-simulator/" rel="nofollow">https://realhet.wordpress.com/2015/09/02/bitmap-lo...</a></p><p>I programmed it to calculate the Fibonacci series, it has an extra 16 byte ROM for the program, the fetch is only 2 cycles and different instructions can break the micro-word sequence earlier as when they finish, so instruction times are ranging from 3 to 5 cycles.</p><p>It was fun to input a program only using switches, like in ancient sci-fi movies. Well, it was fun for the 1st time... After I rather made a ROM.</p>
<p>Good job bro...Nice software</p>
<p>Realhet, that is spectacular! I really like your idea of using simple CA rules to make a logic sim. It is almost like Redstone in Minecraft, but so much more powerful and less latent (and also devoid of a jungle of wires, that must be nice). Congrats on the great project. Do you know of any other users of your program yet? I'll make sure to keep an eye on your site for updates, and I'll share your work with my friends. I'm sure they will really enjoy it.</p>
<p>what if you made it using leds instead of wires. could u see where the signals were going </p>
<p>How would you program an if-statement?</p>
<p>You don't need a new opcode. What you need is a value that represents true and false as 1 and 0. You load that value into the accumulator and subtract 1. Then you do a conditional jump. If the value was 1 (true), the subtraction will cause an overflow and the conditional jump performs. If the value was 0 (false), no overflow and thus no jump occurs.</p>
<p>Since there is a register (accumulator) that stores the previous sum from the ALU you can check if the result gives a negative, positive, or zero number then with that you can add a new opcode that checks that state and jumps if the condition is true.<br><br>for example</p><p>4 - 10 = -6 -&gt; -6 is negative so any branch command with the N bit set to 1 would jump</p><p>assembly: BRN RA This would branch on negative to location stored in A</p><p>binary assuming opcode is 1000: 10001000</p><p>Where this is the bit breakdown of the opcode</p><p>BR: 1000</p><p>N: 1 | 0</p><p>Z: 1 | 0</p><p>P: 1 | 0</p><p>0: 0 | 0</p><p>Also if you want to make it more versatile you can try adding the ability for B to set the bus value then the last bit '0' could be for A or B as 0 or 1 respectively.</p>
Crikey, you've got some patience!
<p>I've got a question. All of the parts in the list are there with the exception of 2.<br>the tri state buffers and the jk flip flops<br>There was a different website with the same model as the tri state buffers<br>but<br> there wasn't a JK flip flop replacement, do I have to use the exact <br>same model as you listed or can I use a different model? and if so which<br> model should I use?<br></p>
<p>Hey! I know that this is an older post but could you give me some updated links for the Tri State Buffers and the JK Flip Flops? I tried researching the products but I don't know which models to use. Thanks in advance!</p>
<p>I'm interested in making a simple CPU that I can use to type on an LED or even LCD screen. Is this the project for me or can you point me in better direction please?</p><p>I am a complete novice at this. I'm a carpenter trying to make some kind of wooden computer!</p>
<p>Instead of building a CPU you should just build a computer with a wooden case. Computers may cost quite a bit, but you can actually get them under $300. Try using this site: pcpartpicker.com</p>
<p>Thanks for this. I hope there are parts thin enough. I want it to be like a calculator for words. I'll check out the link :D</p>
<p>If all you want it to do is act as a calculator, you might want to look into Raspberry Pi. It'll be much smaller and cheaper, Pi's are like the size of a phone.</p>
<p>Now that I think about it, the Pi can do pretty much anything a full desktop computer can, it's just much smaller. There's probably some sort of software you can use for it.</p>
<p>Thank you for your reply :D</p><p>Shortly after my original comment I actually found this guy: <a href="https://www.etsy.com/shop/writeotron?ref=unav_listing-r" rel="nofollow"> https://www.etsy.com/shop/writeotron?ref=unav_lis...</a></p><p>We're going to work together on a new one. It's a Pi!</p>
<p>Its wonderful and encouraging me to make one of my own..</p><p>sure i will press &quot; I made it &quot;. I kinda in process to build it. hee hee its awesome digital electronics</p>
<p>can someone please tell me the part list with the total no. of them used. </p><p>i did saw the part list but not the total number. I havnt read the whole tutorial yet so before i start would love to have evrything beforehand. and also please can anyone tell me based on this how much would i be able to increase its functionality . </p>
<p>Hi, don't start counting how many ic's you need... Just study the first component (I recommend clock, mar or program counter), design it and buy the integrated circuits you need. Do the same for all the components.</p><p>Not giving you the exact number and id of integrated circuits means that you can develop YOUR solution</p>
<p>How did you decide between active-low and active-high bits?</p>
<p>I mean for the control words that you used.</p>
<p>Subscribed just to push &quot;I Made it!&quot; button and to say a <strong>BIG</strong> thank you to K.H.! :D</p>
<p>Wow! I love the modular setup of the boards. That is a fantastic idea both aesthetically and functionally. I ran into EM interference issues with my breadboards' close proximity. I would imagine a setup like this has much less of a problem. Congrats again!</p>
<p>and what do you do with the carry out of the lasy 1-bit adder?</p>
It gets connected to the carry in for subtraction operations
<p>Help, I am trying to build a 8 bit computer from this but I don't understand, im building this so I can show off to my little brother... I don't understand how many chips he used and I dont understand anything past the ALU's basic add and subtract, and the register, any help would be great, please email me at hurster100@gmail.com... Once again thanks</p>
<p>What do you recommend for a power supply? I really want to do this project, but I have no idea what to do for a power supply.</p>
<p>Hi, I'm thinking about starting this project, I find it really intresting and my question is Should I make it, because I'm 17, I know binary and some eletronics, please help!</p>
<p>i want to ask about about the uses of this 8 bit computer</p>
<p>Since its 8-bit, you can do anything that requires 16 bytes of memory ( depending on your RAM ). Unless you add some external drive... which would allow you to do so much more. But just with 16 bytes of RAM you can probably do operations like:</p><p>A+B=C, then</p><p>C+B=D,then</p><p>D+A=Z,</p><p>I think.</p><p>But with an external drive of some sort your 8 bit computer will be able to do stuff like this https://www.youtube.com/watch?v=qYvr0b8jqbg ...i think?-e-dah-puzi-1998</p>
<p>16 bytes? How did you get that? Surely an 8-bit address buffer should be able to address 2^8=256 bytes of memory?</p>
<p>i am new in this topic </p><p>i think we can point to 16 Bytes memory with 5 bit address.</p><p>16 Bytes = 4 * 4 (bytes) = 32 * 32 (bit) =&gt; 2^5 = 32</p><p>am i wrong ?</p>
<p>or is it right?</p><p>to say memory we calculate this way !!!</p><p>4*16 or 5*32 or 6*64 </p><p>so if this is true </p><p>4*16 = 64 bit </p><p>64/8 = 8 byte</p><p>so for 8 byte memory we can address with 4 bit .??!!!!</p>
<p>Yeah....some people like to have a 4 bit memory address and 4 bit op code...I would personally do an 8 bit op code and memory address.</p>
<p>I mean I guess if you're not addressing much memory then it's Ok, but it would severely limit what you could do with the thing. With 256 bytes, you could even do some kind of really simple pong game.</p>
<p>Yeah....some people like to have a 4 bit memory address and 4 bit op code...I would personally do an 8 bit op code and memory address.</p>
<p>how many wires do I need? </p>
A thousand?
<p>That is a lot of wires! COOL!!!! Do you play Super Mario Bros. on it?</p>
<p>How do I use the CD4029 as a ring counter? I bought it and all I've been able to get it to do is count up/down in binary, resetting at either 15 or 9. Any help?</p>
<p>I am looking forward to making this project! I couldn't find anything like it no matter how hard I looked! Thank you for making this project available. :3</p>
<p>How do you ensure that the program counter starts out at zero?</p>
<p>What type of PROM are you using? I didn't see any parts listed for the PROM?</p>
<p>good jop, i motivated by your project, i am gonna make one sooner . i want to know how much this projects coast you ? is there any additional advice to build one like any mistakes must avoid or things that may save time ?</p>
Sure! Try using shorter breadboard wires, and plan out the layout of your computer beforehand. This will save you a bunch of grief in the future of dealing with EMF related issues and dirty clock signals.

About This Instructable

735,469views

991favorites

License:

Bio: All of my life I have been interested in learning the way things work. It was always hard for me to use something and just ... More »
More by spel3o:How to Build an 8-Bit Computer Make a Pocket Watch Chain for Your iPod How To Change Your MAC address (Snow Leopard) 
Add instructable to: