Cartridges
In the Astrocade's memory map, 8KB ($2000–$3FFF) is allotted to interchangeable cartridges (otherwise known as cassettes or Videocades).
Cartridge Memory Diagram
System Sentinel
The system sentinel byte may be one of two values indicating the cartridge type: standard or autostart.
Standard
The bulk of commercial Bally Arcade programs use the standard cartridge format, which transfers control to the program after game selection from the standard system menu. The system does considerably more initialization before control transfer:
- System RAM is cleared to 0
- The ACTINT interrupt routine is enabled
- The MENU colors are set in the left color map
- Vertical blank is set at line 96, horizontal boundary at 41, and interrupt mode at 8
- The screen displays the menu frame
- The shifter is cleared
A standard cartridge is indicated by a sentinel byte of $55 (or ASCII “U” for “User Mode”) at location $2000. Following this byte is the first node of the cartridge's menu data structure. This data structure gives the name and starting address of each program in the cartridge.
When the user selects a cartridge game, control transfers to the starting address with the address of the program name string in the registers. The cartridge program may then use the GETPAR system routine to prompt for game parameters (e.g., score to play to, game time limit, number of players).
Autostart
An autostart cartridge bypasses the standard Bally startup menu and jumps directly to the programmer-specified location. The only initialization that is performed before entry is the setup of the stack pointer to point just below system RAM and the establishment of “consumer mode” in the custom chips. RAM is not altered in this mode.
An autostart cartridge is indicated by a jump instruction (opcode $C3) at location $2000. This jump instruction should branch to the starting address of the cartridge.
Treasure Cove is one of the few commercial Bally Arcade cartridges that uses the autostart structure to jump immediately to its title screen.
Menu Node
write description
Restart Vectors
Restart vectors use the Z80's restart (RST) instruction to provide small, efficient CALLs to commonly-accessed subroutines. Two restart vectors are used, for example, to jump to program start on system reset (RST 0H) and execute the onboard system routines (RST 38H). Cartridges have access to six unused RST instructions residing in memory between $2007–$201B: RST8, RST16, RST24, RST32, RST40, and RST48.
Executing any of these instructions causes the program to jump to a location in memory. At that location, the user executes a jump instruction to vector the program to a new location. RST instructions are useful for optimization because they require less space and time (1 byte, 11 cycles) than an equivalent CALL (3 bytes, 17 cycles). RST pushes the PC onto the stack, so you can return with a RET call, and RST does not alter flags.
The Bally Arcade's reserved restart vectors are optional. Any unused vectors may be used for normal program memory.
Cartridge Memory Structure
Location | Contents | |
---|---|---|
2000 | 55 | C3 |
2001,2 | *Address of next menu table | RST0 or RESET jumps to 2000 immediately after DI and outputs 00 to port 08. |
2003,4 | Address of this menu string literal | |
2005,6 | Address to jump to if selected |
2007 | RST 8 jumps here. | |
200A | RST 16H jumps here. | |
200D | RST 24H jumps here. | |
2010 | RST 32H jumps here. | |
2013 | RST 40H jumps here. | |
2016 | RST 48H jumps here. | |
2019 | Player input routine (SENTRY) jumps here if location $4FFA contains 0AAH. [???] |
*0218 = First onboard menu, 0000 = last menu.
Reference: Bally On-Board ROM Subroutines [PDF]
Cartridge Series Numbers
Number | Title | ROM Size | Release Date |
---|---|---|---|
Action / Skills Series | |||
#2001 | Zzzap / Dodgem | 2K | 1978 |
#2002 | Sea Wolf / Missile (aka Sea Wolf / Bombardier) | 2K | 1977 |
#2003 | Panzer Attack / Red Baron | 4K | 1978 |
#2004 | Clowns / Brickyard | 4K | 1978 |
#2005 | Star Battle | 2K | 1979 |
#2006 | Space Invaders (aka Astro Battle) | 4K | 1979 |
#2007 | Bally Pin | 4K | 1979 |
#2008 | Space Invaders (aka Astro Battle) | 4K | 1979 |
#2009 | Space Invaders (aka Astro Battle) | 4K | 1979 |
#2010 | Dogpatch | 2K | 1980 |
#2011 | Galactic Invasion (aka Galaxian) | 4K | 1981 |
#2012 | Space Fortress | 4K | 1981 |
#2014 | Grand Prix / Demolition Derby | 4K | 1981 |
#2015 | Pirate's Chase | 4K | 1982 |
#2016 | Skiing [unreleased] | ||
#2017 | The Incredible Wizard | 8K | 1982 |
#2018 | Solar Conqueror | 8K | 1983 |
#2019 | Cosmic Raiders | 8K | 1983 |
#2020 | Missile Attack [prototype] | 4K | 1985 |
Sports Series | |||
#3001 | Tornado Baseball / Tennis / Hockey / Handball | 4K | 1978 |
#3002 | Football | 4K | 1978 |
#3004 | Desert Fox / Drag Race [unreleased] | ||
#3005 | Astrocade Pinball (same as Bally Pin) | 4K | 1981 |
#3006 | Bowling [prototype] | 4K | 1985 |
#3007 | Soccer / Dribbling | 8K | 1985 |
Educational Series | |||
#4001 | Elementary Math / Bingo Math | 2K | 1978 |
#4002 | Letter Match / Spell 'n Score / Crosswords | 4K | 1978 |
#4003 | Music Maker [prototype] | 8K | 1985 |
#4004 | BioRhythm | 4K | 1981 |
#4005 | Creative Crayon (aka Coloring Book) [prototype] | 8K | |
Strategy Series | |||
#5001 | Amazin' Maze / Tic-Tac-Toe | 2K | 1979 |
#5002 | Black Jack / Poker / Acey-Deucey | 4K | 1979 |
#5003 | Checkers / Backgammon [unreleased] | ||
#5004 | Conan the Barbarian (aka Quest for the Orb) [prototype] | 8K | |
#5005 | Artillery Duel | 4K | 1982 |
Functional Series | |||
#6001 | Dealer Demo | 4K | 1978 |
#6002 | Bally BASIC | 4K | 1978 |
#6004 | Bally BASIC (w/ tape interface) | 4K | 1981 |
List adapted from the Bally/Astrocade Game Cartridge and Hardware FAQ
[NM:72–4]