Join me building all the main components of a stand alone computer system from discrete components, including a pipelined cpu, sound system, UART and vga display adapter.
Follow me on Twitter: twitter.com/WeirdBoyJim Or Join the channels Discord: discord.gg/jmf6M3z7XS You can support the channel on Patreon: www.patreon.com/JamesSharman
Hi James, I noticed cleaning up my boards with 99pc alcohol before reflow almost totally removed solder bridges issues. Also routing 4 layer boards I know is more expensive but saves you big time and generally improve your signal quality.
I've never done the trick with kapton tape on the pads I don't want to connect, but that's one I'll likely use in the future. A couple wires getting a first revision PCB working is pretty much the norm in the industry. Even in bigger designs with a team and design reviews it's always possible to miss something that looks obvious in hindsight. I've seen whitewires in finished products I've bought, sometimes it's cheaper to fix a few thousand boards than scrap them all. Bit of clever wire bending, a bit of kapton to hold them down and the fix will last forever.
This was really funny, because I made a very similar mistake recently. I'm working on a board for the RC2014 bus that has a TangNano 9k module as a VDP with HDMI output. And I because the data lines are named backwards in all the VDP datasheets, of course I wired the up the wrong way around. In my case, I didn't have to do a physical bodge, but could just swap the data pins in the FPGA.
@@weirdboyjim only temporary of course. New boards will be made with the right wiring. But I can't afford that right now, so I had to fix it temporarily so I can keep working on the software for it
It was a nice board and I agree that running down an issue and making it work occasionally is better than it always working first time. I enjoy the debugging process and fix cycle, feels like winning to me 😂
For SPI: you can do that with 2 shift registers and a counter. And SD cards really just "speak" SPI on a hardware level. The problem is that the simplified specifications that the sd consortium puts out publicly doesn't have the sdio part in it. You have to be a company and member of the consortium to get that. I2C is much more difficult, because you have bi-directional signals that are sometimes output, sometimes input.
Congrats on the sponsorship, a perfect match. A tip for using desoldering braid on fine pitch pads and delicate wires - don't drag the hot braid over the track, it can cause the track to lift. Just place the braid over the track and run the iron over the back of the braid.
I have a board i made where i had two spi pins transposed. Thr bodge has been working fine for close on 4 months. I do intend to roll another board but there is zero urgency.
Dude. Your videos inspire me. I am a software engineer and I enjoy working with electronics. This stuff you are doing is very informative and I love the way your brain works. I would be interested in building out this creation of yours. I suppose I will have to join your Patreon site.
Fascinating. I particularly enjoyed the board layout part. I always feel so overwhelmed when I see that jumble of connections waiting for me to sort them out.
I was wondering if the routing software would allow inspection and validation by simulating the logic, etc. before one commits to a physical board. I would have thought that with today’s sophisticated tools, that would be built in.
That would be useful. But very difficult for a board like this where the simulation would need to know about the rest of the circuit to test it properly.
I found your "low key" endorsement of JLCPCB to be very winning, very convincing. It did not interfere with my appreciation of your video in any way. I hope they appreciate it! And I agree that your coverage of the "bodge" was very educational. All in all an excellent video.
Great work. A home-brew processor reading an SD Card is damn impressive! Back in the day we used to use "Kynar" wire-wrap wire for bodges. Highly recommended if you can source a spool or two. Two great features: you could use the wire wrap tool to handle the wire like a micro-manipulator: you could strip the wire and then use the tool to loop the tiny wire around pins and such for soldering. Also - the insulation was, I think, Teflon, so it never melted. You could have the insulation right up against the bodge and it wouldn't shrink back under heat. Oh, and it's tiny of course. 28 gauge or so?
Unfortunately most of the "kynar" wire you find around these days isn't :/ it's not silver plated and the insulation is PVC or at least something other than a fluoropolymer because the insulation shrinks back on heating and it doesn't take solder very well... It IS fine for *actual* wirewrap work but not many people doing that these days. I have a couple of km of that stuff unfortunately so I do most of my bodges with enameled copper wire (aka magnet wire).
"Too much decoupling" = "No room for any other parts" All this time I thought you were already sponsored by JLCPCB. It's a logical connection - they're great for this work and you've been demonstrating that from the start.
Accepting a sponsorship from JLCPCB must have been the easiest choice you could have made in the entire build, what with the number of PCBs you've gotten from them over the years - glad they were willing to support the project! And sympathies on the bodge - it looks about as clean as it could get, though. Nicely measured wire lengths and everything.
Another great video James! Ive been waiting for the next one. Congrats on getting a sponsor! I use JLPCB for my boards. Your channel deserves a millions subs. Have you got any other plans for additional spi peripherals? Ethernet would be cool (although probably doesn't fit with your design goals)
I like to use very fine single core PTFE wire for my bodges. the insulation wont shrink back with the heat and can be laid down with ease and a little superglue holds in it place just fine. in the days of TPH components it could be fed behind the legs of DIL IC's to hold it down on the PCB. some of our devolvement PCB's may have flown with mods like this, if the unit had a painted blue band around the case it might have some bodges inside. we used a 4 band system on the equipment. 1. A painted Red band, was equipment was for rig use only. 2. A painted Blue band, was could be flown but a back up form of communications must be carried. 3. A sticky tape blue band, a production unit but full qualification has not been signed off yet. once it was fully certified the blue band could be removed. 4. No band, fully certified production unit. No bodges were allowed if the band was not painted on. Now I'm free to bodge to my hearts content, happy days 🙂
I don't know how much it matters, but the Vcc plane covers the area under the RTC chip. If the chip acts up, that might be the reason. I never mind sponsorships that are relevant. And it is a little sad making it took this long.
@@weirdboyjim - an interactive line editor is not required. Something like simple token substitution will go a long way. Like in Bash where '!!' will cause the last command to be executed. Or '!!:s^txt1^txt2' which will substitute txt1 with txt2.
I know this is quite an old video by now, but for anyone watching in the future: flux will help with getting the solder to properly flow and not just bead up on the surface. There's a tiny amount in solder wire, but not enough to prepare those large surfaces.
@@weirdboyjim That's certainly true! I've spent plenty of time cleaning up leftover flux with alcohol and a close-cropped brush. Situational for sure, might help enough to be worth the mess on something like this edge connector. Love your videos, inspired me to implement a close analogue in verilog to run in simulations to really understand what's happening at the lowest level of CPUs.
So I watched all your videos over the course of the last week or so, and they've been great. Loved them to bits. If I may offer one small criticism however, it'd be nice if there was a playlist available that was just all of the videos in chronological order, instead of having to keep track of when there was an episode on for example audio between two episodes on the main computer. Not a big deal, and I did eventually figure out I could use the "watch later" function for this, and probably not worth the effort to fix at this point. But it did slightly annoy me.
@@weirdboyjim It wasn't hard to deal with or anything, they do show in release order in the videos tab on your channel page. Just mildly annoying to have to keep track of until I remembered that the queue feature exists.
3:05 You absolutely can use an audio tape with a modern PC, hook it into your line in/out ports and run any of the adapter softwares that are available. In fact if the JAM-1 supported audio tapes you could connect it directly to the PC like this and have the PC pretend to be an audio tape. Obviously that's very clunky though, handy if you're trying to get cassette files onto something like a Commodore but not very helpful for what you're doing.
My comment wasn't really "this can't be done" but more that it's not a supported usable storage medium. I've loaded code from my pc to the ZX spectrum via the sound card!
6:15 There does exist software where you can just throw in a truth table and it'll tell you the configuration of gates that uses the least gates to achieve that truth table is. I don't know how well it actually stacks up to a human who puts in the effort but it works better than PCB autorouting anyway.
6:20 Doing exactly this (taking a low current sound signal and turning it into a high current sound signal) was one of the first commercial uses of semiconductors. It's how radios worked, and how they took the very weak output from the antenna and turned it into something that could actually drive a loudspeaker.
1:00 What's funny is that IBMs super cheap sound solution was still more advanced that the Apple II. If you're unfamiliar, the Apple II requires the CPU to directly address the speaker, which is why whenever a game (or other software) wants to play a sound effect it has to pause everything else while for every sample in the sound output the CPU talks to the speaker. So if you want a 10khz tone, you better believe the CPU has to bang bits at the speaker 10 000 times per second. Combined with the lack of any kind of timer circuitry and the mess that was the Apple IIs graphics circuitry this kind of thing is why the Apple II was probably the worst gaming machine out of the big three in the US.
You might have done it by now, but something that makes a lot of sense to me is a macro to push/pull the entire transfer register into the stack, partly because it makes it a bit faster to write but also because it removes the possibility of getting the order wrong.
Coming back to this a few times, I am forever in awe of the sheer ability of the 4 channel MIDI. Its on the struggle bus for a few sections, but overall it is great for what it is. Even if the graphics are only a bit on the chunky side, but it just works.
You have done some great work, dude. And thank you so much for making this masterpiece series. I wanted to ask you about the list of all the components used in making this CPU and how much this whole costed you along with the schematic of the whole design. The reason is that i am planning to design this project for my final year and looking for the resources and information regarding this. Could you please provide me the list of components, whole design schematic and the amount of cost? I will wait for your response. Thanks!
Firstly I'd like to say, do not underestimate how much effort it would be to reproduce this. It's taken me a lot of time, you definitely won't be able to do it without understanding the workings and principles. There will be issues along the way you need to diagnose. When the entire build is finished I may attempt to make some more detailed documentation but my time is split between many things. The schematics I've released at EasyEda give you most of what you need, but you would need to put a bit of work in.
So the 2 address lines would go high when the failed constant load enters stage 1 after the memory load, then the same constant load, previously stored in the latch chip would get sent out onto the pipeline, but would't this mess up the constant? The constant would be what was currently coming from memory, but if the address lines are choosing the constant load over the constant, then wouldn't the constant load load in the opcode of the next instruction after the constant?
The constant load instruction is what is held back until the memory contention passes, that way the regular load does get the correct data that followed in the instruction stream.