Not necessarily. For something like this, sure, but if you are doing complex things with documentation, you need to fix things to match the design documentation or change the documentation to match the fix. Fixing something in a way other than what is in the design documentation is a recipe for a world of pain down the road.
That's true, but I would also say that using a good problem solving method has the wonderful effect of simplifying complex things. It should be methodical; start by gathering information (what he did by loading simple values in) to try to diagnose what's happening. As you see things, use that to update your hypothesis of what might be wrong. Keep refining this to hone in on what the issue is.When you do that, _most of the time_ the fix becomes obvious. There are definitely times when there is complexity built into the problem space that makes it much harder, but those are relatively rare -- multithreaded/async programming is one example. The absolute worst thing you can do is just try random things.
..."I don't really know anything more about this than you do..." said the guy who built a computer to the people learning how to do it. /chuckle so modest!
Lol, absolutely nothing wrong with your comment; but I just gotta say that Ben is such a good teacher that at this point at least, I really do understand the entire circuit. This has been such a great project so far, and I love how the more complicated it gets, the better it forces you to understand the system. Thank you so much Ben!
I have to compliment you on the cleanliness of your wiring. When I was in high school in the 70's, my electronics teacher would not accept any project that was not neatly wired up on breadboards, done exactly like yours. Even if it all worked, you could get knocked down a full grade level on any projects not wired neatly like you have done. Since then, I have not seen anyone who has done this. Thank you and keep up the good work!
I really appreciate that you showed how to troubleshoot things too. Almost everyone would simply cut it out and once corrected, they will make a video like nothing ever went wrong. You are making a wonderful job, thank you Ben.
I feel so guilty for my part in what I did to "us." "We" really need to pay closer attention ;) I've got this old HP "digital" power supply from the '80s. It uses binary for programming the output. Your really helping me understand how to build a simple interface. I think the manual was designed to be overly complicated to ensure people didn't try to just build stuff themselves. The retail price was $3800 in '89. It's probably just a lead weight at this point but I figure it's a good learning experience. Thanks again, -Jake
Superb video series. A wider range of colours might help with diagnostics. Where possible I follow the resistor colour-code: black for bit 0, brown for bit 1, red for bit 2 and so on. For most circuits the benefit outweighs the minor risk of confusion with, say, black for ground and red for Vcc.
My dad worked all his life reparing electronics and I learned just from watching him when I was a little kid, this videos brings back so much memories from my youth.
RE 7:12 = tracing your line- JUST A THOUGHT: maybe it would be better if you ran your data lines in more than just one color. Meaning keep your nibbles* the same color so Register A would have Orange/White and Green/White. Register B would have Yellow/Green and Yellow/Blue the same color. With 25 pair you have more options for color. I know that is hard, but I found if you can find yourself 25 pair telephone (office) cable (number 22 gauge wire), you have more options to identify your runs. The hard part is where to find 50 feet of #22 Gauge pair telephone cable. But it's good to have. I really like your use of Red and Black wire. {*Note 4 Bits = 1 Nibble. Just for fun -> 8 Bits = 2 Nibbles = 1 Byte.}
I love this series! I wish this had been part of my curriculum in my Boolean Algebra class when I was studying for my Computer Science degree back in the mid-80's. By the way, Boolean Algebra and Numerical Methods were two of my favorite classes in my program. Thank you for doing these. You are a fantastic teacher!
This whole series is great. I'm glad you added this video. It's good to see some troubleshooting and fault finding in action. Also, I would like to say thanks for breaking down datasheets. Some people, i.e.....I don't always know how to interpret them. Seems like every time i read one i end up with more questions. So, thanks for stopping to answer some of those questions.
Reminds me of my very first computer - a TRS-80. I knew that machine so well that when video chip went I could tell from the screen display and knew WHAT chip it was.
Only sad was Tandy did not know what it had. The idea of Having two sets of Registers pairs in the Z-80 CPU was genius. So when you had an interrupt happen you did not have to pop everything onto a stack, load the interrupt handler, run the handler, then pop everything off the stack and resume with the main program. With the Z-80 you just pop back and forth between the two sets of registers as needed. But the other thing Tandy failed to understand was how to use the rest of the chips that went with the Z-80 CPU like the PIO, and the CTC, and the SIO, and the DART. They made there own version of those chips out of their own "GLUE" (Their own logic- meaning they re-invent their own wheel for those chips). We are just now getting around to use those ideas that the Z-80 had some 35+ years ago. The other fault with ZILOG was they did not appreciate the guy who hand lay-out the Z-80 CPU Chip in the first place (NONE of this computer aided design stuff). When he left a lot of his ideas left with him, and the Z-8000 did not learn from what the Z-80 did, the guy that made the Z8000 tired to make it like Intel did. And Zilog paid the price for their arrogance. The other problem with ZILOG was they did not advertise the Z8000, thinking they had everybody in their back pockets. Problem was Intel knew better, and left Zilog in the dust when they started talking to IBM about their personal computer. Don't forget that the Video for the TRS-80 was through the memory. It was directly tied to the memory. So for every thing you saw on the monochrome screen there was a place in memory for it. Same thing for the Keyboard. None of this separate keyboard with a dedicated CPU to decode the keys, and get rid of keyboard bounce.. Also TRS-80 Mod 3 & 4 were the days where you only used Static RAM, which ate a lot of power (Great for heating your room). The Z-80 DMA could handle D-Ram but I don't remember that in the TRS-80s.
I came across an issue with the ALU showing strange results, following diagnosis, I came to the conclusion it was down to the LEDs drawing too much current which meant the voltage coming out of the XOR gates was below the 2v required threshold for the Adder ICs. I re-engineered the design of my registers and ALU to use 330 Ohm current limiting resistors, you can see the layout here: twitter.com/ukanalyst/status/887743134003867648. If it helps anyone, the ICs I'm using are from Ali Express/eBay and are marked as follows (I assume it must be down to the ICs as Ben doesn't have the same issue): 4 Bit Registers: DM74LS173AN Quad XOR ICs: HD74LS86P 4 Bit Adder ICs: SN74LS283N The LEDs I'm using are 3mm Red LEDs with a stated forward voltage of 2V
Great job! I hope you will show the progression of adding in a better BUS and whatever controller or memory components that are still to come! I've always wanted to see an example of how a very simple computer works and you are totally making it happen !
If you didn't sound so sincere, I'd assume you built in the mistakes on purpose 😂 Great series and well made video, especially to do the actual troubleshooting on camera 👍
He probably builds it first and bends them in place, then strips them, then pulls it apart putting the wires in a nice neat line left to right or something off camera, so they are magically cut and bent to length and where and when he wants them when he does it again on camera :P You can see how he cuts and bends it when he does the clock wires for the A and B register on the last video.
Awesome video, thx for doing this! I'm a software guy by trade, but I really want to get started at hobbyist digital electronics, and these videos are truly inspirational. Cheers!
My bug at this point was that my power supply wasn't up to scratch. Up to this point I was using a ELEGOO Uno Kit Breadboard Power Supply Module rated as 700mA. I was measuring the current as 0.5A so figured it should be OK. After a minute or so the expanded circuit started exhibiting erratic behaviour, resetting the clock module and the register values. The behaviour wasn't deterministic, and a ruled out a loose connection by giving the breadboards a good shake! The power supply module started to get warm and smell a little like Scalextric, so I switched to an old Apply 5.2V 2.5A power supply and stripped some USB leads like Ben did and all is well. To help debugging I added an extra little circuit to allow the register values to be set easily, comprising an 8 position dip switch with pull down resistors connected to a 74LS245 connected to the bus. It fitted neatly left hand side of the placeholder bus breadboard, and allowed me to debug by setting both A and B to 1 and stepping through.
Both wires goes to an xor gate then to an output. They are mixed up with eachother so it doesnt really matter what end you choose to fix. The xor gates arnt numbered so the only thing that is wrong with doing it this way is if you have OCD or something.
Add dip switches to control data moving on bus and for loading and output registers, makes troubleshooting way easier. I get the pleasure of re-wiring mine because I wired everything correct except for the order of significant bits, ie, my "128" bit was wired to the a1 and b1 side. This is making most additions work except when i go 1+1 which gives me 128.
when you are trying to find out the other end of a wire is such a bunch of cable, I highly recommend the continuity position of the multimeter. Feels like cheating !
Am I crazy, or is the pinout for those adders absolutely atrocious? I mean, it's not surprising - it probably doesn't really matter on a PCB, but on a breadboard it's just terrible to work with ;p
How come you get 2.5v with the outputs connected via an LED to ground. I would expect that arrangement to limit the maximum voltage to Vf of the LED or about 1.8v ?
Alternative implementation, albeit not ideal for the learning process. The addition and subtraction can actually be subject to a lookup table, in other words, you could program every possible answer into an EEPROM or two. The EEPROM could have a 16-bit address input, with the upper order byte being A register's value and the lower order byte being B register's value. As a result you could program 64 KiB worth of math into the EEPROM and just have the computer cheat and look up the answer. If the EEPROM has a higher number of addresses than 16 bits it could even hold the subtraction table as well, with the most significant bit of the address being the SUB signal, and 128 KiB of answers. To facilitate the carry flag, you could have the EEPROM actually output 9 bit values instead of 8-bit values. I may have to look at the data sheet for the EEPROM used in this build.
Umh, where are the corner cases? E.g. 0 - 1 => all output LEDs should light up. Or 0xff + 0xff = 0x1fe. You could also add bit 9 (LED 9) on the output to indicate an overflow / carry.
Hello Ben. I'm following along as a way to learn more about electronics. How much more complicated of a system would you need in order to have basic pixel video output?
It depends on what video output you have on mind. A CRT monitor would be hardcore. An LCD screen is a bit simpler to deal with. But if you just want something very simple, then how about something like this?: cdn-learn.adafruit.com/assets/assets/000/002/936/medium800/led_matrix_rgbmatrix3232_lrg.jpg?1396789186 Hey, it has pixels :) Or still simpler: cdn-learn.adafruit.com/guides/images/000/000/018/medium800/green88smile_t.jpg?1448300904
In the end, compared to his original computer, you would need more memory and a way to decode a signal into the pixels. You would also need a module that does something a screen could use. With this comp (which is really just add/sub) you can just use a 7 segment display for each digit, and a BCD so you don't get a hex output.
IanCraftsAndMines Why not hex for the output? It is more useful, because you can easily decode it mentally into bits: each hexadecimal digit decodes into exactly four bits, according to the translation table below: 0=0000 4=0100 8=1000 C=1100 1=0001 5=0101 9=1001 D=1101 2=0010 6=0110 A=1010 E=1110 3=0011 7=0111 B=1011 F=1111 But you cannot easily do that with decimal digits. That's why programmers usually work with hex numbers rather than decimal - because they can "see the bits" behind the hex number. But if we insist on using a 7-segment LED display, why not just make it more universal and control each of the segments separately by one bit? There are usually 7 segments and the dot, together adding up to 8 bits - the exact number of bits of our machine word :) So we can simply make one 8-bit register for each of the 7-segment displays and then set the appropriate numbers in them directly from the data bus to turn the segments on or off :) This way we could even display some other stuff than just digits: we could display hex digits, or even some simple alphabetic characters or rotating wheels ;) The conversion from binary digits to 7-segment codes can be done in software then. Or, if you insist, you can add some decoder on the breadboard of the I/O device for the display, so that you pass the input numbers from the data bus through the decoder if needed, but still having the possibility to control each particular segment independently if needed ;)
Christian Williams A typical video controller for raster display (a picture made of pixels) requires some sort of memory where it stores the numerical values of each pixel representing their colors. This memory is called VRAM (Video RAM), and the part of it where the image being currently displayed is called a "framebuffer". The computer can store data in there to make something to appear on the screen. Sometimes it can also read those data to make some color mixing (e.g. alpha blending), but it is usually more efficient to make this memory write-only. Then there is another part of the video controller which constantly scans the framebuffer and depending on the information stored in there it updates the display (e.g. lights up the particular LEDs or sends particular informations to the CRT to activate the electron gun when it points to that particular pixel on the screen). This piece of hardware often needs to make some digital-to-analog conversion of the numerical values of the pixels' colors into voltages controlling the display. Therefore this piece of the video controller is called the DAC (Digital-to-Analog Converter). So you need at least these two components if you want to make a raster display for your computer ;) Before raster graphics, vintage computers were directly controlling the TV controller by the CPU. As the electron gun was scanning the screen dot by dot, the CPU was sending the numerical values for the intensities of each RGB component of the color of the current pixel to the TV controller's DAC, which then used these numbers to control the signals sent to the CRT (Cathode Ray Tube) display (which usually also required encoding the analog signal according to the standards for video transmission, such as NTSC, PAL or SECAM). The introduction of separate chips to control the framebuffer and the graphics modes has been introduced later, to move the load from the main CPU to that separate chip, so that it could do something else in the meantime. Ironically though, it usually couldn't, since the data bus was shared by both the CPU and the graphics chip, and when the graphics chip was in the middle of generating the picture, it was blocking the access to the RAM entirely so that the CPU couldn't access it at the same time (but it could at least work on some calculations on its internal registers :q ). That's why they introduced separate memory chips (VRAM) and separate data buses between the VRAM and the graphics chip.
Dave's Dev Lab Yes, that seems like a bad practice, anyway I just ordered some 2mA LEDs (with resistors to limit the current) and I am going to test how much will the voltage drop at just 2mA.
I remember back in the day that TTL could drive LEDs and even small motors directly! That was one of the practical differences compared with building with the CMOS versions of the 74000 series. IIRC "LS" is "low-power Shockley" so it probably doesn't drive as much as the original series.
I don't know who this "we" is who swapped these wires, Ben ;-) I wonder with something like this it would have been better to test as you went along after each bit was hooked up, especially since there are so many overlapping wires.
Hm, video has been on for a while but I noticed something I don't understand. At about 3:00 onwards you start putting values into the registers. Why do the yellow LEDs not light up in that process? I thought they represent the state of the bus and because the registers load from the bus the LEDs should represent the value you set with the wires and not stay off. What am I missing, can anyone help me out?
ferrari2k Hey! I might be a bit late, but still. He is using a property of one of the chips, that is that they count no value as high. So he can have some LEDs connected to GND (0) and some not connected to anything, which are then interpreted as high (1). Hopefully this is understandable enough.
first try, lucky i watched it in advance, so i saw his was wrong and could connect all more careful XD . only shorted the inverted connection to high. lucky no chips were harmed XD . this tooke me way more than his 15 min ..
It depends on the logic family I think. But Ben is probably using chips with TTL levels, those are > 2 V for high and < 0.8 V for low, so then yes, it should be enough. I'm surprised that the red LEDs don't pull closer to ground than 2.5 V, I think red LEDs can easily go down to 1.7-2 V voltage drop. He really should have series resistors for those LEDs to make sure that they don't mess with the logic levels.
Can someone help me. I have this weird problem where the connection for the first bit is showing as high when it should not. I double checked my connections and did not see anything wrong
An issue I had with my 74LS283's is that if I leave C0 floating on the chip where its not connected it defaults to high. So I had to figure out why I had a magic 1 when it should have all been zero. How did your chips not require C0 being pulled to ground? Is that variations between manufacturers? I'm using Texas Instruments SN74LS283N. I think the datasheets for them show C0 pulled high by default with a 100Ohm resister.
Actually, turns out I'm stupid lol, realised after I posted that my ALU wasn't subtracting correctly. Apparently I missed where you connected the C0 to the line that inverts for subtracting. Apparently I skipped over the tiny part of the video where you talked about that too :/ /Edit, also your series is amazing. I am learning much faster then I normally do on my own with books etc.
Is there a forum if you have problems with building the computer? My LEDS are draining too much power and thus change the result of the calculation. If I take out the LEDs from the B Register, the result suddenly is correct.
Hi Ben! Do you have by any chance a list of all components needed to build the whole thing? I would like to go step by step but ordering once per video is too much waiting :)
You can buy a book from amazon that has all schematics for a very similar processor but which includes jump instructions etc and also goes on to show how to do it with transistors (Computer Time Travel).
Hi Ben, I am from england, 7400 series chips cost £2 a chip and you mentioned $0.50 per chip. where do you get them from. If your supplier is not available in england, where would you recommend me buying them. It might be a good idea to mention it in your next video!
If your down to wait 6-8 weeks to get your components, I buy mine from China over ebay. I often get 10 chip for 5$, free shipping and I have access to manufacturer like Texas Instrument, Fairchild, Hitachi. There is also Chinese manufacturer but I try to stay away because the schematic are often inaccurate or simply not available at all.
+Thomas Oliver I don't have one in particular, I buy from the search results directly and never had any issues. If you're looking for a "real" store I second that mouser.com is a really great place to buy if available in your country
100.000 views. 2400 likes. 8 dislikes. just do the maths... some people have low IQ and probably do not understand the difference between like or dislike. or they expected a video with funny cats...
Shouldn't the output of the 4 bit binary adders be 9 bits because you're adding 2 8 bit numbers? (Where is the carry out of the second adder?) Also in subtract mode, you're not dropping the left most bit? Don't you have to always ignore the left most one?
to fix one error, placed somewhere - we will make one more error)) this how born such places of code - don`t know why this is here, but without it - nothing works
I think you're right. If you look at the wires he "accidentally" swapped, they bend in different places, indicating which should be which. And after swapping back they align neatly. I don't think that's a coincidence.
📺💬 Taking something about ALU. 🥺💬 Integration IC, I searched on the Internet for an arithmetic operators table for SN74LS283N but it is not freed or required registered. 🧸💬 We called it an adder but it can do more than summing 2 variables together, and it can perform a carry bit for the next ALU to perform a longer input operation. 🐑💬 Working with the clock you should use an adder not because it is fast but reduce mistakes from wiring and the environment, it is true if you accidentally make some of its pins broken but the remaining still can work but not voltage input because it uses the same source. 🐐💬 The integration build good when we have a problem with the clock or delay action we looking at source first because this integration IC not found broken often. 🐑💬 It is not broken we have Ben. 📺💬 This kind of system builds for the persistence of work and it integrates the possibility of working and stability. 🐑💬 Using ALU help with system persistence because we reduce a lot of wiring connection and they use the same assumption. 🐐💬 The only problem is, it is using the same VCC source I want to guarantee its working persistence then I have to use multiple ALU. 🧸💬 You can think of it as a current feuls, you replace when it working abnormally that is why when we see from movie there are many of ALU units and they can swap them.
11:10 "It probably doesn't matter where we screwed this up, as long as we fix it somewhere" ! words to live by
Not necessarily. For something like this, sure, but if you are doing complex things with documentation, you need to fix things to match the design documentation or change the documentation to match the fix. Fixing something in a way other than what is in the design documentation is a recipe for a world of pain down the road.
This guy makes things seem so simple.
lol cringe
...Why is that cringe....?
That's true, but I would also say that using a good problem solving method has the wonderful effect of simplifying complex things. It should be methodical; start by gathering information (what he did by loading simple values in) to try to diagnose what's happening. As you see things, use that to update your hypothesis of what might be wrong. Keep refining this to hone in on what the issue is.When you do that, _most of the time_ the fix becomes obvious. There are definitely times when there is complexity built into the problem space that makes it much harder, but those are relatively rare -- multithreaded/async programming is one example.
The absolute worst thing you can do is just try random things.
..."I don't really know anything more about this than you do..." said the guy who built a computer to the people learning how to do it.
/chuckle so modest!
Lol, absolutely nothing wrong with your comment; but I just gotta say that Ben is such a good teacher that at this point at least, I really do understand the entire circuit. This has been such a great project so far, and I love how the more complicated it gets, the better it forces you to understand the system. Thank you so much Ben!
1:10 - that's where he says it
I have to compliment you on the cleanliness of your wiring. When I was in high school in the 70's, my electronics teacher would not accept any project that was not neatly wired up on breadboards, done exactly like yours. Even if it all worked, you could get knocked down a full grade level on any projects not wired neatly like you have done. Since then, I have not seen anyone who has done this. Thank you and keep up the good work!
Great video Ben. I'm glad you recorded the trouble shooting process to show to us.
+1
I really appreciate that you showed how to troubleshoot things too. Almost everyone would simply cut it out and once corrected, they will make a video like nothing ever went wrong. You are making a wonderful job, thank you Ben.
I feel so guilty for my part in what I did to "us." "We" really need to pay closer attention ;)
I've got this old HP "digital" power supply from the '80s. It uses binary for programming the output. Your really helping me understand how to build a simple interface. I think the manual was designed to be overly complicated to ensure people didn't try to just build stuff themselves. The retail price was $3800 in '89. It's probably just a lead weight at this point but I figure it's a good learning experience.
Thanks again,
-Jake
This might be the most important video in the entire series.
Superb video series. A wider range of colours might help with diagnostics. Where possible I follow the resistor colour-code: black for bit 0, brown for bit 1, red for bit 2 and so on. For most circuits the benefit outweighs the minor risk of confusion with, say, black for ground and red for Vcc.
That’s nice. Any swapped bits will be immediately evident by the order of the colours!
Your videos are pure joy! It's like pull up a sofa, turn down the lights and get some popcorn.
My dad worked all his life reparing electronics and I learned just from watching him when I was a little kid, this videos brings back so much memories from my youth.
RE 7:12 = tracing your line- JUST A THOUGHT: maybe it would be better if you ran your data lines in more than just one color. Meaning keep your nibbles* the same color so Register A would have Orange/White and Green/White. Register B would have Yellow/Green and Yellow/Blue the same color. With 25 pair you have more options for color. I know that is hard, but I found if you can find yourself 25 pair telephone (office) cable (number 22 gauge wire), you have more options to identify your runs. The hard part is where to find 50 feet of #22 Gauge pair telephone cable. But it's good to have. I really like your use of Red and Black wire. {*Note 4 Bits = 1 Nibble. Just for fun -> 8 Bits = 2 Nibbles = 1 Byte.}
I love this series! I wish this had been part of my curriculum in my Boolean Algebra class when I was studying for my Computer Science degree back in the mid-80's. By the way, Boolean Algebra and Numerical Methods were two of my favorite classes in my program. Thank you for doing these. You are a fantastic teacher!
This whole series is great. I'm glad you added this video. It's good to see some troubleshooting and fault finding in action. Also, I would like to say thanks for breaking down datasheets. Some people, i.e.....I don't always know how to interpret them. Seems like every time i read one i end up with more questions. So, thanks for stopping to answer some of those questions.
Reminds me of my very first computer - a TRS-80. I knew that machine so well that when video chip went I could tell from the screen display and knew WHAT chip it was.
No picture on the screen --> it's the video chip ;)
Only sad was Tandy did not know what it had. The idea of Having two sets of Registers pairs in the Z-80 CPU was genius. So when you had an interrupt happen you did not have to pop everything onto a stack, load the interrupt handler, run the handler, then pop everything off the stack and resume with the main program. With the Z-80 you just pop back and forth between the two sets of registers as needed. But the other thing Tandy failed to understand was how to use the rest of the chips that went with the Z-80 CPU like the PIO, and the CTC, and the SIO, and the DART. They made there own version of those chips out of their own "GLUE" (Their own logic- meaning they re-invent their own wheel for those chips). We are just now getting around to use those ideas that the Z-80 had some 35+ years ago. The other fault with ZILOG was they did not appreciate the guy who hand lay-out the Z-80 CPU Chip in the first place (NONE of this computer aided design stuff). When he left a lot of his ideas left with him, and the Z-8000 did not learn from what the Z-80 did, the guy that made the Z8000 tired to make it like Intel did. And Zilog paid the price for their arrogance. The other problem with ZILOG was they did not advertise the Z8000, thinking they had everybody in their back pockets. Problem was Intel knew better, and left Zilog in the dust when they started talking to IBM about their personal computer.
Don't forget that the Video for the TRS-80 was through the memory. It was directly tied to the memory. So for every thing you saw on the monochrome screen there was a place in memory for it.
Same thing for the Keyboard. None of this separate keyboard with a dedicated CPU to decode the keys, and get rid of keyboard bounce..
Also TRS-80 Mod 3 & 4 were the days where you only used Static RAM, which ate a lot of power (Great for heating your room). The Z-80 DMA could handle D-Ram but I don't remember that in the TRS-80s.
wow, z80 was "hyperthreaded"
Nice to show how to trouble shoot for people who are beginners and may not be sure how to correct an issue like this.
I came across an issue with the ALU showing strange results, following diagnosis, I came to the conclusion it was down to the LEDs drawing too much current which meant the voltage coming out of the XOR gates was below the 2v required threshold for the Adder ICs. I re-engineered the design of my registers and ALU to use 330 Ohm current limiting resistors, you can see the layout here: twitter.com/ukanalyst/status/887743134003867648.
If it helps anyone, the ICs I'm using are from Ali Express/eBay and are marked as follows (I assume it must be down to the ICs as Ben doesn't have the same issue):
4 Bit Registers: DM74LS173AN
Quad XOR ICs: HD74LS86P
4 Bit Adder ICs: SN74LS283N
The LEDs I'm using are 3mm Red LEDs with a stated forward voltage of 2V
He-he, it was nice of you showing how issues can be debugged... Cause I'm sure you set that!
DAMN YOU MURPHY!!!
Wow, this is great! I've got to give this hobby electronics stuff a try.
That wire fix reminded me a little of open heart surgery (-:
9:57 "Somewhere we've swapped". We? Well, I get the blame for most things so I guess I better be involved in this one as well.
Great job! I hope you will show the progression of adding in a better BUS and whatever controller or memory components that are still to come! I've always wanted to see an example of how a very simple computer works and you are totally making it happen !
If you didn't sound so sincere, I'd assume you built in the mistakes on purpose 😂
Great series and well made video, especially to do the actual troubleshooting on camera 👍
Love your videos.... I wanna know how you get those jumpers wires so nice and of exact length, they are a thing of beauty
He probably builds it first and bends them in place, then strips them, then pulls it apart putting the wires in a nice neat line left to right or something off camera, so they are magically cut and bent to length and where and when he wants them when he does it again on camera :P
You can see how he cuts and bends it when he does the clock wires for the A and B register on the last video.
@@MrGoatflakes Here's one that I prepared earlier.
This is a pretty good explanation of how to get them perfect each time: ua-cam.com/video/4F3NueYBQUg/v-deo.html
Absolutely loved this video! Thanks, Ben)
Awesome video, thx for doing this! I'm a software guy by trade, but I really want to get started at hobbyist digital electronics, and these videos are truly inspirational. Cheers!
Maaan, I want to build a 4-bit PC myself like you.. Great job, at least now I know where to start thanx
its a 8Bit but yeah, im gathering up the parts myself to try and build one
Damn bro called THAT wiring a rats nest. You seriously have the best wiring ever.
My bug at this point was that my power supply wasn't up to scratch. Up to this point I was using a ELEGOO Uno Kit Breadboard Power Supply Module rated as 700mA. I was measuring the current as 0.5A so figured it should be OK. After a minute or so the expanded circuit started exhibiting erratic behaviour, resetting the clock module and the register values. The behaviour wasn't deterministic, and a ruled out a loose connection by giving the breadboards a good shake! The power supply module started to get warm and smell a little like Scalextric, so I switched to an old Apply 5.2V 2.5A power supply and stripped some USB leads like Ben did and all is well.
To help debugging I added an extra little circuit to allow the register values to be set easily, comprising an 8 position dip switch with pull down resistors connected to a 74LS245 connected to the bus. It fitted neatly left hand side of the placeholder bus breadboard, and allowed me to debug by setting both A and B to 1 and stepping through.
The cliff hanger was staggering.
I love your videos. Looking forward to buying a kit soon!
I can't believe you didn't fix that second problem properly!!! Surely just flipping a a convenient wire isn't considered best practice?
Both wires goes to an xor gate then to an output. They are mixed up with eachother so it doesnt really matter what end you choose to fix. The xor gates arnt numbered so the only thing that is wrong with doing it this way is if you have OCD or something.
@@FreeStuffPlease Shouldn't all engineers have OCD? :)
@@lukerazor1 No lol. What he did was fine haha
Add dip switches to control data moving on bus and for loading and output registers, makes troubleshooting way easier.
I get the pleasure of re-wiring mine because I wired everything correct except for the order of significant bits, ie, my "128" bit was wired to the a1 and b1 side. This is making most additions work except when i go 1+1 which gives me 128.
You deserve RESPECT
when you are trying to find out the other end of a wire is such a bunch of cable, I highly recommend the continuity position of the multimeter. Feels like cheating !
Some DIP switches would really clean things up on this kind of breadboard situation.
Thanks from Texas.
I love your channel
Am I crazy, or is the pinout for those adders absolutely atrocious? I mean, it's not surprising - it probably doesn't really matter on a PCB, but on a breadboard it's just terrible to work with ;p
How come you get 2.5v with the outputs connected via an LED to ground. I would expect that arrangement to limit the maximum voltage to Vf of the LED or about 1.8v ?
I did not find any confirmed answer through the videos, but looks like these are some special LEDs with built-in resistor.
Alternative implementation, albeit not ideal for the learning process.
The addition and subtraction can actually be subject to a lookup table, in other words, you could program every possible answer into an EEPROM or two.
The EEPROM could have a 16-bit address input, with the upper order byte being A register's value and the lower order byte being B register's value. As a result you could program 64 KiB worth of math into the EEPROM and just have the computer cheat and look up the answer. If the EEPROM has a higher number of addresses than 16 bits it could even hold the subtraction table as well, with the most significant bit of the address being the SUB signal, and 128 KiB of answers. To facilitate the carry flag, you could have the EEPROM actually output 9 bit values instead of 8-bit values.
I may have to look at the data sheet for the EEPROM used in this build.
Troubleshooting is the bread and butter if you build such things.
Plot twist: he deliberately misconnected the wire in previous video in order to have material for this one.
Umh, where are the corner cases? E.g. 0 - 1 => all output LEDs should light up. Or 0xff + 0xff = 0x1fe.
You could also add bit 9 (LED 9) on the output to indicate an overflow / carry.
Hello Ben. I'm following along as a way to learn more about electronics. How much more complicated of a system would you need in order to have basic pixel video output?
It depends on what video output you have on mind. A CRT monitor would be hardcore. An LCD screen is a bit simpler to deal with. But if you just want something very simple, then how about something like this?:
cdn-learn.adafruit.com/assets/assets/000/002/936/medium800/led_matrix_rgbmatrix3232_lrg.jpg?1396789186
Hey, it has pixels :)
Or still simpler:
cdn-learn.adafruit.com/guides/images/000/000/018/medium800/green88smile_t.jpg?1448300904
In the end, compared to his original computer, you would need more memory and a way to decode a signal into the pixels. You would also need a module that does something a screen could use. With this comp (which is really just add/sub) you can just use a 7 segment display for each digit, and a BCD so you don't get a hex output.
IanCraftsAndMines Why not hex for the output? It is more useful, because you can easily decode it mentally into bits: each hexadecimal digit decodes into exactly four bits, according to the translation table below:
0=0000 4=0100 8=1000 C=1100
1=0001 5=0101 9=1001 D=1101
2=0010 6=0110 A=1010 E=1110
3=0011 7=0111 B=1011 F=1111
But you cannot easily do that with decimal digits. That's why programmers usually work with hex numbers rather than decimal - because they can "see the bits" behind the hex number.
But if we insist on using a 7-segment LED display, why not just make it more universal and control each of the segments separately by one bit? There are usually 7 segments and the dot, together adding up to 8 bits - the exact number of bits of our machine word :) So we can simply make one 8-bit register for each of the 7-segment displays and then set the appropriate numbers in them directly from the data bus to turn the segments on or off :) This way we could even display some other stuff than just digits: we could display hex digits, or even some simple alphabetic characters or rotating wheels ;) The conversion from binary digits to 7-segment codes can be done in software then. Or, if you insist, you can add some decoder on the breadboard of the I/O device for the display, so that you pass the input numbers from the data bus through the decoder if needed, but still having the possibility to control each particular segment independently if needed ;)
Christian Williams A typical video controller for raster display (a picture made of pixels) requires some sort of memory where it stores the numerical values of each pixel representing their colors. This memory is called VRAM (Video RAM), and the part of it where the image being currently displayed is called a "framebuffer". The computer can store data in there to make something to appear on the screen. Sometimes it can also read those data to make some color mixing (e.g. alpha blending), but it is usually more efficient to make this memory write-only.
Then there is another part of the video controller which constantly scans the framebuffer and depending on the information stored in there it updates the display (e.g. lights up the particular LEDs or sends particular informations to the CRT to activate the electron gun when it points to that particular pixel on the screen). This piece of hardware often needs to make some digital-to-analog conversion of the numerical values of the pixels' colors into voltages controlling the display. Therefore this piece of the video controller is called the DAC (Digital-to-Analog Converter). So you need at least these two components if you want to make a raster display for your computer ;)
Before raster graphics, vintage computers were directly controlling the TV controller by the CPU. As the electron gun was scanning the screen dot by dot, the CPU was sending the numerical values for the intensities of each RGB component of the color of the current pixel to the TV controller's DAC, which then used these numbers to control the signals sent to the CRT (Cathode Ray Tube) display (which usually also required encoding the analog signal according to the standards for video transmission, such as NTSC, PAL or SECAM). The introduction of separate chips to control the framebuffer and the graphics modes has been introduced later, to move the load from the main CPU to that separate chip, so that it could do something else in the meantime. Ironically though, it usually couldn't, since the data bus was shared by both the CPU and the graphics chip, and when the graphics chip was in the middle of generating the picture, it was blocking the access to the RAM entirely so that the CPU couldn't access it at the same time (but it could at least work on some calculations on its internal registers :q ). That's why they introduced separate memory chips (VRAM) and separate data buses between the VRAM and the graphics chip.
Thanks a lot, this will take a while to digest.
If i change pin from subtraction to addition, the value on Register B is changing. How to troubleshoot it?
How does he drive LEDs with ttl outputs?? Most ttl chips including the 74ls283 can only source 0.4mA and LEDs usually require like 10mA.
Dave's Dev Lab Yes, that seems like a bad practice, anyway I just ordered some 2mA LEDs (with resistors to limit the current) and I am going to test how much will the voltage drop at just 2mA.
I remember back in the day that TTL could drive LEDs and even small motors directly! That was one of the practical differences compared with building with the CMOS versions of the 74000 series. IIRC "LS" is "low-power Shockley" so it probably doesn't drive as much as the original series.
I don't know who this "we" is who swapped these wires, Ben ;-)
I wonder with something like this it would have been better to test as you went along after each bit was hooked up, especially since there are so many overlapping wires.
Hm, video has been on for a while but I noticed something I don't understand. At about 3:00 onwards you start putting values into the registers. Why do the yellow LEDs not light up in that process? I thought they represent the state of the bus and because the registers load from the bus the LEDs should represent the value you set with the wires and not stay off. What am I missing, can anyone help me out?
ferrari2k Hey! I might be a bit late, but still. He is using a property of one of the chips, that is that they count no value as high. So he can have some LEDs connected to GND (0) and some not connected to anything, which are then interpreted as high (1). Hopefully this is understandable enough.
first try, lucky i watched it in advance, so i saw his was wrong and could connect all more careful XD . only shorted the inverted connection to high. lucky no chips were harmed XD . this tooke me way more than his 15 min ..
and your jumpers gauge or any sort of number ,that i want to know. thanks
So 2.5V is enough for turning on logic circuits?
It depends on the logic family I think. But Ben is probably using chips with TTL levels, those are > 2 V for high and < 0.8 V for low, so then yes, it should be enough.
I'm surprised that the red LEDs don't pull closer to ground than 2.5 V, I think red LEDs can easily go down to 1.7-2 V voltage drop. He really should have series resistors for those LEDs to make sure that they don't mess with the logic levels.
It's always a little bit, that bite
Can someone help me. I have this weird problem where the connection for the first bit is showing as high when it should not. I double checked my connections and did not see anything wrong
No Kamala Harris commercials during my Ben Eater videos... PLEASE! I need all the braincells I can get.
An issue I had with my 74LS283's is that if I leave C0 floating on the chip where its not connected it defaults to high. So I had to figure out why I had a magic 1 when it should have all been zero. How did your chips not require C0 being pulled to ground? Is that variations between manufacturers? I'm using Texas Instruments SN74LS283N. I think the datasheets for them show C0 pulled high by default with a 100Ohm resister.
Actually, turns out I'm stupid lol, realised after I posted that my ALU wasn't subtracting correctly. Apparently I missed where you connected the C0 to the line that inverts for subtracting. Apparently I skipped over the tiny part of the video where you talked about that too :/ /Edit, also your series is amazing. I am learning much faster then I normally do on my own with books etc.
Is there a forum if you have problems with building the computer?
My LEDS are draining too much power and thus change the result of the calculation. If I take out the LEDs from the B Register, the result suddenly is correct.
Apparently these are some special LEDs with built in resistors.
@@k4be. Hm interesting. In the meantime I solved the problem by soldering resistors to the leds.
Hi Ben! Do you have by any chance a list of all components needed to build the whole thing? I would like to go step by step but ordering once per video is too much waiting :)
You can buy a book from amazon that has all schematics for a very similar processor but which includes jump instructions etc and also goes on to show how to do it with transistors (Computer Time Travel).
Mikhail Goncharov on his website eater.net
The bus wires look like a scorpion.
Hi Ben, I am from england, 7400 series chips cost £2 a chip and you mentioned $0.50 per chip. where do you get them from. If your supplier is not available in england, where would you recommend me buying them. It might be a good idea to mention it in your next video!
If your down to wait 6-8 weeks to get your components, I buy mine from China over ebay. I often get 10 chip for 5$, free shipping and I have access to manufacturer like Texas Instrument, Fairchild, Hitachi. There is also Chinese manufacturer but I try to stay away because the schematic are often inaccurate or simply not available at all.
Thankyou soooooo much, you have saved me from invading my wallet.
could you possibly give me the web address of this seller please, I can not find them.
I use mouser.com I think they ship to England but I'm not sure. I can get logic gates for about $.47 a piece, or 0.42 Euros
+Thomas Oliver I don't have one in particular, I buy from the search results directly and never had any issues. If you're looking for a "real" store I second that mouser.com is a really great place to buy if available in your country
baik aku layan ben amir
You should’ve made all the wires going to the ICs different colors, would’ve been easier to troubleshoot.
Wtf google plus, why did you change my name? WHYYY
This would be too many colors, and you wouldn't recognize anything anymore. Keep it simple.
You should put this computer onto a PCB when u are done with it
Ah, it was an off-by-one error.
One thing I don't understand about this video: why 4 people felt the need to dislike it :P
They didn't understand it, and it hurt their fee-fees.
100.000 views. 2400 likes. 8 dislikes. just do the maths... some people have low IQ and probably do not understand the difference between like or dislike. or they expected a video with funny cats...
Shouldn't the output of the 4 bit binary adders be 9 bits because you're adding 2 8 bit numbers? (Where is the carry out of the second adder?)
Also in subtract mode, you're not dropping the left most bit? Don't you have to always ignore the left most one?
You should watch his video on two's complement.
Dear sir,
this is very good program.please tell me if single phase could be tronsformed into 3phase by using atmel or pic etc,
to fix one error, placed somewhere - we will make one more error))
this how born such places of code
- don`t know why this is here, but without it - nothing works
I mean if one side is swapped, then swapping the other side just makes them normal wires going wheee they should be.
Unsigned Addition and Signed Subtraction... hmm
i burned a chip cause i thought the other video was unfauilty 😭
14:00
Why u dont use resistor ?
Seems to me that Ben just created a technical debt.
I'm 100% sure you connected the wires incorrectly on purpose, but good video anyways.
I think you're right. If you look at the wires he "accidentally" swapped, they bend in different places, indicating which should be which. And after swapping back they align neatly. I don't think that's a coincidence.
You, my friend, need to invest in some toggle switches
first
does anyone care?
The sniper for sure ;)
First... is the least significant bit.
📺💬 Taking something about ALU.
🥺💬 Integration IC, I searched on the Internet for an arithmetic operators table for SN74LS283N but it is not freed or required registered.
🧸💬 We called it an adder but it can do more than summing 2 variables together, and it can perform a carry bit for the next ALU to perform a longer input operation.
🐑💬 Working with the clock you should use an adder not because it is fast but reduce mistakes from wiring and the environment, it is true if you accidentally make some of its pins broken but the remaining still can work but not voltage input because it uses the same source.
🐐💬 The integration build good when we have a problem with the clock or delay action we looking at source first because this integration IC not found broken often.
🐑💬 It is not broken we have Ben.
📺💬 This kind of system builds for the persistence of work and it integrates the possibility of working and stability.
🐑💬 Using ALU help with system persistence because we reduce a lot of wiring connection and they use the same assumption.
🐐💬 The only problem is, it is using the same VCC source I want to guarantee its working persistence then I have to use multiple ALU.
🧸💬 You can think of it as a current feuls, you replace when it working abnormally that is why when we see from movie there are many of ALU units and they can swap them.