Software_Ports


A key part of the PiTrex project is porting games and emulators designed to run on PC and display vector graphics on a regular raster computer monitor. This page will list software that might be easily adapted for use with the PiTrex to display on the Vectrex screen. We don't expect to port all these ourselves, but hope that when the PiTrex is released, the developers within our user community might take some of these on.

Front-end

VMMenu


VMMenu

There was once a vector-based menu for the Zektor Vector Generator (ZVG) system written by Ian Boffin, but the source for that was lost. Chad Gray rewrote the menu system from scratch and has recently released his sources for the benefit of our project. This menu system allows the user to select one of the known vector arcade games, and then it invokes an emulator to play the game. We may have to merge this code outlink into MAME itself for use as a stand-alone bare-metal binary on the PiTrex.

MUCAREX


MUCAREX

We might also want to have a look at Alex Kazik outlink's menu system...

Emulators

As the Vectrex is the only home video game console produced with a vector display, the main focus here is arcade emulators that can emulate vector arcade games outlink. There are several emulators that we have identified and have source code for, but we are only listing here the minimal set that gives us full coverage of all the known games. There is no point at the moment in implementing emulators such as AAE or Cinemu which would duplicate games emulable by MAME.

We are also emulating the Vectrex itself; because, even though PiTrex users obviously have the real hardware, this will allow games to be loaded from the Raspberry Pi SD card or USB drive and therefore work like a Vectrex multicart.

MAME

MAME outlink is the most popular arcade emulator for PC, and supports a majority of vector arcade games as well as the Vectrex.

Although MAME has been previously modified outlink for output to a custom DAC board for controlling the Vectrex and oscilloscopes by direct connection to the display circuitry, that port no longer compiles on the latest Raspberry Pi OS and the method of adding vector support to it is very much not supported, so we will be basing our port outlink on AdvanceMAME outlink (3.8) which is the last version of MAME to include semi-supported hooks for vector drawing (vector_aux_renderer). Our vector module is adapted from the old DOS port of VectorMAME outlink, targeted at the ZVG vector DAC board. AdvanceMAME is based on the ROM sets for MAME 0.106.

Programming Language: C

VecSim

VecSim outlink is an earlier/simpler arcade emulator designed specifically for vector arcade game emulation. Far fewer arcade games are supported than by MAME, and there is no sound support, but the primary reason for interest in vecsim is that it includes a rudimentary static binary translator. This is the same package that was used as the basis of all of the SBT translations on the VecFever other than Tailgunner. It may be easier to modify games to fit the Vectrex aspect ratio (4:3 vertical format rather than 3:4 horizontal format) using a translated source rather than making tweaks to the emulation on the fly. Otherwise, we don't really need vecsim and could use MAME for all the arcade emulations.

Latest Release: 2003
Programming Language: C

VecX

VecX outlink is an open-source Vectrex emulator. It has already been modified to work with the PiTrex and successfully runs games, as noted in the Software_Description. Our version of vecx disables the emulation of the VIA chip, and instead uses the real chip inside the Vectrex, which improves performance. Doing the same for the sound chip has allowed sounds to be produced exactly as they would running on the Vectrex normally. This style of emulation may also allow us to add virtual hardware to the Vectrex such as a VecVox speech chip, although effort may have to be made to support real hardware on the user's Vectrex, such as the 3D Imager.

Latest Release: 2013
Programming Language: C

Spectrum sound chip emulator

Spectrum Sound Chip Emulator outlink In the same way that vecx can drive the sound and graphics chips of the vectrex directly, this emulator for AY-3-8912 music ought to be able to drive the sound chip directly... Several old micros used the same chip (eg Amstrad, Oric) and there are several file formats available. You can find music files here outlink.

Games

A number of open-source games have been developed using display systems based on vectors, and these may be modified for display on the Vectrex screen using the PiTrex. Usually the original design of the games is to plot the vectors in a software display for use with a normal raster computer monitor.

Classic Space Wars


Classic Space Wars

Classic Space Wars outlink by respected old school video game coder and emulator author, Peter Hirschberg.
Latest Release: 1997?
Programming Language: MS Visual C++

Agendaroids


Agendaroids

Agendaroids outlink is an Asteroids clone by New Breed Software. It is simple, and optimized for low-powered Linux computers such as PDAs. We have compiled both Agendaroids and Vectoroids and they do not appear to be completed playable games.

Latest Release: 2002
Programming Language: C


Vectoroids


Vectoroids

Vectoroids outlink Is another Asteroids clone from New Breed Software, with more features.

Latest Release: 2002
Programming Language: C


Wordwarvi


WordWarVi

Wordwarvi outlink Word War vi is a retro-styled old school side scrolling shooter reminiscent of Defender or Scramble, with an "Emacs vs. vi" theme.

This game is of interest to us because it has also been ported to the OpenLase API. We have also located the equivalent MAME vector driver for OpenLase outlink which uses some hacks to reduce the number of vectors being drawn, which we may need to adopt ourselves if the display load is too high for the Vectrex hardware.

Latest Release: 2011
Programming Language: C


3D Pong


3D Pong

3D Pong outlink is an adaptation of Pong in 3D by New Breed Software. Uses a PC mouse for control, so may not be easily adapted for use with the Vectrex controller (though a USB mouse could be connected to the Raspberry Pi for control).

Programming Language: C


ICBM3D


ICBM3D

ICBM3D outlink is a 3D adaptation of Missile Command by New Breed Software. Again, this uses the mouse for control as standard.

Programming Language: C


zblast


zblast on PC

zblast outlink is a "simple but fairly manic shoot-em-up" which uses a depth effect and has multiple levels. Originally released in the early 90's. Original runs with SVGAlib or X.

Latest Release: 2003
Programming Language: C


xhyperoid


xhyperoid on PC

xhyperoid outlink Is a Linux port of an Asteroids clone written in the 90s for Windows 3.x. It adds a number of variations on the original Asteroids gameplay including shields, and multiple types of enemy ships. Original runs with SVGAlib or X.

SDLRoids outlink (Wayback Machine, download from Sourceforge outlink) is a modified version of xhyperoid which runs with SDL instead of SVGAlib or X. The modifications don't sound like they would be very helpful for us.

Latest Release: 2000 (orig.), 2001 (SDLRoids)
Programming Language: C

Xinvaders 3D


xinvaders3D on PC

Xinvaders 3D outlink is a vector-based 3D clone of Space Invaders. Uses vector text as well as graphics. Disappeared from Sourceforge fairly recently for some reason (but GPL, so don't need permission to distribute or anything).

Latest Release: 2000
Programming Language: C


cbzone


Cbzone on PC

A neat clone of Battlezone based on an earlier version written in Fortran. Runs fine under Linux. Uses the mouse, which makes it pretty tricky to get a good screenshot because I need that to control the screenshot program! I'm guessing that it wouldn't be too hard to convert to joystick control. Also uses circles for drawing the radar screen and direction indicator.

There are some bitmaps included with the source code in the bitmaps directory. I'm guessing that these are for some of the control panel images, but I haven't figured out the code well enough to be completely sure. -- Actually they're just in XBM format and can be converted to PNG with Image Magick, after which I can clearly see that they're all icons used in the control panel.

Note: Replace the spaces at the start of lines 100 and 101 in "Imakefile" with a tab, before running xmkmf and make, otherwise make gets upset (or at least my version did). I used the version with sound, but haven't heard anything out of it yet...

Latest Release: 1991 (official), 1993 (sound mod.)
Programming Language: C


xlander


xlander on PC

A 3D lunar lander clone. Seems to be running way too fast on my PC, perhaps possible to tweak this by changing some of the settings via the command line parameters. The 3D landscape looks good anyway - like something you'd expect to see on a computer display in a movie from the 1980's.

The "control panel" part of the screen doesn't look to be very vectory, so it might need to be redesigned for the Vectrex.

Latest Release: 1992
Programming Language: C


xasteroids


xasteroids on PC

The first UNIX asteroids clone. No fancy features besides shields, but runs quite well and has nice explosions (though they might not work too well on the Vectrex). Code and binary a little smaller than Agenderoids, for what it's worth.

From the days when people with email addresses at nasa.gov contributed to video games :).
Latest Release: 1993
Programming Language: C


XSC


XSC on PC

XSC outlink is a clone of Star Castle. Runs quite well. New Breed Software made a version called ZSC that adds sound and uses SDL instead of X, though the original has been updated since the release of the latest modified version.

Latest Release: 2013 (orig.), 2006 (ZSC)
Programming Language: C++


OldSkoolGravityGame


OldSkoolGravityGame on PC

OldSkoolGravityGame outlink game is similar to the likes of Lunar Lander and Thrust. All vector graphics. The view area scales and moves around to follow the player's space ship in a way that would be quite novel to see on the Vectrex.

Latest Release: 2016
Programming Language: C++


Gammarace

Gammarace outlink (Wayback Machine link) is a clone of Omega Race which appears to use entirely vector graphics and at least some vector text. Requires a compiling environment for the D programming language, and the binary download is no longer online anywhere, so it hasn't been tested on PC yet.

Latest Release: 2007
Programming Language: D


Java Star Castle


Java Star Castle on PC

Java Star Castle outlink (Wayback Machine link) is an accurate clone of the Star Castle arcade game written in Java, from the same author as Gammarace. It uses vector graphics and text. Runs well on PC (tested with Java V. 7.0).

Uses the LWJGL outlink and JOGL outlink libraries. Maybe possible to insert the vector graphics library at that level? Or maybe not worth it given then XSC is probably an easier option (assuming no other need for Java support with the PiTrex)?

Latest Release: 2005
Programming Language: Java


Hypernova


Hypernova

A java-based game in the style of an extended Asteroids - unfinished.


Programming Language: Java

Space game

Space game outlink - some code written by a flatmate of gtoal way back when! Fixed point 16 bit maths, written for the BBC Micro. It wasn't actually developed into an actual game, but there's enough here to build on. Probably more suited to the Vectrex itself but included here for completeness. I've lost touch with the guy who wrote it - Aardvark, if you're out there, say hello!

Programming Language: C

Kuklomenos


Kuklomenos on PC

Kuklomenos outlink is a unique game where a ship fixed in the middle of the screen rotates to fire at various enemies and prevent them from taking control of "nodes".

The colour of enemies is important to the gameplay, so this would have to be substituted-for somehow on the standard Vectrex.

Latest Release: 2012
Programming Language: C


Bitfighter


Bitfighter on PC

Bitfighter outlink is a multiplayer-orientated maze-based shoot 'em up game.

The source code is very complex compared to the other games here. Most of the game code seems to be in the "zap" directory, and best confirmation that it's mainly vector based seems to be in files like "ShipShape.cpp".

Latest Release: 2018
Programming Language: C++


Xspacewars


Xspacewars on PC

This is a clone of space wars which adds features such as shootable asteroids and a (very dumb) AI opponent. It also has metered damage, energy, etc. which recharges with time. It is designed as a multiplayer game, where the view follows a single player's ship and the location of other objects in the arena are shown on a map. Each player has their own window, which can also be run on on another display (which allows networking).

For the Vectrex, the game would have to be modified to show two player's views in a split-screen arrangement. Or the game could be modified to implement a lower-level networking system. Alternatively the X window system could be modified to display window contents on the Vectrex and convert controller inputs to keyboard/mouse events, also allowing the many other X-based games to work without modification, but this would be quite difficult.

A good basis for further work, but not really finished. Noticably missing a star in the middle of the game area. Some code from Xasteroids is used.

Latest Release: 1994
Programming Language: C


Maybe Suitable

These are games that have indications that they might be vector from looking at the source code, but we haven't got them compiled/running on PC yet to confirm if they would suit the Vectrex.



PonGL outlink Is a 3D Pong clone. Screenshots outlink show a vector-type display mode, though unlike most other games this uses a 3D graphics library rather than direct vector line drawing instructions. See the Limited Features for more detail on this. The source code download link is broken and the corresponding "PonGL-src.zip" file can't be found anywhere, but the Wayback Machine has a copy of outlink "PonGL.zip" which appears to contain the source code and the Windows binary. Presumably it's the latest version given that it was archived in 2014 and it looks like the latest version was published in or before 2007.


PonGL at The Linux Games Tome outlink

Places to find more

Some more vector-based open-source games may have been developed, probably in the 90's or early 2000's. Like zblast and xhyperoid though, they probably aren't labeled anywhere as being vector, because this was an internal aspect of their implementation, which was always intended to be used with a software renderer to display the picture on a raster display. Many software display libraries support plotting vector data.

Here are some places which list old Linux games. Some of them potentially vector-based, but I don't know an easy way of weeding those ones out (screenshots help):




Any game written with libcrtxy outlink seems highly likely to be adaptable to work with the PiTrex. Unfortunately it doesn't look like there ever have been any. We might provide this library as the interface for user programs to write to the PiTrex, however the code appears to be heavily biased towards an SDL-based raster target, so we need to use it a bit to determine how good a fit is will be.

Besides "vector", look for "wireframe", "line-art", "3D" (for a certain period in history).

There are also several vector-style remakes of old games for which the source code is not available, so we won't bother listing the ones we know about here. (And we have at times emailed several authors asking for the source to be released for porting to the Vectrex world, with no success.)

Vector Mace outlink isn't open source as far as I can see but maybe once the PiTrex is released we might invite the author to port it to our platform to get a larger audience than the two or three people who've managed to build TRMM's vector interface.

Similarly anything for the Ocelot outlink...

Limited Features

Some features of the software vector displays used by vector games and emulators on PC are difficult to reproduce with the Vectrex.

Colour

Many games use coloured vectors and while many could be equally playable with in black and white, some attribute meaning to the colours of objects on screen. One possible solution may be to use the shift register control of the Vectrex #BLANK signal to make different patterns in the vector lines in place of different colours. This may only work if the objects drawn in colour are fairly large.

While experiments with LCD displays outlink have outlined a potential method that could be used with the PiTrex to add colour to the Vectrex display, this is another project entirely.

Curves

While most games use traditional straight vectors, some games use curves and circles [do emulators?]. These could either be converted into straight segments, or the vector drawing library could be expanded to implement the method of changing the integrator values while #RAMP is active in order to "bend" lines as they are drawn on the screen.

Filled Vectors

Some vector games fill/colour the inside of drawn objects. As there is unlikely to be enough vector drawing time available to run a equivalent routine that fills the inside of objects with some sort of vector pattern, only the outline can be drawn with the vectrex. The effect of this on the playability of each affected game is likely to vary.

Drawing Time

The Vectrex is limited with regards to how long it can spend drawing lines on the screen before the frame rate drops. This also slows the execution of the game because the vector drawing library does not return until a draw operation is complete (unless the IRQ LATCH feature is used to disable #RAMP, at the expense of the beam needing to be zeroed after every vector is drawn).

In some cases, objects in games may have to be simplified in order to reduce the time required to draw them. Alternatively, some automatic means of lowering the number of drawn vectors as the limit is reached could be implemented in the vector drawing library, and this could also be used with the emulators.

Processing Power

This may be a significant problem with the emulators, with the vector drawing library taking up a significant amount of processing time as described in the last section. The bare-metal environment should run faster without the Linux processes competing for CPU time as well. Using faster Pi boards like the Banana Pi Zero, or a recent full-size Raspberry Pi board connected via a cable (and external power supply even more recommended than before) is another solution. Some advantage may be gained from overclocking.

Most of the Linux (or UNIX) vector games are from the 90s and therefore designed to run fast on computers with a fraction of the speed of the Raspberry Pi Zero, so they are unlikely to present a problem with regards to processing power.

Raster Graphics

Most of the games, although primarily vector based, use some bitmaps or other raster elements such as text. These are usually for score-keeping and related features, so bitmaps could probably be replaced by vector objects with fairly minimal modification to the game.

The Vectrex BIOS does have limited support for raster graphics in the form of a simple text display routine. Unfortunately this requires an implementation with cycle-exact timing, which even on the 6809 Vectrex is hard to achieve, as can be seen by the infamous slanted text on many Vectrexes. Duplicating this on the PiTrex where our hardware can insert an extra cycle even if the Linux itself can handle accurate timing (which is not guaranteed) is extremely difficult and we may not end up supporting it.

Single points (or pixels, as they are more usually referred to in the game code) are also often plotted on the software display as stars, or as part of explosion effects. While the Vectrex can display such points, the time required to move the beam in order to draw stars, for example, may be prohibitive. These elements may have to be removed from the game, or substituted with routines optimized for the Vectrex hardware. The OpenLASE project vector driver for arcade games already removes some of the features that contribute drawing overhead.

3D Libraries

While most 3D games rely heavily on textures to make sense of the environment, some simpler ones, such as PonGL above, could be playable with only the vector outlines of the 3D objects visible. Here it may be that the 3D engine rather than the games themselves should be the primary task for modification. Mesa outlink is commonly used on Linux.

Perhaps the GPU acceleration of games would be impossible while using the vector drawing library for output, in which case there may be serious issues with performance. Especially considering that these are more modern games, probably designed with computers faster than the Raspberry Pi Zero in mind.