Atari 7800 ProSystem#

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

20

BACKGRND

Background Color

21

P0C1

Palette 0 - Color 1

22

P0C2

Palette 0 - Color 2

23

P0C3

Palette 0 - Color 3

24

WSYNC

Wait for Sync

25

P1C1

Palette 1 - Color 1

26

P1C2

Palette 1 - Color 2

27

P1C3

Palette 1 - Color 3

28

MSTAT

MARIA Status

29

P2C1

Palette 2 - Color 1

2A

P2C2

Palette 2 - Color 2

2B

P2C3

Palette 2 - Color 3

2C

DPPH

Display List List Pointer High

2D

P3C1

Palette 3 - Color 1

2E

P3C2

Palette 3 - Color 2

2F

P3C3

Palette 3 - Color 3

30

DPPL

Display List List Pointer Low

31

P4C1

Palette 4 - Color 1

32

P4C2

Palette 4 - Color 2

33

P4C3

Palette 4 - Color 3

34

CHARBASE

Character Base Address

35

P5C1

Palette 5 - Color 1

36

P5C2

Palette 5 - Color 2

37

P5C3

Palette 5 - Color 3

38

OFFSET

Unused - Store zero here

39

P6C1

Palette 6 - Color 1

3A

P6C2

Palette 6 - Color 2

3B

P6C3

Palette 6 - Color 3

3C

CTRL

MARIA Control Register

3D

P7C1

Palette 7 - Color 1

3E

P7C2

Palette 7 - Color 2

3F

P7C3

Palette 7 - Color 3

TIA Registers (Compatible with 2600)#

Hex

Name

Description

01

VBLANK

Vertical Blank / Input Control

08

INPT0

Paddle Control Input 0

09

INPT1

Paddle Control Input 1

0A

INPT2

Paddle Control Input 2

0B

INPT3

Paddle Control Input 3

0C

INPT4

Player 0 Fire Button Input

0D

INPT5

Player 1 Fire Button Input

15

AUDC0

Audio Control Channel 0

16

AUDC1

Audio Control Channel 1

17

AUDF0

Audio Frequency Channel 0

18

AUDF1

Audio Frequency Channel 1

19

AUDV0

Audio Volume Channel 0

1A

AUDV1

Audio Volume Channel 1

RIOT Registers (6532)#

Hex

Name

Description

280

SWCHA

Joystick Directional Input

281

CTLSWA

I/O Control for SWCHA

282

SWCHB

Console Switches

283

CTLSWB

I/O Control for SWCHB

284

INTIM

Interval Timer Read

294

TIM1T

Set 1 Clock Interval Timer

295

TIM8T

Set 8 Clock Interval Timer

296

TIM64T

Set 64 Clock Interval Timer

297

T1024T

Set 1024 Clock Interval Timer

Control Flags#

MARIA Control Register (CTRL)

  • CTRL_COLORKILL (0x80): Disable color output

  • CTRL_DMA_ON (0x40): Enable DMA

  • CTRL_DBLBYTE (0x10): Double-byte characters

  • CTRL_BLKBORDER (0x08): Black border

  • CTRL_KANGAROO (0x04): Kangaroo mode

  • CTRL_160AB (0x00): 160A/B mode

  • CTRL_320BD (0x02): 320B/D mode

  • CTRL_320AC (0x03): 320A/C mode

Display List List Flags

  • DLL_DLI (0x80): Display List Interrupt

  • DLL_H16 (0x40): 16K Holey DMA

  • DLL_H8 (0x20): 8K Holey DMA

Comments