Differences
This shows you the differences between two versions of the page.
Both sides previous revision Previous revision Next revision | Previous revision | ||
cartridges [2016/05/25 12:11] ex_writer [Cartridge Types] |
— (current) | ||
---|---|---|---|
Line 1: | Line 1: | ||
- | ====== Cartridges ====== | ||
- | |||
- | In the Astrocade's [[memory map]], 8KB ($2000–$3FFF) is allotted to interchangeable cartridges. | ||
- | |||
- | ===== Cartridge Types ===== | ||
- | Two types of cartridges may be used with the Bally Professional Arcade. The first type, called an //autostart cartridge//, is entered immediately after reset. 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. | ||
- | |||
- | The second type, called a //standard cartridge//, is entered after a game selection process is completed. The system does considerably more initialization before control transfer: | ||
- | |||
- | - System RAM is cleared to 0 | ||
- | - The [[interrupt scheduler#actint|ACTINT]] interrupt routine is enabled | ||
- | - The [[human interface#menu|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 (ASCII "U") 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 will use the [[human interface#getpar|GETPAR]] system routine to prompt for game parameters (e.g., score to play to, game time limit, number of players). | ||
- | |||
- | The cartridge has access to the six unused restart instructions. See the following cartridge diagram for the transfer vectors. | ||
- | ---- | ||
- | |||
- | |||
- | [NM:72-3] | ||
- | |||
- | ===== Cartridge Memory Diagram ===== | ||
- | |||
- | {{cartridge_layout.png}} | ||
- | |||
- | [NM:74] | ||
- | |||
- | ===== 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 10H jumps here. || | ||
- | | 200D | RST 18H jumps here. || | ||
- | | 2010 | RST 20H jumps here. || | ||
- | | 2013 | RST 28H jumps here. || | ||
- | | 2016 | RST 30H jumps here. || | ||
- | | 2019 | Player input routine (SR66) jumps here if location 4FFA contains 0AAH. || | ||
- | |||
- | *0218 = First onboard menu, 0000 = last menu. | ||
- | |||
- | |||
- | ---- | ||
- | |||
- | **Reference:** [[http://www.ballyalley.com/basic/bally_on-board_rom_subroutines.pdf|Bally On-Board ROM Subroutines]] [PDF] | ||