FreeWPC is a toolkit for building brand new software for pinball machines. It primarily targets the Williams WPC family of games, which was used in all of that company's games from 1990-1999, starting with ‘Funhouse’ and ending with ‘Cactus Canyon’.
This document provides an overview of the FreeWPC architecture for developers who wish to understand how the system works. FreeWPC is constantly evolving and the information here is subject to change.
FreeWPC only replaces your game ROM (the U6 chip on the CPU board), which contains all of the game code and dot matrix text/graphics. In particular, sounds and music are NOT included in this device, so FreeWPC games use the same sounds as the real machines.
FreeWPC is 100% Williams-free code, written from scratch. It is not a hack on existing ROMs and does not contain any software extracted from real games. Most of the code is written mostly in the C programming language. (Actual WPC games were programmed in assembly language). FreeWPC uses the freely available GCC6809 C compiler. There are some assembly language routines for really low-level, or high performance parts of the program.
All generations of WPC are supported. FreeWPC is also architected into a number of distinct layers which makes it highly portable to other types of pinball machines than just WPC games, including new custom hardware. The platform files describe the circuit boards. The CPU files are specific to the microprocessor, and can be shared between platforms (WPC and WhiteStar both use a 6809). The machine files are unique to a particular game.
Development requires a UNIX-like environment, such as Linux or Cygwin for Microsoft Windows users. Many common UNIX tools like bc and perl are required.
FreeWPC has become more portable over the years, so that it can be used to develop pinball software for platforms other than WPC. This support is still evolving rapidly. In addition to building ROMs, the toolkit supports native mode compilation, which builds an executable that can be run directly on your development machine. This lets you test and debug the software without requiring a real machine or even an emulator. Basically, native mode replaces the lowest level of hardware access with builtin emulation. In place of actual I/O being controlled, it displays the results of the simulation on your screen, using either the console, ncurses, or gtk.