Atari 7800 ProSystem#
Open 8bitworkshop IDE
Click here to program the Atari 7800 in the 8bitworkshop IDE now!
Atari 7800 Specifications#
- Lifespan
1986–1992
- Media
ROM cartridge (16K-512K)
- CPU 8-bit
MOS Technology 6502C @ 1.79 MHz
- Memory
4K RAM (expandable to 48K)
- Graphics
MARIA custom chip, 320×240 pixels, 25 colors on screen
- Audio
TIA (2600 compatible) + optional POKEY sound chip
- Controllers
2600-compatible joysticks, paddles, driving controllers
- Best-selling game
Pole Position II
History#
The Atari 7800 ProSystem was originally developed by General Computer Corporation (GCC) in 1983-1984 as a successor to the Atari 5200. The system was designed to be fully backward compatible with the hugely successful Atari 2600 while offering significantly improved graphics capabilities.
The 7800’s development was driven by the need for Atari to compete with the Nintendo Entertainment System and other third-generation consoles. GCC designed the system around a custom graphics chip called MARIA (Memory Assisted Raster Image Architecture), which could display up to 100 sprites simultaneously with smooth scrolling and collision detection.
Due to the video game crash of 1983 and Atari’s sale to Jack Tramiel, the 7800’s release was delayed until 1986. By then, Nintendo had already established dominance in the North American market. Despite this, the 7800 found moderate success, selling over one million units during its lifespan.
The system’s key advantage was its 2600 compatibility, allowing it to play the extensive library of 2600 games. However, the delayed release and limited third-party support meant it never achieved the market penetration Atari had hoped for.
Programming#
The Atari 7800 can be programmed using either 6502 assembly language or C (using the cc7800 compiler). The system’s unique MARIA graphics chip requires understanding of Display List Lists (DLLs) for sprite management and graphics rendering.
Key Programming Concepts#
- MARIA Graphics Chip
The heart of the 7800’s graphics system, MARIA uses display lists to manage sprites and graphics objects efficiently.
- Display List Lists (DLLs)
Hierarchical structure that defines what graphics to display on each scanline. Each DLL entry points to a display list containing sprite data.
- Sprites
Graphics objects that can be positioned anywhere on screen. The 7800 supports both direct and indirect sprite modes.
- Palettes
The system supports 8 palettes of 4 colors each, allowing for 25 simultaneous colors on screen.
Hardware Architecture#
The Atari 7800 contains several key components:
6502C CPU running at 1.79 MHz
MARIA custom graphics processor
TIA chip for 2600 compatibility and basic audio
6532 RIOT for I/O and timers
4KB RAM (expandable via cartridge)
MARIA Registers (atari7800.h)#
Hex |
Name |
Description |
---|---|---|
|
|
Background Color |
|
|
Palette 0 - Color 1 |
|
|
Palette 0 - Color 2 |
|
|
Palette 0 - Color 3 |
|
|
Wait for Sync |
|
|
Palette 1 - Color 1 |
|
|
Palette 1 - Color 2 |
|
|
Palette 1 - Color 3 |
|
|
MARIA Status |
|
|
Palette 2 - Color 1 |
|
|
Palette 2 - Color 2 |
|
|
Palette 2 - Color 3 |
|
|
Display List List Pointer High |
|
|
Palette 3 - Color 1 |
|
|
Palette 3 - Color 2 |
|
|
Palette 3 - Color 3 |
|
|
Display List List Pointer Low |
|
|
Palette 4 - Color 1 |
|
|
Palette 4 - Color 2 |
|
|
Palette 4 - Color 3 |
|
|
Character Base Address |
|
|
Palette 5 - Color 1 |
|
|
Palette 5 - Color 2 |
|
|
Palette 5 - Color 3 |
|
|
Unused - Store zero here |
|
|
Palette 6 - Color 1 |
|
|
Palette 6 - Color 2 |
|
|
Palette 6 - Color 3 |
|
|
MARIA Control Register |
|
|
Palette 7 - Color 1 |
|
|
Palette 7 - Color 2 |
|
|
Palette 7 - Color 3 |
TIA Registers (Compatible with 2600)#
Hex |
Name |
Description |
---|---|---|
|
|
Vertical Blank / Input Control |
|
|
Paddle Control Input 0 |
|
|
Paddle Control Input 1 |
|
|
Paddle Control Input 2 |
|
|
Paddle Control Input 3 |
|
|
Player 0 Fire Button Input |
|
|
Player 1 Fire Button Input |
|
|
Audio Control Channel 0 |
|
|
Audio Control Channel 1 |
|
|
Audio Frequency Channel 0 |
|
|
Audio Frequency Channel 1 |
|
|
Audio Volume Channel 0 |
|
|
Audio Volume Channel 1 |
RIOT Registers (6532)#
Hex |
Name |
Description |
---|---|---|
|
|
Joystick Directional Input |
|
|
I/O Control for SWCHA |
|
|
Console Switches |
|
|
I/O Control for SWCHB |
|
|
Interval Timer Read |
|
|
Set 1 Clock Interval Timer |
|
|
Set 8 Clock Interval Timer |
|
|
Set 64 Clock Interval Timer |
|
|
Set 1024 Clock Interval Timer |
Control Flags#
MARIA Control Register (CTRL
)
CTRL_COLORKILL
(0x80): Disable color outputCTRL_DMA_ON
(0x40): Enable DMACTRL_DBLBYTE
(0x10): Double-byte charactersCTRL_BLKBORDER
(0x08): Black borderCTRL_KANGAROO
(0x04): Kangaroo modeCTRL_160AB
(0x00): 160A/B modeCTRL_320BD
(0x02): 320B/D modeCTRL_320AC
(0x03): 320A/C mode
Display List List Flags
DLL_DLI
(0x80): Display List InterruptDLL_H16
(0x40): 16K Holey DMADLL_H8
(0x20): 8K Holey DMA