ElmarTrjoer
New member
Gottlieb Mylstar on FPGA (Q*bert and 9 other games working)
Arcade games are so much fun...
.. so I spend some time in implementing the Gottlieb/Mylstar GS-III hardware, several generations of sound boards as well as interface/expansion modules on a Spartan3E FPGA.
Beside the SC01, SPO250 speech synthesizer, the whole design is in a single chip and a 1:1 replica of the original hardwarel (no emulation, the real thing!)
I am currently putting up a blog at www.qbert.me, so feel free to take a look. It´s under construction, so please be patient to get the full story published as well as demo videos.
The final target is to get all games working on a small board to make it a TV multi-game joystick as well as a replacement for original arcade boards.
The system is currently supporting the following games:
- Q*bert
- FHMC Q*bert
- Q*berts Qubes
- Insector (prototype)
- Mad Planets
- Curve Ball
- Krull
- Knightmare (prototype)
- Tylz (prototype)
- Reactor
The games 3 Stooges and Skrew Loose are currently imperfect in sound and I am working to support laser disc to enabled the awesome background scenery of M.A.C.H. 3.
I also hacked some 8088 assembler to write a small multi-game loader that allows to select between games.
That´s it for now - stay tuned for more and in the meantime start doing your own FPGA games - playing arcade games is lots of fun, doing them yourself even more!
Cheers, TRORT
------------------------------------------------------------------
If you are interested, some more details what´s inside the FPGA chip:
The video system is a perfect copy containing a cycle-accurate (!) 8088 CPU with ROM/RAM sub-system (all jumper options implemented). The I/O logic includes support for 2-player cocktail joysticks (Q*bert and FHMC Q*Bert), trackball (Reactor), and rotary controller (Mad Planets) as well as all the conventional inputs such as 2 coin switches, 1/2 player start, test switch, test step, and DIP switches. As different games use different controller mappings and DIP switch functions, I have added logic to map automatically. The foreground/background logic comes with (aligned) horizontal flip/vertical flop support as well as ROM expansion for Q*bert´s Qubes (8x 8k). Beside classic 12-bit RGB CGA to drive a arcade CRT, I implemented a line-doubler to be able to connect a regular VGA/DVI computer screen as well as a composite DAC to connect to a TV. All outputs (coin meter, coin lockout, knocker, trackball clear, sound-bus) are also implemented.
The sound system contains 2 soft Rockwell R6502 CPUs IP cores where either 1 or 2 are active depending on the game. Also all jumper options for ROM sizes are supported.
I also did a full implementation of the Rockwell 6532 RIOT (RAM, I/O bi-directional PA/PB, timer, interrupt handling). To add voice, I sampled all phonemes of the SC01A and SPO256 and stored them in external NOR flash memory (together with FPGA bit-stream, game ROMs and RAM high-score write-back). Although I can tandem-stream the phonemes from memory, it does not sound well as the original synth provide fade-in/outs. I am looking for another solution.
Arcade games are so much fun...
.. so I spend some time in implementing the Gottlieb/Mylstar GS-III hardware, several generations of sound boards as well as interface/expansion modules on a Spartan3E FPGA.
Beside the SC01, SPO250 speech synthesizer, the whole design is in a single chip and a 1:1 replica of the original hardwarel (no emulation, the real thing!)
I am currently putting up a blog at www.qbert.me, so feel free to take a look. It´s under construction, so please be patient to get the full story published as well as demo videos.
The final target is to get all games working on a small board to make it a TV multi-game joystick as well as a replacement for original arcade boards.
The system is currently supporting the following games:
- Q*bert
- FHMC Q*bert
- Q*berts Qubes
- Insector (prototype)
- Mad Planets
- Curve Ball
- Krull
- Knightmare (prototype)
- Tylz (prototype)
- Reactor
The games 3 Stooges and Skrew Loose are currently imperfect in sound and I am working to support laser disc to enabled the awesome background scenery of M.A.C.H. 3.
I also hacked some 8088 assembler to write a small multi-game loader that allows to select between games.
That´s it for now - stay tuned for more and in the meantime start doing your own FPGA games - playing arcade games is lots of fun, doing them yourself even more!
Cheers, TRORT
------------------------------------------------------------------
If you are interested, some more details what´s inside the FPGA chip:
The video system is a perfect copy containing a cycle-accurate (!) 8088 CPU with ROM/RAM sub-system (all jumper options implemented). The I/O logic includes support for 2-player cocktail joysticks (Q*bert and FHMC Q*Bert), trackball (Reactor), and rotary controller (Mad Planets) as well as all the conventional inputs such as 2 coin switches, 1/2 player start, test switch, test step, and DIP switches. As different games use different controller mappings and DIP switch functions, I have added logic to map automatically. The foreground/background logic comes with (aligned) horizontal flip/vertical flop support as well as ROM expansion for Q*bert´s Qubes (8x 8k). Beside classic 12-bit RGB CGA to drive a arcade CRT, I implemented a line-doubler to be able to connect a regular VGA/DVI computer screen as well as a composite DAC to connect to a TV. All outputs (coin meter, coin lockout, knocker, trackball clear, sound-bus) are also implemented.
The sound system contains 2 soft Rockwell R6502 CPUs IP cores where either 1 or 2 are active depending on the game. Also all jumper options for ROM sizes are supported.
I also did a full implementation of the Rockwell 6532 RIOT (RAM, I/O bi-directional PA/PB, timer, interrupt handling). To add voice, I sampled all phonemes of the SC01A and SPO256 and stored them in external NOR flash memory (together with FPGA bit-stream, game ROMs and RAM high-score write-back). Although I can tandem-stream the phonemes from memory, it does not sound well as the original synth provide fade-in/outs. I am looking for another solution.
Last edited:


