Introduction
An .a78 file is a cartridge for the Atari 7800 ProSystem (1986), the console with the MARIA graphics chip and a
6502C processor nicknamed SALLY. The format was made for emulators: a 128-byte header says what the
real cartridge’s wiring would say (how the ROM is banked, whether the cartridge holds a POKEY sound chip or RAM,
which controllers it wants, NTSC or PAL), followed by the ROM, which is the contents of the cartridge’s chips. The
signature is the text ATARI7800 at offset 1, not 0: byte 0 is the header version.
Older dumps are the bare ROM without a header. A file named .a78 that has no signature is read as a bare ROM, and the
cartridge type is then chosen from its size (js7800’s rule: up to 64 KiB a plain ROM, 128 KiB SuperGame with ROM, 144 KiB SuperGame
large, anything else SuperGame). The options bar shows the type and lets you choose another one and, for banked ROMs, the bank shown in the
switchable window.
The explorer shows the header field by field, the ROM as the 7800 sees it (ROM layout), the vectors at the top, and the code disassembled with the instruction decoder for the 6502 (an instruction decoded at every byte), with the names of the MARIA, TIA, RIOT and POKEY registers (memory map).
Structure
0x0000Version of the header layout1 byte0x0001SignatureATARI7800and padding16 bytes0x0011Title, padded32 bytes0x0031ROM size after the header, big-endian4 bytes0x0035Cartridge type flags, big-endian2 bytes0x0037Controllers 1 and 2, TV type, save device4 bytes0x003BReserved (four bytes), the expansion byte at 0x3F, more reserved bytes41 bytes0x0064FooterACTUAL CART DATA STARTS HERE(older versions)28 bytes0x0080ROMto the end of the file
A real file used while the viewer was written: beefdrop.a78 (“Beef Drop”, header version 1, a 32 KiB ROM with a POKEY at
$4000, NTSC, joysticks), a plain ROM that the viewer maps at $8000-$FFFF.
The processor
The 7800 has a 6502C “SALLY”, an NMOS 6502 with a halt line that MARIA uses. The explorer decodes it as an NMOS 6502 with the undocumented opcodes marked; the options bar can switch to the 65C02. See the 6502 instruction set.
Not described
Known, not yet covered
- Reference and viewer: the bytes of header versions 3 and 4 that js7800 does not read (offsets 59 to 62 and 64 to 99): the specification gives them meanings, this site does not yet describe them. See Header.
- Viewer: Activision banking (header high-byte bit 0) is shown as plain 16 KiB banks, and banksets (bit 13) only map the first half of the ROM. See ROM layout.
- Viewer: the BIOS signature check. The real 7800 BIOS checks signature bytes in the last part of the ROM and refuses or changes mode for a ROM that fails; the explorer does not check it, and the page does not describe its format. See Memory map.
- Viewer: the SOUPER mapper’s character banks and extra RAM, the YM2151 and the XM expansion are only named.
- Viewer: which bytes are code and which are data (including MARIA display lists, which are data); every byte is decoded.
Unknown
- Reference: the controller type list beyond joystick and light gun (values 0 to 11) comes from the header specification and was not checked against a file or an emulator (js7800 reads only 0, 1 and 2). The exact RAM ranges and mirrors of the 7800 are stated from general knowledge only.
- Reference and viewer: only one real file (
beefdrop.a78, a plain ROM) was available; every other cartridge type was tested on built headers only.
Other Atari cartridge formats
These are separate formats, not variants of one: the hardware, the file and the pages differ.
- Atari 2600 ROM image (A26) – raw ROM of the 2600, bank switching chosen by hand
- Atari 7800 ROM image (A78) – a 128-byte header, then the ROM
- Atari 5200 ROM image (A52) – raw ROM with a header at its top
- Atari cartridge file (CAR) – a 16-byte header and a type number, for the 8-bit computers and the 5200
Links
Software
Reference
- A78 header specification – the 7800 community wiki’s description of the header
- Atari Compendium – articles and documents about Atari machines