The first thing I looked at (like a lot of other people) was to use the 9929 which has component output. But there was still the need to have an external circuit to convert the component video to VGA, and all the circuits I found were *really* complex. Plus there was the problem of the 9929 not being drop-in replaceable with a 9918A.
The other solution I was kicking around was making a frame buffer of sorts that would decode the composite video coming out of the 99/4A and build up a VGA frame, which would then output to a monitor. It just did not seem like the thing to do though, so I scratched that idea too.
Another option was to use an FPGA to reproduce the functionality of the 9918A entirely. Without knowing an HDL (hardware description language) like VHDL or Verilog, or anything about FPGA's, this also seemed like a complex task. However, I already dropped the cash on the devboard, and I wanted to learn FPGA's and VHDL, so I decided I would give it a shot.
I'm setting up a web site to document the project in detail, so I'll spare the grueling details here. I made good progress until about April when life put the project on hold. However, I do have a functional circuit that is currently only missing sprites (and a few other things.) Let me sum up since I seem to be rambling.
I'm working on an FPGA based video chip that will be a pin compatible drop-in replacement for a real 9918A. Since I have a ton of power available to me, I'm also taking the opportunity to "fix" a few things, like having all 32 sprites on the same line at the same time, and eliminating the "access window" problem, i.e. you can write to the VDP at full speed all the time. My initial project entry explains all the features, but I'll reproduce it here to promote feedback and generate excitement. :-)
These are the goals that I think I can manage in the 1.0 version:
* Be pin compatible with the original TMS9918A VDP, i.e. a direct replacement in any existing computer
* Be 100% compatible in functionality
* Support standard VGA monitors (currently 640×480, but the final 1.0 will run at 800×600)
* Add a 9938 compatible 80-column mode
* Add a few additional video resolutions to better support remaking arcade games
* Increase the color palette to 512 colors
* Remove the “access window” limitations for full-on high speed access to VDP RAM all the time
* Increase VDP RAM to at least 512K, but probably 1MB in the end
* Allow all 32 sprites on a single horizontal scan line
* Add flags to flip sprites horizontally and vertically
Some additional features I’m kicking around are:
* Support a dedicated hardware mouse and USB/PS2 keyboard
* Provide a single-cycle 32-bit Mersenne Twister random number generator
* Dual-screen output (great for 2-player head-to-head games)
* Add horizontal and vertical scroll registers
* Provide hardware support for virtual screens with scrollable playfields
* A true bitmap layer
* Enhanced tile-map that supports larger pattern tables, colors, flip x and y, etc.
What is Working:
* Original 256×192 displayed in 2x (512×384) on a 640×480 VGA monitor
* All 4 video modes: Graphics I, Graphics II, Multicolor, Text
* 512 color palette
* Full speed CPU interface (no delays due to access windows)
* 16K VDP RAM using the FPGA’s block RAM
* Physical drop-in replacement (via a socket) of the original 9918A
* Implement sprites
* Add undocumented hybrid graphic modes
* Add the 9938 compatible 80-column mode
* Change VRAM to use an external SRAM instead of the FPGA’s block RAM
* Change to 800×600 base resolution instead of 640×480
* Design, order, and build the prototype circuit board
Anyway, here is the link to the main project page: FPGA Based 9918A
Oh a picture or two (or five) as well. :-)