Hardware SPI - IO from Scratch - Part 6
26:14
Output PCB - VGA from Scratch - Part 18
1:22:14
Signal Cleanup - VGA from Scratch - Part 17
13:34
SPI (Bit Banging)- IO from Scratch - Part 4
30:04
Timing Tweak - VGA from Scratch - Part 15
17:36
Interface PCB - Audio from Scratch - Part 10
28:35
ZX Spectrum, Expansion Port Research
40:45
7 місяців тому
Tile Data PCB - VGA from Scratch - Part 14
29:38
КОМЕНТАРІ
@rimmersbryggeri
@rimmersbryggeri 9 годин тому
Would the routing be more straight forward if you stacked the backplanes?
@BubblesKmac
@BubblesKmac 12 годин тому
Hi, can I please get the 3d print files for this and the build material list. This is perfect for what I need to build! Thank you!
@weirdboyjim
@weirdboyjim 9 годин тому
Oh, that's a while back. I have a couple of ideas on how to improve this now but I'll see if I can dig this stuff out.
@BubblesKmac
@BubblesKmac Годину тому
@@weirdboyjim no stress, if you are not able to find it, no problem!
@ecosta
@ecosta 3 дні тому
Just a random thought, but your assembler might need some form of macros if you keep unrolling loops etc.
@weirdboyjim
@weirdboyjim 9 годин тому
Indeed, macros have been on the "todo list" for a while, but as I'm sure you can imagine my backlog of things that would be handy is pretty large. It's difficult to prioritize sometimes.
@johanfr
@johanfr 4 дні тому
Thanks for great videos, so inspiring! I am thinking about getting a scope and have been looking at this model and its four-channel cousin. Apart from SBC design I want to be able to use it for VGA signal debugging when I create my own VGA circuit. Do you feel that the specs of your scope in terms of sample rate and clock frequency are enough to monitor such high speeds (25 MHz) or would you in hindsight have gotten a faster one?
@johanfr
@johanfr 3 дні тому
I ordered a SDS1202X-E today. It will be infinitely better than not having one at all I think.
@weirdboyjim
@weirdboyjim 9 годин тому
From my experience I've need hit anything where the speed as been a concern. I have hit a couple of places where extra channels would have been handy, working out how to use the external trigger alleviates that a bit.
@partides
@partides 9 днів тому
Hi. What camera are u using for soldering?
@weirdboyjim
@weirdboyjim 9 днів тому
You mean the microscope? ukposts.info/have/v-deo/bn5zhXmnen6lrIU.htmlsi=4cjRrJ1_Mk0ca4qW
@scome98
@scome98 10 днів тому
Mesmerizing and inspirational. Love this series.
@weirdboyjim
@weirdboyjim 9 днів тому
Glad you are enjoying it!
@captainboing
@captainboing 11 днів тому
hmmm... I am betting on a Little flash storage chip - Winbond beastie or maybe an LCD panel with touch... Excellent vid btw, I love the way we get the "brain ticking" and the typing, not edited out like others do. It still blows my gourd that this is a complete CPU (and now computer system) of your own design - it must be great to know everything on such an intimate scale - Grab yourself an ice cream.
@weirdboyjim
@weirdboyjim 10 днів тому
Very generous! I’m in Rome for a few days so it may have to be Gelato! The spi is definitely moving towards storage, I occasionally just let it run slowly to watch the led’s!
@johnjohnson5401
@johnjohnson5401 12 днів тому
Hi James! Did you consider making all the IO hardware memory-mapped? In this case the CPU would not depend on peripherals and would be a general-purpose CPU with simpler general-purpose ISA instructions. Why did you decide to make IO a part of the CPU and ISA? Is it for better performance? Thanks for the videos!
@weirdboyjim
@weirdboyjim 9 годин тому
This is a discussion that almost needs a video on it's own. Memory Mapped IO (I do a little of this in the vga circuit) is really just IO implemented as memory operations without additional support from the cpu. Processors like the z80 have dedicated IO circuitry which still works very much like memory but separates the address space out. But those two are not the only way to do it, the "IO Ports" on my build work more like some microcomputers. The bus is the internal main bus and those "port's" are just otherwise unused addresses for main bus devices, reading or writing to a port is exactly the same as asserting or loading one of the 8-bit registers. There is no hardware at all to support the IO in the core cpu, the only things it costs me is the instruction space. In this particular architecture the IO is indeed faster since it never touches the memory system so it doesn't cause a fetch stall.
@connorwood95
@connorwood95 12 днів тому
At this point I'd be looking at buffering SPI output, so multiple bytes can be read without the CPU needing to consume them on exact clock boundaries, and a WAIT input on the CPU so the SPI subsystem can block execution until data is ready without needing lots of explicit NOPs with super precise timing. This build truly never ceases to amaze me. Really need to have a go at doing stuff like this myself someday 🙂
@weirdboyjim
@weirdboyjim 9 годин тому
It's always a balance on circuit verses code complexity. My tightest loop here is 3 cycles of action verses 5 cycles of delay, so I would only gain 5 cycles of parallelism for each byte of fifo (minus any management code). My sense is that I'm probably at the sweet spot for this build, but it's easy to see how that balance can shift rapidly.
@kirknelson156
@kirknelson156 12 днів тому
a lot of what you do is well above my head but still very interesting 🙂
@weirdboyjim
@weirdboyjim 9 годин тому
Good to hear you are enjoying it!
@mike44njdevils1
@mike44njdevils1 12 днів тому
I know this is an older video, but I'm damn proud of myself for catching the lack of a main bus connection 😂
@weirdboyjim
@weirdboyjim 9 годин тому
Someones paying attention! 😉
@skilz8098
@skilz8098 12 днів тому
I can see you are still working on and expanding the architecture and continuing to improve its ISA. When you finally complete this stage of the project where you feel it's completed, do you have any plans on taking it to the next step or level of abstraction? In other words do you have any intentions on implementing your own compiler - higher level language and do you intend to build your own operating system on top of it?
@weirdboyjim
@weirdboyjim 9 годин тому
A compiler would be an interesting thing to have, but code generation for 8-bit architectures tends to be pretty inefficient. I'm expecting future builds to achieve more in this regard.
@TheChrisSimpson
@TheChrisSimpson 12 днів тому
SPI display?? :D
@weirdboyjim
@weirdboyjim 9 годин тому
Nice idea, but that would overlap with the vga project.
@sparkybrit
@sparkybrit 12 днів тому
What’s your “bus tester”?
@weirdboyjim
@weirdboyjim 9 годин тому
It started out as a few bits of common circuit I used on a breadboard. It has a d-type latch, a couple of line drivers and some debounced buttons. I was using that a lot of test bits of the circuit. I converted it to pcb for reliability. ukposts.info/have/v-deo/maKmaG5pfZyJzZ8.html
@TheEmbeddedHobbyist
@TheEmbeddedHobbyist 13 днів тому
I was going to comment on you changing some defines to a 0, which removes the readability of the code by adding magic numbers. And then just as i was going to type this comment you went back and replaced the zero's with some defined constants. well done. 🙂
@weirdboyjim
@weirdboyjim 9 годин тому
Glad I didn't disappoint (this time).
@TheEmbeddedHobbyist
@TheEmbeddedHobbyist 5 годин тому
@@weirdboyjim Never known you disappoint, provide talking points yes but disappoint no. 🙂
@twobob
@twobob 13 днів тому
The best
@weirdboyjim
@weirdboyjim 9 годин тому
Thanks TwoBob!
@TheAzuratis
@TheAzuratis 13 днів тому
I think now would be a good time to add a DMA Engine so that SPI and UART can do bulk data Trasfere.
@weirdboyjim
@weirdboyjim 13 днів тому
Dma would require support on the cpu side that I don’t have, you may need to wait for the next cpu build for that.
@TheAzuratis
@TheAzuratis 13 днів тому
@@weirdboyjim something simmilar would still be posible, as it's own devices with it's own memory. Essentially an autonomous buffer which could opperate at different speeds from the cpu and would remove the nops with a flag check. But this only makes sense when you plan on adding multi-theading.
@davepost7675
@davepost7675 13 днів тому
It's always nice to see one of your videos pop up on UKposts.
@weirdboyjim
@weirdboyjim 13 днів тому
Good to hear you are enjoying!
@theboot100
@theboot100 13 днів тому
Great video again James! Cant wait to see what the device is.
@weirdboyjim
@weirdboyjim 13 днів тому
Thanks!
@djsmeguk
@djsmeguk 13 днів тому
Are you going to look at an interrupt driven handler, instead of all those nop?
@weirdboyjim
@weirdboyjim 13 днів тому
Interrupts rarely work with low enough latency, you would want some buffering as well.
@MuhamedUsman
@MuhamedUsman 13 днів тому
you are the most consistent engineer i have ever seen
@weirdboyjim
@weirdboyjim 13 днів тому
Very kind of you to say that!
@RealEngineer
@RealEngineer 13 днів тому
Man I wish I had your asm skills. Great video as always 🎉
@weirdboyjim
@weirdboyjim 13 днів тому
😊 thank you
@Minikahn1
@Minikahn1 13 днів тому
Can't wait to see the next step!
@weirdboyjim
@weirdboyjim 13 днів тому
Hope it doesn’t disappoint!
@SirDrinksAlot69
@SirDrinksAlot69 13 днів тому
SPI storage incoming.
@weirdboyjim
@weirdboyjim 13 днів тому
Lots of interesting things once I have storage!
@erniecamhan
@erniecamhan 13 днів тому
Love watching what you do...but haven't a clue what you did 😊
@weirdboyjim
@weirdboyjim 13 днів тому
Thanks Lol, Glad you are enjoying anyway.
@andrewwatts1997
@andrewwatts1997 13 днів тому
Congrats! A great milestone ;)
@weirdboyjim
@weirdboyjim 13 днів тому
Thank you very much!
@pipsqueak2009
@pipsqueak2009 13 днів тому
Fascinating progress . Thanks for sharing
@weirdboyjim
@weirdboyjim 13 днів тому
Thanks for watching!
@mike44njdevils1
@mike44njdevils1 13 днів тому
What I find intriguing about watching this series: Even though I have very little coding experience, I'm having almost no issues following James' coding. Well done!
@weirdboyjim
@weirdboyjim 13 днів тому
That is good to hear! In many regards assembly language is really easy to follow once you have a rough idea of what the instructions do (and good naming helps with that!).
@OscarSommerbo
@OscarSommerbo 13 днів тому
Oh, I think I know what is coming...
@weirdboyjim
@weirdboyjim 13 днів тому
Ha! I expect you probably do. What you don't know is the first big demo that's going to use it! 😉
@OscarSommerbo
@OscarSommerbo 13 днів тому
@@weirdboyjim Well, removing bit banging serial did evoke some memories. And I know one thing that use spi almost exclusively. Ohhh, demos are always fun, all parts of them. 😉
@mikehibbett3301
@mikehibbett3301 14 днів тому
Great progress!
@weirdboyjim
@weirdboyjim 14 днів тому
Thanks! Glad you liked it!
@wChris_
@wChris_ 14 днів тому
Are you going to interface with an SD-Card? because this is the only thing i can imagine that is not only useful, but can also saturate the Interface.
@weirdboyjim
@weirdboyjim 14 днів тому
The ability of SD cards to talk SPI is indeed an interesting possibility...
@robiniddon7582
@robiniddon7582 13 днів тому
Remember the first few iterations of the MIPS architecture had a branch delay slot that was invariably filled with a NOP by the compiler, let alone the programmer 😂 What you have will no doubt work for you, but possibly it's worth an auto clock counter so that you can trigger it and it just pumps the 8 bits. Could be triggered by the control line that currently controls the mux. Then you can overlap writing the Rx data to ram while the next byte is being clocked in, without having to be 100% cycle count accurate in the 'filler' code. Only worth it if the equivalent of *pointer++ = register takes more than 5 cycles or is nondeterministic.
@jensschroder8214
@jensschroder8214 14 днів тому
When the programmer inserts NOP code to move forward.
@weirdboyjim
@weirdboyjim 14 днів тому
Far more common at the low level than many people realize!
@johncochran8497
@johncochran8497 14 днів тому
Why are you using 2 shift registers? If memory serves, the SPI protocol sends bits in both directions at the same time. So you only need 1 shift register along with the capability to read and write the contents of the shift register in parallel. Algorithm is: 1. Store value to transmit in shift register. 2. Toggle clock 8 times while shifting register. This both output's 1 bit at a time from the shift register /and/ shifts in 1 bit of data from the client device into the same shift register. 3. Read value in shift register to get data from client. Effectively, you have a 16 bit circular shift register with 8 bits on your side and 8 bits on the client side. After clocking 8 times, the values in each register are exchanged with each other.
@weirdboyjim
@weirdboyjim 14 днів тому
You can indeed do it with just one shift register, but you need one of the more complex parts that can handle parallel read and write. The circuit logic is not any simpler and I felt it was easier to explain the separate functionality by handling shift in/out separately.
@cj09beira
@cj09beira 14 днів тому
@@weirdboyjim 🤔so that's why 299 wasn't used
@teknifix
@teknifix 14 днів тому
SD card? It's what I would like to add to my SBC so I don't have to load everything over a serial connection. Considering the demos you've created so far you may want to add bankable RAM, so the SD card would allow for a lot more assets in future demos.
@weirdboyjim
@weirdboyjim 14 днів тому
SD Card, I couldn't possible comment 😅. I'm not 100% sure about bankable ram, while it would be nice to have more memory none of my plans really need it. I'd rather save a larger memory pool for a future architecture that's designed to be able to make use of it.
@KeesJanLogemann
@KeesJanLogemann 17 днів тому
Just curious: Why didn't you choose for 8-bit synchronous Up/Down counter like 74ALS869? Cost? That's 2 chips instead of 4!
@weirdboyjim
@weirdboyjim 17 днів тому
A couple of reasons, but my reasons are not necessarily great. My preference was to use commonly available parts that are also available in a wide variety of logic types. 869 seems to be a less common Part that only comes in a limited range of families. In terms of your own circuit design there is definitely scope to use them though.
@digitalarchaeologist5102
@digitalarchaeologist5102 19 днів тому
Maybe the PCB isn't going to be published, so might just be a moot point but perhaps through hole caps may have been easier for the average joe bloggs.
@weirdboyjim
@weirdboyjim 14 днів тому
Yeah, I wasn't expecting anyone to try and do this, so I'm mostly just doing whatever is easiest for me at the time.
@digitalarchaeologist5102
@digitalarchaeologist5102 13 днів тому
@@weirdboyjim Which does makes sense tbh. I know it's much easier to be an armchair critic than a content creator so thank you for what you do!
@mike44njdevils1
@mike44njdevils1 19 днів тому
I've been following this project on and off for about 2 years now. I know you wanted to be able to showcase every circuit you place on PCB. However, you seem to be limiting yourself to 2D thinking. Couldn't you put the Sprite hardware on risers ABOVE some part of the entire VGA circuit?
@weirdboyjim
@weirdboyjim 14 днів тому
I think it's all going to fit ok, working inside the constraints is an extra bit of challenge I like having. If I was really tight I could always stick a few passives on the back but I'd rather not do that. I appreciate my self imposed design constraints are not for everyone. The nearest I came to risers was for the Audio circuit, I thought I could stack channels above one another if I needed to without loosing much.
@pooyadarmani7803
@pooyadarmani7803 20 днів тому
تو وصل بکن نیستی
@weirdboyjim
@weirdboyjim 20 днів тому
Sorry, I only speak English. I tried google translate but it didn't seem right.
@pooyadarmani7803
@pooyadarmani7803 20 днів тому
خراب کردی بابا داغون شد
@ecosta
@ecosta 20 днів тому
I love to see the troubleshooting process. Too bad it is much easier to troubleshoot when you are back-seating... I spotted the vga connector bridge issue when you solder the board, but my I'm sure I would never see it if it was me doing the soldering... 😄
@weirdboyjim
@weirdboyjim 14 днів тому
I really kicked myself over that one. I am debating how I show the mistakes in videos, perhaps I should highlight them explicitly when I make them?
@ecosta
@ecosta 12 днів тому
@@weirdboyjim I like the chillaxing pace without breaks and blips. You are explaining your mistakes quite well without relying on highlights. And I find more amusing to spot those from my backseat when I do it without help... 😄
@davidrosset4457
@davidrosset4457 21 день тому
Kind of irrelevant question but how did you glue the Papers marked PIPE 1A to the ROM’s? There are those printers that come with glue yes? Can I print them different sizes with glue too?
@weirdboyjim
@weirdboyjim 21 день тому
Those are printed with a "Dynamo Letratag", really useful little thing. I label lots of my storage boxes, chips etc.. with it.
@davidrosset4457
@davidrosset4457 19 днів тому
@@weirdboyjim Nice, I ended up just using sticky paper and my regular printer, I figure it works fine too. Less spending! I like when I figure out cheaper solutions like this.
@chrisdickens4862
@chrisdickens4862 24 дні тому
Great video as always!
@weirdboyjim
@weirdboyjim 21 день тому
Glad you enjoyed!
@auliasabril1899
@auliasabril1899 25 днів тому
great work thanks to all your hard work
@weirdboyjim
@weirdboyjim 21 день тому
Glad you enjoyed it!
@stephanecome4234
@stephanecome4234 25 днів тому
Most impressive!!
@weirdboyjim
@weirdboyjim 21 день тому
Thanks!