Check out the Project Wiki for the development log
JCAP is a project with the goal of developing a JAMMA arcade standard compatible game board using the Parallax Propeller 1 (P8X32A) microcontroller upon which a user can implement their own custom arcade game, either from scratch or by using the library of graphics, sound, input, and other drivers developed under the project. Ultimately, the project will provide:
- VGA video driver
- Sprite/tile based graphics driver
- PWM sound driver
- Serialized input driver
- Game engine
- PCB schematic and CAD files
in such a way that a user has everything they need to implement their own arcade game and have a PCB printed to build it on.
The JAMMA Standard
The JAMMA standard itself is defined by a specific pinout, however the use of some or all of the signals is dependant on a given game board's configuration:
The Propeller 1
The P8X32A is an impressive 8-core microcontroller programmed using either a high-level proprietary language called Spin, or a form of assembly called PASM. A very large array of standard programming languages are also able to be compiled for the Propeller, most notably C.
The P8X32A works by implementing a round-robin exlusive resource access methodology via a rotating "hub", which switches shared resource access between each of the 8 individual processors, called "cogs":
The most significant benefit of using the Propeller as the backbone for JCAP is its implementation of video generation hardware within each cog. This reduces development time, and introduces a level of security and confidence in the hardware concerning the ablity to generate a VGA and/or composite TV video signal:
The following items are required to develop on the JCAP framework:
The following items are useful but not necessary for development:
- DE0-Nano FPGA Development and Education Board
- Quartus Prime (for programming DE0-Nano with open-source P8X32A design)
- Analog Discovery logic analyzer and WaveForms software
The source code documentation for JCAP is written in-line and strives to be extensively detailed. There are however several external documents useful to developing for JCAP (all are included in the Docs/ directory):
- Propeller 1 (P8X32A) Manual
- Propeller 1 (P8X32A) Datasheet
- DE0-Nano Manual
- Loading P8X32A onto DE0-Nano
- HYDRA Game Development Manual (inspiration for majority of JCAP hardware and drivers)
On the off chance anyone is interested in contributing to JCAP, there are some basic standards which should be ahered to:
- Document everything! For code documentation, use existing code (e.g. Dev/Input/Software/input.spin) as an example. PASM should be documented somewhat anal-retentively, line-by-line, with block comments for routines and subroutines. Header comments should follow the same standard established by existing code as well.
- Any discovered problems/concerns/features that you won't be addressing with your current commit need to have an issue created and assigned to the appropriate person(s), tag, milestone, and project. This eliminates the risk of development amnesia. Additionally, when a commit has satisfied an issue, the commit hash should be referenced in the closing comment of the issue.
- Commit messages need to at a minimum broadly describe each change made to the repository. Whether it's fixing a bug, adding a feature, adding a new datasheet, or updating some indentation, one should be able to read the commit message and understand immediately what's been done to the repo.
- Any documents (manuals, datasheets, tutorials) which are critical to your contributions should be placed in their appropriate subdirectories in /Docs. For similarly important generic links, place them in "Useful Links.txt" in /Docs.
Pull requests that don't follow these guidelines will be rejected until corrections have been made. While this all may seem like an over-processed waste of time, an auxiliary goal for JCAP is to create a project which maintains the highest possible standards to prevent headache down the road and belay confusion to anyone on the outside looking in.
The following individuals have contributed to JCAP:
- Connor Spangler (cspang1): email@example.com
- Marko Lukat (konimaru)