Wow, this is amazing! I'm totally going to try it out. Is your code on Github?
I want to add a frame buffer using some external SDRAM, which the PSoC actually has a component for. This should make it able to do sprites etc.
By the way, if you're using the IMO as a clock source, it can be off by a few percent. If you use an external clock or oscillator then the PLL and clock tree should be able to give you a clock frequency with the same accuracy as your input clock. This could have been the issue behind your pixel clock being off.
Anyway, awesome project!
Thank you, getting a praise from you (no disrespect intended) is actually a big deal.
No github but I will have to dig the project and post it here. I do have perforce and I know I did save often enough but no warranties it will work out of the box because maybe I only started to check the project in while doing the CGA code.
It's late right now and I can barely type (almost 7am and I hope I don't wake my wife up when I go to bed).
Yes I'm using the IMO but I do have an OXCO 26MHz oscillators (no XTALs on hand I'm affraid)
VGA output didn't give me any trouble other than the color pixel being late as the images shows, CGA on the other hand had some flakiness using the internal clock. I added more buffers as I recall after posting that. Not sure if I did solve it. And an external ram might not help because it wasn't a lack of resources as I recall.
I did think about expanding this to use an external ram for a proper full frame buffer, but I didn't have the memory at hand so I used the EEPROM as a proof of concept.
Would be fun to make a pong game using the capsense cypress tech, and probably expand even more. It wasn't a full project since I just wanted to show a proof of concept, got a bit overboard but a PSoC5LP prototype board could easily replace a CGA controller board as I left it last time (a while back and around half a year ago).
Anyways and no promises, I'll have to search for that code which I'm sure I still have it laying around. Maybe I don't have the VGA code anymore and only the CGA code since that was my target.
What I would want is a dual ported memory video memory module (by video I mean it could handle the pixel clock rate, maybe even twice the size of the framebuffer so I could implement a dual buffer display). My need for dual ported is so I could use this prototyping board as a display buffer (with external memory help) and use a 2nd module or whatever to drive it.
Do get the VGA module, it's fantastic. I have a better one that is a 330MHz capable video DAC (8 bits per color) but for this type of thing is an overkill and I don't think I would be able to drive that with the PSoC 5LP I do reserve that higher end board to my FPGA's.
I'm thinking these new modules could do what I did with the 5LP specially with external memory.
In any event I have no problem releasing the code if I'm able to find it which I'm pretty sure I will. But maybe before I do release it I want to make sure it works on VGA mode or at least it's capable to drive an LCD display, since my later iteration was to drive a CGA monitor and that's not going to help many.
If I do release it (and I will but I need sleep 1st) I only ask that you post pictures of the outcome and code so I can experience your code as well. I would say to give me a couple of days to gather things but might take a week but I hope it won't take that long.
As for sprites, the 5LP has 2K of EEPROM that you could put other sprites than the CGA ones I used. Also you could sacrifice one bit form the red channel to do a blink or even implement a full CGA controller card but outputing to a VGA monitor, It should be fairly easy.
Well, I'm going to bed soon because it's late but I'll see what I can dig out quickly during the weekend (doesn't help my wife doesn't work this weekend but I might be able to pull it out, time permitting).
BTW the PSoC is great at doing this because it's mostly implemented by hardware. the ARM processor is just filling in the buffer and the DMA and hardware takes care of the rest transparently.