v2600‎ > ‎documents‎ > ‎


CS310 Project Specification

x2600, An Atari 2600 Emulator

by Alex Hornby

The Problem

In the move to ever more powerful computers, it is easy to forget older machines. The Atari 2600 was the first widely available home video game, and thus shaped the market for years to come, bring classics such as pong, pacman and space invaders to the home.

Old hardware ages however, so to retain the means to run 2600 games I propose to write an emulator, so that this often overlooked part of computer history is not lost.

It is useful to note that there is a 2600 emulator that runs under MS Windows. I feel that this does not answer the need fully, as according to its author it needs to be altered slightly for different games, and is proprietary to Activision, so that many cartridges will not be available for it.


  • Obtain a knowledge of the 2600Æs hardware.
  • Learn how to write for the X window system.
  • Obtain support utilities such as a 65xx assembler/debugger.
  • Emulate the CPU (a 6507)
  • Implement a routine to load cartridge images.
  • Emulate the joystick controllers via the keyboard.
  • Emulate the 2600Æs video display timing.
  • Emulate the background and playfield graphics.
  • Emulate the player missile graphics and ball.
  • Emulate the display priority encoder.
  • Run a 2600 game on my emulator.
If I have extra time I would like to:
  • Emulate the paddle controllers using the mouse.
  • Add sound support, possibly using NAS (Network AudioSystem)
  • Make the emulation more efficient.



I have obtained a copy of the Stella programmerÆs guide (The Stella is the main custom chip), as well as assembler source to Combat and Adventure to help me understand the hardware. I have also got documentation on the 65xx CPU family, including undocumented opcodes. I have also been learning X, and have ported a simple game from Linux SVGAlib to X as an exercise.

I have documentation on several cartridge formats, including ActivisionÆs. My experience of 6502 assembly during Computer Systems 1 will also be useful.


I propose to write the emulator in C/C++ to run under the X Window System.

The 6507 emulator will be constructed by obtaining an existing 65xx emulator, and modifying it to emulate the 6507. There are several available, including the 6510 emulator of x64, which is under the GPL (Gnu Public License).

The video hardware will have to be modelled by emulating the position of the electron beam of the TV, as the 2600 uses this to set sprite positions, although other features could possibly be implemented on a per line rather than a per pixel basis.

The video hardware will probably be the limiting factor for the speed of the emulator, as many comparisons will be necessary for each line of emulated display. Another factor will be the speed of the X server. To speed up the display I will support the MIT Shared Memory Extension which provides a performance boost to image copying when the client and server are on the same host.


I will also need support tools, such as a 65xx assembler/disassembler, which I have found freely available on the Internet.

The Timetable

Drafted to show latest date for each goal.

Autumn Term

1 2 3 4 5


Learnt X
6 7 8 9 10

Cart Images

Christmas Vacation

1         2          3          4
          21st                  CPU
          Birthday              adapted
                                to 6507

Spring Term

1         2          3          4          5
Loading   Joystick              Display    Backgroun
Cart      Emulation             Timing     d/
Images                                     Playfield
6         7          8          9          10
          Player     Prepare    Priority   Run a
          missile    for demo.  Encoder    2600 cart
          graphics                         on x2600.

Easter Vacation

1         2          3          4          5
Write     project    report     .          .

Summer Term

1         2
          Hand in


I propose to write the emulator to run both on the departmental Sun systems, and on my home machine running Linux. The power of the machine needed to demonstrate my project is not known at present, but I propose a machine at least as powerful as my 100MHz Pentium.

Since my project will be source code compatible between Linux and SunOS, my departmental account will be the backup site for my home system.

Back to: Virtual 2600 Home Page