Close
0%
0%

PICO9918

A replacement for the classic TMS9918A/TMS9929A VDP, powered by a Raspberry Pi Pico (RP2040)

Similar projects worth following
A drop-in replacement for a classic TMS9918A VDP using a Raspberry Pi Pico.

Currently in the early prototyping stages, but looks very promising. Running perfectly in an original Texas Instruments TI-99/4A.

PICO9918


A drop-in replacement for a classic TMS9918A VDP using a Raspberry Pi Pico.

Currently in the early prototyping stages, but looks very promising.

Hardware


Gerbers will be released soon once I validate the v0.3 PCB. The next stage will be to shrink it down, by including the RP2040 directly, rather than pluggin in an external Pi PIco module.

v0.3 Schematic is available now, however this revision has not yet been tested.

PICO9918 v0.3

Raspberry Pi Pico Module


Note: Due to GROMCLK and CPUCLK using GPIO23 and GPIO29, a genuine Raspberry Pi Pico can't be used. v0.3 of the PCB is designed for the DWEII? RP2040 USB-C module which exposes these additional GPIOs. A future pico9918 revision will do without an external RP2040 board and use the RP2040 directly.

Purchase links:

I could reduce the VGA bit depth to 9-bit or 10-bit to allow the use of a genuine Raspberry Pi Pico board, but given the longer-term plan is to use the RP2040 directly, I've decided to go this way for the prototype.

Videos


Initial "raw" videos recorded in the moments following the first boot on my TI-99/4A.

These videos are showing the v0.2 hardware with an external Pi Pico providing the required GROMCLK signal to the TI-99. This signal has been added to v0.3. I'm still waiting on v0.3 boards to arrive.

It freaking works!


PICO9918 Prototype - It freaking works

Don't mess with Texas!


PICO9918 Prototype - Don't mess with Texas

License


This code is licensed under the MIT license

  • Real-time scanline benchmarks

    Troy Schrapel6 days ago 0 comments

    Thought I'd do some initial real-time benchmarks - just to see how much wiggle room I have to implement more advanced features. It's looking quite good. 

    These images will look bad, but bear with me. :D

    What's happening here is I'm switching the VGA signal to output BLUE when it's done generating the next scanline. So, if it was at 100% generating scanlines, these images would look perfectly normal since it wouldn't have time to switch to BLUE. If the image was mostly blue, that means it has loads of time left to do more cool stuff.  Keep in mind, the VGA is at 640x480, so I'm doubling the scanline vertically for a virtual resolution of 640x240 (used to be 320x240, but switched to 640x240 to support 80 column mode). I generate a scanline once and use it twice. With that in mind, if I was using 50% of my single CPU core capacity to generate scanlines, you would see alternating lines: correct image, BLUE, correct image, BLUE, etc. 

    Ok. that's the gist of it. Now here's the results: 

    Graphics I - No sprites 

    image.thumb.png.c68bf2a5fe87b23a0666667b0bcba815.png

    Using around 33% of the available scanline generation time. ie. It finishes around 2/3 of the way through the first pass of a doubled scanline. 

    Multicolor 

    image.thumb.png.b0185b838539384ad751eaebec0f152b.png

    About the same: 33%. 


    Mixed modes

    image.thumb.png.30c8fd6ebb26cf03dcde9e1f58750d88.png

     Here, you can see MC mode is the fastest. Graphics II lagging a bit at roughly 40% of the available time used. 


    Sprites

    image.thumb.png.8544e9ac4f814387f31b178a6a216931.png

    image.thumb.png.04a28b77a38351981c46e366de294f5e.png

    Adding in sprites gets us a pinch over 50% of a scanline time used (hence the black appearing on the left where sprites appear). 

    Anyway, all-in-all, I'm happy with the results. It means I have some room to move. For the most part, I could render the entire display twice (or more). I also haven't done much work to target my TMS9918A library to the Pico (was originally written for desktop use), so I'm sure there would be performance gains to be had by keeping the RP2040 in mind. Also, the scanline rendering is all taking place on a single CPU core. The second core is mostly twiddling its thumbs waiting for interrupts from the PIOs - I could allocate some work (such as the sprite layer) to that CPU core.

    Cheers

    Troy

  • Added 80 column mode

    Troy Schrapel06/11/2024 at 12:42 0 comments

    Had a bunch of people asking about adding support for the F18A 80 column mode. Ask and you shall receive :)

  • It works! PICO9918 running the TI-99 mega demo

    Troy Schrapel06/09/2024 at 08:57 0 comments

    The PICO9918 prototype is working great. Seen here running the awesome "Don't mess with Texas" mega demo on my TI-99/4A

View all 3 project logs

Enjoy this project?

Share

Discussions

Similar Projects

Does this project spark your interest?

Become a member to follow this project and never miss any updates