CS310 Project Specification
x2600, An Atari 2600 Emulator
by Alex Hornby
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
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
- 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
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
I will also need support tools, such as a 65xx
assembler/disassembler, which I have found freely available on the Internet.
Drafted to show latest date for each goal.
1 2 3 4
1 2 3 4 5
Loading Joystick Display Backgroun
Cart Emulation Timing d/
6 7 8 9 10
Player Prepare Priority Run a
missile for demo. Encoder 2600 cart
graphics on x2600.
1 2 3 4 5
Write project report . .
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.