Do you like my hacking? If so, please consider leaving something in the
Fediverse (Mastodon etc): @Sprite_tm@social. spritesmods.com
I decided I would keep the focus of this project on arcade hardware: there's just something about getting to play a cool game when you've implemented the hardware correctly. I've always especially liked the arcade games that used a vector monitor: instead of just displaying the playfield as pixels on a TV-like monitor, these games actually took control of the electron beam position and used that to draw crisp lines without the pixellation that was so apparent on raster games at the time.
FPGA Arcade also had a vector game online: Asteroids. It's an excellent game, but the version on FPGA Arcade used a rasterizer to convert the pretty vectors back into pixels so they could be shown on a VGA monitor. Even worse: the rasterizer used external memory, something the board I had didn't have. I decided there was only one way to solve that: chop off the rasterizer code and wire the FPGA to directly drive a CRT! But would that work? Only one way to find out.
I ripped off the rasterizer code, which received two 10-bits values for the
current X and Y-positions and 4-bit intensity signal. I wired to the X- and Y-signals
to a 10-bit PWM-like DA-converter I thought up, and the Z-signal to a simple
R-2R network for DA-conversion. These signals then went to two TDA2030 hifi
audio amplifiers, which controlled the horizontal and vertical deflection coils of
the CRT of an old black&white portable television. Everything was connected together
quite haphazardly, but it was good enough for a proof-of-concept.
After quite some hassling with the analog hardware, I finally got something that
actually resembled what the image should look like:
It looks like my analog hardware wasn't good enough: for example, I read that if you
want to re-use a television monitor for vector purposes, you should re-wire the coils
because they're wired so they'll be most efficient at the rates used in a TV-set. I never
did that, and in my setup, it looked like that resulted in the higher frequencies being dampened.
I really didn't like to fiddle with the finnicky hardware anymore, so I used an extra
digital filter in the FPGA to boost the higher frequencies a bit. The result looked
a lot better:
So yeah, it is possible to implement a vector game using a FPGA. I was jumping into this project to polish my VHDL-skills, though, and while I did some of that implementing various DSP and digital-to-analog-stuff, I still hadn't developed anything major.
I decided on building my own vector-arcade-game-in-an-FPGA. But what to pick? I liked Quantum but wasn't sure I could pack the needed 68000 into the FPGA. I liked Tempest but was scared off by the Mathbox it used, a discrete coprocessor-like board used to do calculations; Star Wars also used that. I loved Major Havoc but couldn't fit the ROM in the FPGA itself, and wasn't planning on using external storage. However, Black Widow seemed like a good target: fun to play, small enough, in color, and I could re-use the VHDL code for the sound chip and CPU I got from Asteroids. Now I only needed to whip it up in VHDL. And wire up a color CRT to go with it...