Going to try out the Premier feature to see what it's like. I know some people have been looking forward to this module, I hope the series doesn't disappoint. Join us to discuss this and the other videos on discord: discord.gg/jmf6M3z7XS Support the channel on Patreon: www.patreon.com/JamesSharman
Please no Premiers! It’s annoying to have video listed in you queue which are not yet playable. When you release the video it will pop up soon enough! I unsubscribed all channels that do this stupid premier stuff. The serie will be very welcome! Always like your videos very much.
I was born in 2001 never got to see and use retro computers. But people like ben eater, slu4 and you have made me love those retro and homebrew computers. So a few days back i designed my own 6502 based computer (just a logisim simulation right now) and working on 320×240 res. 256 color graphics card. I have the exact same goals as you for my own video card with Sprite and scrolling features. Just the resolution is half of 640x480 becoz then i can use the same 12.58Mhz clock for the 6502 as well. Looking forward for ur series 😀.
I love the approach to this - build it largely in software, then migrate sections over to hardware incrementally. I am curious to see how you manage some of the features that you outlined, especially the sprite implementation, but very happy to wait and watch the story unfold. I suspect I will learn something new and very clever here, despite the amount of video display hardware that I worked on in the past. Roll on part 2...
That! I spent a while knowing roughly where I was going with the vga circuit but not seeing the best steps to get there in terms of videos until I hit on that idea.
I am 1000% on-board for this project! Also, I love that you nonchalantly mentioned that you got the processor running stably at 3MHz, which is something I'd have been running around and jumping up and down about, haha.
Hi James. Really enjoyed the new video structure where you explained so clearly the goals. Looking forward to the whole series. Great result already. Congrats.
Amazing, i cant wait to see the awesome power of this machine once its completed. A high point for me was the old Final Fight Capcom arcade board. Fascinating to see the development on this project. Ive only done tiny (5k range) 8bit hobby programs.
I think you missed some of my comments. The Latch is only a temporary measure to get a simple circuit working. Later videos will add a framebuffer, the sprites will be hardware as well.
That's a solid flex indeed. Looking forward to this, James. 640x480x24@60fps is very ambitious with discrete logic, but I have no doubt you'll pull it off.
Always worth aiming high! I'll be clear though, to say 640x480x24 implies a true color frame buffer. That would be nearly a megabyte of video memory, I'll be pulling trickery to fill the resolution like old style consoles/micros.
@@weirdboyjim Yeah. I understand. You'll generate the image on the fly from tiles, sprites, etc. Similar to the TMS9918, but with scrolling and better output specs.
@@weirdboyjim it could make for a couple episodes where an application specific unit that does fixed point arithmetic (multiply and addition) might be added to speed it up. It did take some time on the C64, but was 😍 to see.
When I first started learning how to make hardware sprite capabilities, I was shocked at just how less complicated than I was expecting it actually was. It's pretty much just shift registers pushing data onto scanlines. That's about it. Who would have figured?
Loving this video so much. I am coming from the good old age, when computers started to push into the home market and when »Commodore PET«, »TI 99/4«, »Atari 800« and at bit later the »C64«, the »ZX Spectrum« and the »Amstrad CPC« arrived (»Schneider CPC« here in Germany). Actually I am a Atari-800-geek (up until today). The moment you were designing your program to make a picture appear on the screen made me think: »This guy is programming the way like programmers of video games for the Atari VCS 2600 were doing!« Great to see those forgotten pearls re-appear! Thank you so much for this video. ♥
@@weirdboyjim don't feel bad. Your content is amazing. I'm just glad I don't have to wait until tomorrow. Yup I'm intrigued by this chip count. I just hope that's not an MCU. ;)
@@weirdboyjim totally unexpected and awsome! Welcome to the club of bitbanging VGA using your own processor! Cant be many folks who have done that. And no, it did not disappoint. :)
Thanks Seon. While in many ways this series will be a natural continuation of the cpu build the visuals will give far better progress feedback than I was able to demonstrate during parts of the main build.
If I remember correctly, we had two video buffers one being displayed and the second you could write to and you would swap buffers during the hoz blanking period. been a long time since i played with video on a CGA card. At work our 8086 boards were designed in house and there was no displays, lots of latched i/0 and DAC's controlling audio routing and volume. Fun days looking forward to next video.
On the older pc cards double buffering was always a horrible compromise due to limited memory. Even with a true vga card there you couldn't do 320x200x256 colour mode with double buffering by standard. There was a way of doing it but putting the memory into a different mode but the addressing became weird. I'll not be doing double buffering for this build, I want 60fps update so it's better to spend the address space efficiently creating the tools to do that.
alot of mcus have a RGB LCD interface which is just VGA but not anolog, the way I did a VGA DAC for it was with a r2r latter with a resistor on the output the lower the output to 0-.7v then put it through an opamp because current capibilities. I'm shure u can get a low value r2r latter and add a resistor on the output and use the internal 75 ohm resistor in the display to pull it down to the right voltage
Oddly enough I've been looking at that kind of interface from the other side. A lot of VGA display modules have that interface, and a board for converting from a regular vga input. When I design my output circuit I'll include the dac and vga connector but I'll look into adding the digital output header as well. Might save me some space if I use one of those modules.
The functionality reminds me of the NES PPU or SNES PPU for that matter. But somewhat limited with like sprites, but then again better in terms of color. With some up coming features like MMIO the thought of looking into Banking might be useful, especially with double buffering of the Display, while one screen is being displayed, the other can be updated. Memory Banking is not that Hard, for example you use One CPU Port (or multiple for different sections) as a select switch for different Memory or Rom Banks. The value is then demultiplexed and fed into the chip enable line of the selected Bank. The rest like output enable is already done. And lastly if you already have a 'copy functionality' built in the memory unit, it may be interesting to activate it on purpose with different source and destinations, some sort of crude DMA circuitry.
I've talked about banking before. I'm not planning on doing any in this series, I'm more interested in fitting it all into a small amount of memory as a challenge at the moment.
@@StefanNoack I think Chris is refering more to the project goals than the first circuit in this video. The 2600 was much more than bit banged video, it had basic sprites.
Lots of people have nostalgia for the old Specy. The π MHz thing was not deliberate and it breaks down if you work out additional digits, it's just the vga pixel clock divided by 8!
@@weirdboyjim Yeah I got that. .You quoted 3.14 the first time, then 3.146 later, but let me have my math nerd dreams OK :-) Looking forward to starting this series from Episode 1.
Would love to see a video on the Sieve, it would be neat to have it running on my own system. Also, the Amiga didn't reach release until 1985! The bouncing ball was shown during the January 1984 CES show and was written in one night.
@@weirdboyjim I have of course some electronic knowledge (basics) but mostly on the hardware side, programing is not my domain but seeing hardware and software collide to make something really cool is just fantastic to watch :) I am definitely learning things
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 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.
I like the idea of hardware sprites. I think sprites are going to be very interesting part of the project. Oh. And it looks like this video didn't make it to Odysee.
Sprites definitely help getting some interesting motion at high update rate. And they represent an interesting challenge if there is any kind of transparency (which there will be)
Fantastic work, James - keep it up! Been following this for a while, and looking forward to see how this progresses. A quick question - why is it 25.175 MHz, where 800 x 525 x 60 = 25.2 MHz?
Well spotted, that's an interesting question with a long and mundane answer. In truth it's not 60hz, it's 59.94hz! That's the standard for NTSC refresh despite everyone saying 60, in truth until recently almost everywhere refresh rates were described as 60 it was actually 59.94, this is legacy compatibility with NTSC that was deliberately out of sync with the US mains 60hz rate to prevent static artifacts in the color.
you are selling this short, 640/480/60/16,777,216 is not VGA spec but the spec of a later SVGA card. VGA maxes out at 640/480/60/16 with those 16 colors being able to be selected from any one of 262,144 colors from an 18 bit dac
My feature set is actually pretty tough to compare to the vga card sequence, but when I say VGA I was more referring to the output video/monitor standard.
Awesome video. Thinking about what you might do for VGA, I thought about your audio output videos and knew you wouldn't do something simple but you would create an 8-bit GPU, and I wasn't wrong. It is however more ambitious than I suspected. I've always gone down the 'keep it a simple as possible' route with my designs. I love playing with VGA and seeing the results of the changes immediately. I recon that you will have a lot of fun in the coming months with this part of the project. P.S. please do a video on the incremental sieve.
Thanks David. One of my ideas for a future build is to try and make an ultra simple (But practical) 8-bit cpu that it would be much easier for people to replicate. But this build is far more in the "overly ambitious" side of things.
What kind of logic series will handle the ~24MHz? Also hand-made R2Rs aren’t going to be particularly accurate, and without a massive array of trimpots (I’ve seen it before) you’ll get some nonlinearity. So I’d at least look for a monolithic parallel input 8-bit DAC that suits your project. Unless, you want to make discrete delta-sigma modulator circuits? Would be a very in-depth process, but it could be fun. Not sure how responsive they are, but at least you wouldn’t have the 7F > 80 mega-glitch that R2Rs have. I’ve been meaning to do the math behind a Gray code DAC ladder, though I don’t think it would be easy.
The common basic logic series (LS/HC/HCT) are all fast enough, but only just. What they are not is fast enough to make sloppy design ok, in my cpu and other cpu designs I've seen on youtube there tend to be chains of logic that are required to settle within a cycle so the maximum clock rate is reduced, to make the vga work at the target rate it will be necessary to carefully track this. You are right that a simple ladder would definitely be a problem, a well made R2R ladder can be made to work but of care with resistor selection etc.. will be necessary "next closest value" and "10% tolerance" are not going to cut it. I'll get there in a couple of vids and you can judge my success or post your "I told you so" ;-)
Actually I made a better one while waiting for the premier to start. Same hardware/software but it a little bit of dithering on the image made it look much better. Something for the next one anyway.
I haven't touched FORTH since university but the kind of implementation you would put on an 8-bit cpu would not be suited to the kind of cycle precise programming I need to do here for the early VGA implementation.
@@weirdboyjim good point, I was thinking more of general hardware development. Just the ability to interact with a live system is extremely useful. The code, burn a ROM and test cycle gets old very quickly. Having said that, you hardware is outstanding.
That's my homebrew pipelined cpu. This vga project is one of a number of smaller series making add on modules for it. th-cam.com/play/PLFhc0MFC8MiCDOh3cGFji3qQfXziB9yOw.html
Can you make a detailed course playlist on making such electronics projects....I personally am interested in it and would love to learn from you😄....anyways awesome work and you earned a sub😇
Actually many vga cards do have support for both of those but the need was very much reduced for it when CPU’s and clock rates got so fast it became easy to redraw everting.
@@alexany4619 simple hardware scrolling just requires the ability to set the display base address and I think they can all do that. Sprite(s) are usually just exposed for the mouse cursor these days so maybe not plural in the common case.
Did it even exist one single VGA-card which supported more than one sprite? Was hoping to find a card with the Yamaha V9990 which should fill this gap but it seems, this VDP didn´t make its way into PCs.
I don't think it's practical. My pixel output loop (that gives me rubbish horizontal resolution) is unrolled at 3 cycles per pixel. The best I can do on z80 is 21 cycles so you would need greater than 20mhz to match this. In a few videos I'll have a frame buffer that will be much more suited to interfacing to something like that.
This is going to be legendary, I can already tell. Your goals for this are crazy ambitious! I would only suggest adding a character generator for text. But I suppose you've already thought of that. Good luck and I will be following along religiously.
Thanks Olavl! The plan does include something that could be used to display character data, but it will be a few videos before I talk about that in any depth.
@@weirdboyjim I know there are several solutions for that particular problem and I'm extremely curious how you are going to address it. I'll wait patiently for that, just hurry up will you ;-) (j/k) Another question if I may: is it at all possible to port existing games/software to your 8-bit computer provided you have the source? Or is the CPU too different from other architectures that this would be impossible?
I've been releasing bits of schematic as I make the pcb's, you can see a number of them on by easyeda profile (link in the about section of the channel).
It's not as easy as it sounds, the protocol maybe simple but the clock rates involved are much higher (As it's a serial protocol, for 24bpp it will be at least 24x higher) and that puts you in a frequency range where it's just not possible on a breadboard.
@@weirdboyjim It's not 24x higher, but only 10 (DVI and HDMI have 3 separate data lanes for R, G and B). It's 10x and not 8x due to 8b/10b encoding. But there are transceiver chips like TI's TFP410, which handle all of it internally, accepting a simple parallel in at pixel rate (25 MHz in your case for 480p) and sync signals. 25 MHz is probably a tad too fast for a breadboard anyway (especially for 24 bit parallel bus), but it's about as slow as it gets for full-blown 480p and it's a single-chip solution. You can build a breadboardable adapter for that chip if you insist on a breadboard (even though your final solution seem to involve a custom PCB, so such frequency is not a problem). And data lane speed (250 Mbps) for DVI/HDMI is not very high so you don't have to worry about exact trace impedance match either. I've seen 1080p transmitted over loose jump wires with my own eyes! :) Anyways, thanks for the great videos! You have a new sub!
@@asmi06 Ahh fair, I hadn't looked close enough at the spec to see the 3x lines. But a specialist encoder chip would put me off it as I'm trying to keep the BOM short and simple.
@@weirdboyjim Of course it's your call, but I don't see how else you can achieve full 480p in true color, which you stated as the end goal. Unless you resort to FPGA like Artix-7, which can do TMDS natively, but using it will kind of make the rest of your CPU redundant, as you can stuff it inside the very same FPGA :) And it will likely run a lot faster too. BTW - have you considered going for something like Risc-v ISA, which seems to be all the rage currently in the hipster community?
@@weirdboyjim I was being rhetorical. I'm self taught in C++ for 3D Graphics and Game Engine Design, to Hardware Emulation, to Circuit Design to CPU and ISA Design. I was being sarcastic and dramatic about it. I have a very good idea the amount of complexity that goes into making the top of the line modern GPUs. They are far more complex than a multi-core CPU!
I actually just bought a vga to hdmi convertor so hopefully I can capture the output to add in as an overlay. Actually generating hdmi from a breadboard I don't think could work, it's a serial protocol so the clock rate would be far higher than is practical on a breadboard, at least in my understanding.
The parrots are cropped from "Kodac Image 23" from the Kodak image set, a group of images that have been widely used for display and image processing tests for since the early 90's. I think I first used this particular parrot about 25 years ago for a university project on palate mapping and dithering. I have a lot of respect for Ben's work, I've mentioned it several times in my videos but I have more than 100 videos out now and it wouldn't be practical to mention it in every video. My CPU project probably wouldn't have happened without Ben's but the design is very different. The VGA project here was roughed out before Ben's first video on the subject (There are passing references in my earlier videos) but my progress has been slow.
@@weirdboyjim Oh that makes sense. Thank you for the answer, and sorry for the accusation. I didn't know that you have mentioned him before, as I just found this video, and it seemed pretty interesting. Actually, as it turns out, it is interesting, and I really like the EEPROM for decoding the sync counter, that would have been my choice too, if I had money and time to make such a project. I'm very interested in the progress, especially the RAMs and how the CPU is gonna handle it. So keep up the good work!
Going to try out the Premier feature to see what it's like. I know some people have been looking forward to this module, I hope the series doesn't disappoint.
Join us to discuss this and the other videos on discord: discord.gg/jmf6M3z7XS
Support the channel on Patreon: www.patreon.com/JamesSharman
I'm very excited to see this new module.
Thank you for these amazing videos.
I'am soooo exited for this one. are u going to remake snake for vga?
@@-lolus- There might be a "Snek 2.0" by the end. But only so I can keep Snek around for posterity. I have higher goals.
Was driving, missed it!
Please no Premiers! It’s annoying to have video listed in you queue which are not yet playable. When you release the video it will pop up soon enough! I unsubscribed all channels that do this stupid premier stuff. The serie will be very welcome! Always like your videos very much.
Between you and Ben Eater, I don't even know what to do with myself!
Well hopefully order yourself some breadboards ;-)
Actually 😄😄
I was born in 2001 never got to see and use retro computers. But people like ben eater, slu4 and you have made me love those retro and homebrew computers. So a few days back i designed my own 6502 based computer (just a logisim simulation right now) and working on 320×240 res. 256 color graphics card. I have the exact same goals as you for my own video card with Sprite and scrolling features. Just the resolution is half of 640x480 becoz then i can use the same 12.58Mhz clock for the 6502 as well. Looking forward for ur series 😀.
Glad you are finding it interesting! Good luck with your build!
There were a few games in 320x240 256, even tho it wasn't a "standard" VGA resolution. Memory limitations and square pixels made it attractive.
I am amazed by the simplicity of the ciruit. Well done!
It will get more complicated before I'm done!
Now this scratches the itch!
Pleased I finally got this video uploaded!
I love the approach to this - build it largely in software, then migrate sections over to hardware incrementally. I am curious to see how you manage some of the features that you outlined, especially the sprite implementation, but very happy to wait and watch the story unfold. I suspect I will learn something new and very clever here, despite the amount of video display hardware that I worked on in the past. Roll on part 2...
That! I spent a while knowing roughly where I was going with the vga circuit but not seeing the best steps to get there in terms of videos until I hit on that idea.
I am 1000% on-board for this project!
Also, I love that you nonchalantly mentioned that you got the processor running stably at 3MHz, which is something I'd have been running around and jumping up and down about, haha.
Thanks! I was pleased with the 3.14mhz, but I'd had it running at 2.5mhz before and I'm quietly confident it can go a little faster.
Hi James. Really enjoyed the new video structure where you explained so clearly the goals. Looking forward to the whole series. Great result already. Congrats.
Thanks Ced! Hope the rest lives up to expectation!
Amazing, i cant wait to see the awesome power of this machine once its completed. A high point for me was the old Final Fight Capcom arcade board. Fascinating to see the development on this project. Ive only done tiny (5k range) 8bit hobby programs.
Thanks! Glad you are finding it interesting.
With the D latch, it is clearly CPU driven display like Zx spectrum.
With this approach I doubt dynamic sprits manipulation is possible.
I think you missed some of my comments. The Latch is only a temporary measure to get a simple circuit working. Later videos will add a framebuffer, the sprites will be hardware as well.
That's a solid flex indeed. Looking forward to this, James. 640x480x24@60fps is very ambitious with discrete logic, but I have no doubt you'll pull it off.
Always worth aiming high! I'll be clear though, to say 640x480x24 implies a true color frame buffer. That would be nearly a megabyte of video memory, I'll be pulling trickery to fill the resolution like old style consoles/micros.
@@weirdboyjim Yeah. I understand. You'll generate the image on the fly from tiles, sprites, etc. Similar to the TMS9918, but with scrolling and better output specs.
Can’t wait to see a Mandelbrot fractal being computed and displayed. 😎👍
Hmm, that wouldn't be too difficult but on an 8-bit cpu it would take a while.
@@weirdboyjim it could make for a couple episodes where an application specific unit that does fixed point arithmetic (multiply and addition) might be added to speed it up. It did take some time on the C64, but was 😍 to see.
When I think of fractal demos, I think of my old family 386. It took a while then, too. :-)
Very eager to see how handle sprites! One of my favorite things from my ol' Commodore 64 days!
Them spectrum didn't have them, I didn't actually do much programming with sprites until the game boy color.
When I first started learning how to make hardware sprite capabilities, I was shocked at just how less complicated than I was expecting it actually was. It's pretty much just shift registers pushing data onto scanlines. That's about it. Who would have figured?
Loving this video so much. I am coming from the good old age, when computers started to push into the home market and when »Commodore PET«, »TI 99/4«, »Atari 800« and at bit later the »C64«, the »ZX Spectrum« and the »Amstrad CPC« arrived (»Schneider CPC« here in Germany). Actually I am a Atari-800-geek (up until today).
The moment you were designing your program to make a picture appear on the screen made me think: »This guy is programming the way like programmers of video games for the Atari VCS 2600 were doing!« Great to see those forgotten pearls re-appear!
Thank you so much for this video. ♥
Glad you like it Henrik! Yeah, I very much going for the spirit of the early micro and game development era with my projects.
@@weirdboyjim Again: Loving it and you very much "owned" a new follower! 😀
Lovely! I've never liked digital circuit design very much but it is a pleasure watching you do it
Thank you very much! Glad you found it interesting.
Tease. It took my brain an extra few milliseconds to spot the premier mark. Argh. :) Now you're really setting expectations high!
Now your making me feel bad.
But you can see in the picture the extreme complexity of the first step, and it's massive chip count.
@@weirdboyjim don't feel bad. Your content is amazing. I'm just glad I don't have to wait until tomorrow. Yup I'm intrigued by this chip count. I just hope that's not an MCU. ;)
@@weirdboyjim totally unexpected and awsome! Welcome to the club of bitbanging VGA using your own processor! Cant be many folks who have done that. And no, it did not disappoint. :)
Feature Goals: ALL!
Build Process: Lots of Videos!
First Video: already displaying an image!
I'm in!
This looks very promising.
Thanks Crul! I have lofty goals for that series, and lots of wires to make for the next video..
Really great work James - I think this video series is going to be super popular!
Thanks Seon. While in many ways this series will be a natural continuation of the cpu build the visuals will give far better progress feedback than I was able to demonstrate during parts of the main build.
Yuss! I'm definitely looking forward to it :)
Hope it lives upto expectations!
@@weirdboyjim definitely worth it 🙂 it's a great start for what I expect will be a very interesting series of videos.
If I remember correctly, we had two video buffers one being displayed and the second you could write to and you would swap buffers during the hoz blanking period. been a long time since i played with video on a CGA card. At work our 8086 boards were designed in house and there was no displays, lots of latched i/0 and DAC's controlling audio routing and volume. Fun days looking forward to next video.
On the older pc cards double buffering was always a horrible compromise due to limited memory. Even with a true vga card there you couldn't do 320x200x256 colour mode with double buffering by standard. There was a way of doing it but putting the memory into a different mode but the addressing became weird. I'll not be doing double buffering for this build, I want 60fps update so it's better to spend the address space efficiently creating the tools to do that.
This is going to be super interesting and fun to watch. Great work!
Thanks Adam! Hope it doesn't disappoint!
Great, great, great, thanks James for building a VGA card for your 8-bit CPU, very, very excited for the next videos
Thanks Detlev. I've been looking forwards to this bit for a long time.
@@weirdboyjim Could you please share the test code and updated code for generating the pipe roms? would be great, thanks!
Awesome work as always! Makes my day to see a video from you :) Keep it up!
Thanks Scitoshi, it's going to be an interesting Journey.
This is way beyond my knowledge but so very interesting! Thank you.
Glad you found it interesting!
What a journy, very much looking forward to the many additions to this 'video card' ;p
Join us to discuss this and the other videos on discord: discord.gg/jmf6M3z7XS
Support the channel on Patreon: www.patreon.com/JamesSharman
WOW Thats a cool project. I like that you are seeking for a simple way to create the VGA output. Great work!
Thanks! But it will get a lot more complicated over the coming weeks!
alot of mcus have a RGB LCD interface which is just VGA but not anolog, the way I did a VGA DAC for it was with a r2r latter with a resistor on the output the lower the output to 0-.7v then put it through an opamp because current capibilities. I'm shure u can get a low value r2r latter and add a resistor on the output and use the internal 75 ohm resistor in the display to pull it down to the right voltage
Oddly enough I've been looking at that kind of interface from the other side. A lot of VGA display modules have that interface, and a board for converting from a regular vga input. When I design my output circuit I'll include the dac and vga connector but I'll look into adding the digital output header as well. Might save me some space if I use one of those modules.
This kind of project requires a certain level of masochism which is to be appreciated and respected :).
I like to user words like "Perseverance" and "Determinism" rather than "Masochism" ;-)
Yay! I return from a short staycation to find that VGA has finally started! :D
Hope it lives upto expectations George!
@@weirdboyjim it seems like you have a serious plan for this VGA stage! Nice! Hardware sprites are gonna be interesting!
Oooh exciting, looking forward to this!
Hope you enjoy!
can't wait to see how this progresses! very interesting!
Thanks, hope it meets expectations.
The functionality reminds me of the NES PPU or SNES PPU for that matter. But somewhat limited with like sprites, but then again better in terms of color.
With some up coming features like MMIO the thought of looking into Banking might be useful, especially with double buffering of the Display, while one screen is being displayed, the other can be updated. Memory Banking is not that Hard, for example you use One CPU Port (or multiple for different sections) as a select switch for different Memory or Rom Banks. The value is then demultiplexed and fed into the chip enable line of the selected Bank. The rest like output enable is already done.
And lastly if you already have a 'copy functionality' built in the memory unit, it may be interesting to activate it on purpose with different source and destinations, some sort of crude DMA circuitry.
I've talked about banking before. I'm not planning on doing any in this series, I'm more interested in fitting it all into a small amount of memory as a challenge at the moment.
This setup is much more akin to how the Atari 2600 does video than the NES PPU, isn't it? The CPU is basically bitbanging the signal directly.
@@StefanNoack I think Chris is refering more to the project goals than the first circuit in this video. The 2600 was much more than bit banged video, it had basic sprites.
Wow that's beautiful things. Thanks for sharing.
Thanks! Glad you found it interesting!
Hey James, AMAZING VIDEO! I was looking forward to this from a long long time. I am extremely looking forward to the whole build. Great stuff :)
Thanks! Glad you found it interesting.
Brilliant, and with a chip speed of π MHz. I also grew up with ZX Spectrum, so it’s nice to hear those references.
Lots of people have nostalgia for the old Specy. The π MHz thing was not deliberate and it breaks down if you work out additional digits, it's just the vga pixel clock divided by 8!
@@weirdboyjim Yeah I got that. .You quoted 3.14 the first time, then 3.146 later, but let me have my math nerd dreams OK :-) Looking forward to starting this series from Episode 1.
@@daviddawkins if you used 25.175/8 to calculate the surface area of the earth you would over estimate by roughly enough for an extra Greenland. ;-)
@@weirdboyjim don't worry, I always use 22/7
We had a program for the BBC Micro that displayed a reasonable clone of The Bouncing Ball Demo whilst playing "Sweet Dreams Are Made of This".
Yeah, people made attempts to reproducing the demo on every computer around. The BBC one was very hacky.
@@weirdboyjim it was... you could get back to the BASIC prompt and the screen would keep bouncing.
Would love to see a video on the Sieve, it would be neat to have it running on my own system.
Also, the Amiga didn't reach release until 1985! The bouncing ball was shown during the January 1984 CES show and was written in one night.
I may get around to the Sieve video quite soon actually.
I absolutely love this, even though I don't understand most of it this is amazing and super interesting to watch. I realize how much of a nerd I am :)
Glad you liked it. I try and explain things as clearly as I can but I obviously can't cover all the basics in every video.
@@weirdboyjim I have of course some electronic knowledge (basics) but mostly on the hardware side, programing is not my domain but seeing hardware and software collide to make something really cool is just fantastic to watch :) I am definitely learning things
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?
Those are printed with a "Dynamo Letratag", really useful little thing. I label lots of my storage boxes, chips etc.. with it.
@@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.
Amiga mentioned, instant thumbs up!
It was an impressive bit of kit.
I like the idea of hardware sprites. I think sprites are going to be very interesting part of the project.
Oh. And it looks like this video didn't make it to Odysee.
Sprites definitely help getting some interesting motion at high update rate. And they represent an interesting challenge if there is any kind of transparency (which there will be)
Fantastic work, James - keep it up! Been following this for a while, and looking forward to see how this progresses.
A quick question - why is it 25.175 MHz, where 800 x 525 x 60 = 25.2 MHz?
Well spotted, that's an interesting question with a long and mundane answer. In truth it's not 60hz, it's 59.94hz! That's the standard for NTSC refresh despite everyone saying 60, in truth until recently almost everywhere refresh rates were described as 60 it was actually 59.94, this is legacy compatibility with NTSC that was deliberately out of sync with the US mains 60hz rate to prevent static artifacts in the color.
That is really putting the M in MVP!
I know right! :-D
Yes! This is what I want to do thanks great video..
Glad you like it!
you are selling this short, 640/480/60/16,777,216 is not VGA spec but the spec of a later SVGA card. VGA maxes out at 640/480/60/16 with those 16 colors being able to be selected from any one of 262,144 colors from an 18 bit dac
My feature set is actually pretty tough to compare to the vga card sequence, but when I say VGA I was more referring to the output video/monitor standard.
Awesome video. Thinking about what you might do for VGA, I thought about your audio output videos and knew you wouldn't do something simple but you would create an 8-bit GPU, and I wasn't wrong. It is however more ambitious than I suspected. I've always gone down the 'keep it a simple as possible' route with my designs. I love playing with VGA and seeing the results of the changes immediately. I recon that you will have a lot of fun in the coming months with this part of the project. P.S. please do a video on the incremental sieve.
Thanks David. One of my ideas for a future build is to try and make an ultra simple (But practical) 8-bit cpu that it would be much easier for people to replicate. But this build is far more in the "overly ambitious" side of things.
What kind of logic series will handle the ~24MHz? Also hand-made R2Rs aren’t going to be particularly accurate, and without a massive array of trimpots (I’ve seen it before) you’ll get some nonlinearity. So I’d at least look for a monolithic parallel input 8-bit DAC that suits your project.
Unless, you want to make discrete delta-sigma modulator circuits? Would be a very in-depth process, but it could be fun. Not sure how responsive they are, but at least you wouldn’t have the 7F > 80 mega-glitch that R2Rs have. I’ve been meaning to do the math behind a Gray code DAC ladder, though I don’t think it would be easy.
The common basic logic series (LS/HC/HCT) are all fast enough, but only just. What they are not is fast enough to make sloppy design ok, in my cpu and other cpu designs I've seen on youtube there tend to be chains of logic that are required to settle within a cycle so the maximum clock rate is reduced, to make the vga work at the target rate it will be necessary to carefully track this.
You are right that a simple ladder would definitely be a problem, a well made R2R ladder can be made to work but of care with resistor selection etc.. will be necessary "next closest value" and "10% tolerance" are not going to cut it. I'll get there in a couple of vids and you can judge my success or post your "I told you so" ;-)
That parrot is amazing!
Actually I made a better one while waiting for the premier to start. Same hardware/software but it a little bit of dithering on the image made it look much better. Something for the next one anyway.
That's some old school racing the beam.
You ain’t seen nothing yet! ;-)
You and Ben eater collaboration would be amazing.
It would be cool to work with him,
Excellent video mate ! You earned a new subscriber !
Thanks! Glad you enjoyed it!
Awesome :-)
Looking forward ;-)
Thanks Das!
Can't wait to see how you use the core memory for the video ram. ;)
About that high resolution goal...
Having a FORTH running on your amazing CPU, would make all hardware development much easier.
I haven't touched FORTH since university but the kind of implementation you would put on an 8-bit cpu would not be suited to the kind of cycle precise programming I need to do here for the early VGA implementation.
@@weirdboyjim good point, I was thinking more of general hardware development. Just the ability to interact with a live system is extremely useful. The code, burn a ROM and test cycle gets old very quickly. Having said that, you hardware is outstanding.
Frame buffer would be nice, you could work directly on video memory without 2 port ram without waiting for blanking
As in having 2 ram chips that are switched between video and CPU access
Probably would need cloning to happen at vblank through some blitter
See what you think of the system I implement in the next vga video.
What is doing that bigger part of construction where you plugged your circuit? (the blue one)
That's my homebrew pipelined cpu. This vga project is one of a number of smaller series making add on modules for it. th-cam.com/play/PLFhc0MFC8MiCDOh3cGFji3qQfXziB9yOw.html
Can you make a detailed course playlist on making such electronics projects....I personally am interested in it and would love to learn from you😄....anyways awesome work and you earned a sub😇
I have nearly 100 videos in the playlist for the main cpu build. Is that what you are after? th-cam.com/video/3iHag4k4yEg/w-d-xo.html
@@weirdboyjimYep thanks dude you are great
Well done bro
Thanks!
Oh that's nice.
Glad you like it!
Well hello there.. and hello fellow nerds.
My breadboards bring all the nerds to the yard!
Hallo! :-D
Very interesting! Regular VGA-Cards don´t support hardware scrolling and hardware sprites, right?
Actually many vga cards do have support for both of those but the need was very much reduced for it when CPU’s and clock rates got so fast it became easy to redraw everting.
@@weirdboyjim Ah, do you have an example for a vga card supporting pixelwise hardware scrolling and more than one sprite?
@@alexany4619 simple hardware scrolling just requires the ability to set the display base address and I think they can all do that. Sprite(s) are usually just exposed for the mouse cursor these days so maybe not plural in the common case.
Did it even exist one single VGA-card which supported more than one sprite? Was hoping to find a card with the Yamaha V9990 which should fill this gap but it seems, this VDP didn´t make its way into PCs.
Do you think it would be possible to use these concepts with a Z80 CPU, or is that just going to be too underpowered?
I don't think it's practical. My pixel output loop (that gives me rubbish horizontal resolution) is unrolled at 3 cycles per pixel. The best I can do on z80 is 21 cycles so you would need greater than 20mhz to match this. In a few videos I'll have a frame buffer that will be much more suited to interfacing to something like that.
OH YEAAAHHH!!!!!
Glad you liked it Mr Wizzard!
Duuuude you're a beast!
Thanks! Hope you enjoy the rest of it!
I'm interested in how the code works
I have a simulator for the cpu you can play with (Visit the 'toolchain channel on discord)
mind blowing!
Thanks Retro Marky, pleased you found it interesting.
This is going to be legendary, I can already tell. Your goals for this are crazy ambitious!
I would only suggest adding a character generator for text. But I suppose you've already thought of that.
Good luck and I will be following along religiously.
Thanks Olavl! The plan does include something that could be used to display character data, but it will be a few videos before I talk about that in any depth.
@@weirdboyjim I know there are several solutions for that particular problem and I'm extremely curious how you are going to address it. I'll wait patiently for that, just hurry up will you ;-) (j/k)
Another question if I may: is it at all possible to port existing games/software to your 8-bit computer provided you have the source? Or is the CPU too different from other architectures that this would be impossible?
Great video!
Thanks Benni.
So how long before you reach 8k 35 teraflop performance
35 teraflops? Just as soon as I can get the observer down the gravity well of a nearby blackhole.
Certainly not the world's worst video card!
You know how to give a compliment flarn!
@@weirdboyjim Actually I was referencing Ben Eater's series, but a compliment is certainly deserved!
Rad
Thanks Kipper!
hi sir may i know where can i get the schematics of your VGA Project
I've been releasing bits of schematic as I make the pcb's, you can see a number of them on by easyeda profile (link in the about section of the channel).
Why VGA and not DVI? It's the same protocol, but SERDES instead of DACs.
It's not as easy as it sounds, the protocol maybe simple but the clock rates involved are much higher (As it's a serial protocol, for 24bpp it will be at least 24x higher) and that puts you in a frequency range where it's just not possible on a breadboard.
@@weirdboyjim It's not 24x higher, but only 10 (DVI and HDMI have 3 separate data lanes for R, G and B). It's 10x and not 8x due to 8b/10b encoding. But there are transceiver chips like TI's TFP410, which handle all of it internally, accepting a simple parallel in at pixel rate (25 MHz in your case for 480p) and sync signals. 25 MHz is probably a tad too fast for a breadboard anyway (especially for 24 bit parallel bus), but it's about as slow as it gets for full-blown 480p and it's a single-chip solution. You can build a breadboardable adapter for that chip if you insist on a breadboard (even though your final solution seem to involve a custom PCB, so such frequency is not a problem). And data lane speed (250 Mbps) for DVI/HDMI is not very high so you don't have to worry about exact trace impedance match either. I've seen 1080p transmitted over loose jump wires with my own eyes! :)
Anyways, thanks for the great videos! You have a new sub!
@@asmi06 Ahh fair, I hadn't looked close enough at the spec to see the 3x lines. But a specialist encoder chip would put me off it as I'm trying to keep the BOM short and simple.
@@weirdboyjim Of course it's your call, but I don't see how else you can achieve full 480p in true color, which you stated as the end goal. Unless you resort to FPGA like Artix-7, which can do TMDS natively, but using it will kind of make the rest of your CPU redundant, as you can stuff it inside the very same FPGA :) And it will likely run a lot faster too.
BTW - have you considered going for something like Risc-v ISA, which seems to be all the rage currently in the hipster community?
Can it display TempleOS, as God intended?
Lol, Wikipedia says that is designed for 64bit machines. Might be a little out of scope.
Video Graphics Array - simples
It won't be very simple by the time I'm done ;-)
James, ben, Kevin , bitluni have most complicated mind😊
Not sure who you mean by Kevin but Ben and Luni are great creators! Honored to be named alongside them.
Whats the RVN Hashrate on this?
You joke, but I have thought of writing hashing routines for the cpu as a demo of how they work.
America Where?
Not sure what you mean. Are you asking where in America I am? The answer to that is that I'm not, I live in England.
1 chip. done ;)
It’s more complex now 🤣
Next up how to build the next gen NVidia GeForce RTX 4090 TI Series... 24,000 cuda cores, 128GB GDDR7X Ram clocked at 2.1GHz lol...
Lets walk before we run, like maybe try for more than 26 pixels across the screen first before we set too lofty a goal ;-)
@@weirdboyjim I was being rhetorical. I'm self taught in C++ for 3D Graphics and Game Engine Design, to Hardware Emulation, to Circuit Design to CPU and ISA Design. I was being sarcastic and dramatic about it. I have a very good idea the amount of complexity that goes into making the top of the line modern GPUs. They are far more complex than a multi-core CPU!
Too much VGA where is hdmi.. 🤣
I actually just bought a vga to hdmi convertor so hopefully I can capture the output to add in as an overlay. Actually generating hdmi from a breadboard I don't think could work, it's a serial protocol so the clock rate would be far higher than is practical on a breadboard, at least in my understanding.
isn't that parrot kind of a ripoff of Ben Eater? It's strange that you haven't even mentioned him...
The parrots are cropped from "Kodac Image 23" from the Kodak image set, a group of images that have been widely used for display and image processing tests for since the early 90's. I think I first used this particular parrot about 25 years ago for a university project on palate mapping and dithering.
I have a lot of respect for Ben's work, I've mentioned it several times in my videos but I have more than 100 videos out now and it wouldn't be practical to mention it in every video. My CPU project probably wouldn't have happened without Ben's but the design is very different. The VGA project here was roughed out before Ben's first video on the subject (There are passing references in my earlier videos) but my progress has been slow.
@@weirdboyjim Oh that makes sense. Thank you for the answer, and sorry for the accusation. I didn't know that you have mentioned him before, as I just found this video, and it seemed pretty interesting.
Actually, as it turns out, it is interesting, and I really like the EEPROM for decoding the sync counter, that would have been my choice too, if I had money and time to make such a project. I'm very interested in the progress, especially the RAMs and how the CPU is gonna handle it. So keep up the good work!
buy an fpga old man
Where would be the fun in that?