Author Topic: PICO9918: TMS9918A VDP drop-in replacement powered by a Pi Pico (with source)  (Read 907 times)

0 Members and 1 Guest are viewing this topic.

Offline visrealmTopic starter

  • Contributor
  • Posts: 25
  • Country: au
  • Aussie software guy and electronics enthusiast
    • GitHub
Hi all,

I know a number of you are using (or planning to use) TMS9918A VDP in your homebrew projects (including myself). Thought I should share my new project: A drop-in replacement for the TMS9918A using a $4 Raspberry Pi Pico.

Here's a couple of videos showing it in action in my TI-99/4A:

It freaking works!


Don't mess with Texas!


The hardware supports 12-bit VGA rather than Composite or YPrPb. Currently, I'm only implementing the original TMS9918A/TMS9929A, though I could certainly look into implementing some of the awesome F18A features in the future.

The PICO9918 is much easier to hook up than a TMS9918A since the VRAM and Clock is all handled in-house. I'm at an early stage hardware-wise where I'm using an off-the-shelf Pi Pico. I plan to incorporate the RP2040 directly in a future revision, further shrinking the package.

I've shared all the source code on GitHub: https://github.com/visrealm/pico9918
« Last Edit: June 10, 2024, 04:17:34 am by visrealm »
 
The following users thanked this post: paf, bingo600, profdc9, Ted/KC9LKE

Offline SiliconWizard

  • Super Contributor
  • ***
  • Posts: 15118
  • Country: fr
Cool stuff.
 
The following users thanked this post: visrealm

Offline profdc9

  • Frequent Contributor
  • **
  • Posts: 333
  • Country: us
As a person who grew up with a TI 99 4A, I can only say this is amazingly cool.

The way you could one-up that would be to go all the way to the Yamaha V9938

https://en.wikipedia.org/wiki/Yamaha_V9938

as used in the MSX 2.  I could see a V9938 clone being very popular on retro computers.
 
The following users thanked this post: visrealm

Offline SiliconWizard

  • Super Contributor
  • ***
  • Posts: 15118
  • Country: fr
The PIO is really great for this kind of stuff. I wish more MCUs embedded this kind of thing, and also that the RPi would release a new, upgraded version of the RP2040, possibly with a bit more RAM, a bit more performance and an updated PIO with more slots and possibly a couple more instructions. :-+
 

Offline visrealmTopic starter

  • Contributor
  • Posts: 25
  • Country: au
  • Aussie software guy and electronics enthusiast
    • GitHub
As a person who grew up with a TI 99 4A, I can only say this is amazingly cool.

The way you could one-up that would be to go all the way to the Yamaha V9938

Thanks. Could certainly look into the V9938/V9958 in the future. Would have to be a separate project as it has additional pins. I've started looking into implementing some of the F18A (FPGA TMS9918A replacement) features due to a number of requests for 80 column mode specifically.

Added that this evening:



The PIO is really great for this kind of stuff. I wish more MCUs embedded this kind of thing, and also that the RPi would release a new, upgraded version of the RP2040, possibly with a bit more RAM, a bit more performance and an updated PIO with more slots and possibly a couple more instructions. :-+

100% looking forward to the next gen RP2040.
 

Offline westfw

  • Super Contributor
  • ***
  • Posts: 4274
  • Country: us
Quote
The PIO is really great for this kind of stuff.
So the PIO is fast enough to implement the bus logic of the old 8-bit CPUs?
Did you do any calcs to figure out exactly how fast the bus can go?  I assume the limiting operation is output data on the bus after a RD strobe...
 

Offline visrealmTopic starter

  • Contributor
  • Posts: 25
  • Country: au
  • Aussie software guy and electronics enthusiast
    • GitHub
I'm using PIOs for the VGA output and to generate two external clock signals, but I'm not using PIOs for the bus. I probably could - haven't tried, but they're more -suited to data streams (like a VGA signal for example) rather than random requests. Instead, the BUS interaction is handled by an interrupt handler on a single CPU core. I have the Pico running at 252MHz, so I have around 32 clock cycles to respond to a request on a 4MHz bus. It's not a lot, but it's enough.
« Last Edit: June 13, 2024, 03:17:53 am by visrealm »
 


Share me

Digg  Facebook  SlashDot  Delicious  Technorati  Twitter  Google  Yahoo
Smf