EMU7800: A .NET Atari 7800 Emulator

v0.81, February 28, 2007
Mike Murphy, mimurphy@users.sourceforge.net

EMU7800 releases can be downloaded from SourceForge here.

Click here to jump to the Keyboard Mappings.

Click here to jump to the Screenshot Gallery.

Contents

1.0 Introduction
    1.1 Copyright Notice, Disclaimer, License
    1.2 Release Notes
    1.3 Acknowledgements
    1.4 Known Issues
2.0 Installation
    2.1 Prerequisites
    2.2 Installing the Distribution
    2.3 Rebuilding from Source
    2.4 Game Cartridge Information Database (a.k.a. ROMProperties)
3.0 Running the Emulator
    3.1 Keyboard Mappings
    3.2 Game Controller/Joysticks
    3.3 Paddle and Lightgun Emulation via Mouse (SDL Host only)
    3.4 User Interface
        3.4.1 Game Select Tab
        3.4.2 Settings Tab
        3.4.3 Console Tab
        3.4.4 Help Tab
    3.5 Addressing Performance Problems
    3.6 External Command-line Options
4.0 Screenshot Gallery

1.0 Introduction

This is a release of EMU7800, an Atari 7800 emulator implemented using Microsoft's .NET platform. Most VCS (2600) and ProSystem (7800) titles work well, with 2600 support featuring authentic HMOVE emulation, per Andrew Tower's paper "A Small Opus on the TIA." The stars in Cosmic Ark appear, but without emulation cheats.

EMU7800 runs on Windows 2000, XP, 2003 and Vista. Performance is excellent on systems a year or less old.

EMU7800 was originally an academic graduate capstone project for the Institute of Technology at UW Tacoma.

Send me a note if you have questions or feedback. Enjoy!

1.1 Copyright Notice, Disclaimer, License

EMU7800 is Copyright © 2003-2007 Mike Murphy.

THIS SOFTWARE IS PROVIDED "AS-IS" WITHOUT ANY EXPRESSED OR IMPLIED WARRANTY. IN NO EVENT WILL THE AUTHOR BE HELD LIABLE FOR ANY DAMAGES ARISING FROM THE USE OF THIS SOFTWARE. PLEASE SEE THE ENCLOSED "LICENSE.TXT" FILE FOR THE COMPLETE LICENSING TERMS.

1.2 Release Notes

0.81:

0.71:

0.61:

0.60:

0.55:

0.50:

0.41:

0.33:

Further refined the HMOVE emulation, added a few illegal opcodes to enable some of the homebrew titles to work, and fixed several emulation bugs. This cleaned up Pitfall2, and other Activision titles that had visual artifacts.

0.32:

0.31:

1.3 Acknowledgements

EMU7800 is a derived work of many people. Please let me know should others need to be included in the following list:

For all things Atari, including game manuals, tips, and community, be sure to visit AtariAge!

1.4 Known Issues

2.0 Installation

2.1 Prerequisites

To run EMU7800, you will need to have the .NET 2.0 runtime installed onto your Windows-based computer. You can do this via Windows Update. To use the WPF Host on Windows Vista, you will need to have the DirectX runtime installed (including the Managed DirectX libraries.) To have the capability to build from the included source code, you'll either need the .NET 2.0 software development kit (SDK) or Visual Studio 2005. EMU7800 was developed on a machine with a Pentium 4 Celeron 1.7 GHZ processor (a five year-old system, as of this writing.) This was adequate for emulator performance.

2.2 Installing the Distribution

The distribution is made available as an Windows Installer .MSI file. Simply launch it to deploy the software to your machine. A single shortcut will be placed on your desktop to launch the emulator.

2.3 Rebuilding from Source

For the curious, the complete source code is included in the distribution and is located in the src/ folder. To rebuild from source, either use Visual Studio 2005 to open the *.sln or use the following MSBuild command in a CMD.EXE window:

MSBuild /t:Rebuild /p:Configuration=Release EMU7800.csproj

The MSBuild utility is located in the %WINDIR%\Microsoft.NET\Framework\v2.0.50727 folder.

2.4 Game Cartridge Information Database (a.k.a. ROMProperties)

In EMU7800, recognized game ROM files have associated properties that determine the proper execution configuration of the emulator. These attributes are stored in the ROMProperties.CSV file, located in the same directory as the executable. Any editor that can work with .CSV files (e.g. NOTEPAD.EXE and Excel™), can be used to update the file. Note that a copy of this file is also in the src\ folder—serving as a ready backup when necessary.

3.0 Running the Emulator

3.1 Keyboard Mappings

Key  GDI Host   SDL Host   WPF Host  Function
ESC Escape (quit) from the currently running machine/game
Q   Swap Stelladaptor paddles P1/P2 on device 0
W   Swap game controller/joystick devices 0/1
E   Swap Stelladaptor paddles P3/P4 on device 1
P Pause the emulator, any other key resumes
M Sound mute toggle
F Show frame rate, emulator execution statistics
R Game Reset Console Switch
S Game Select Console Switch
C Toggle between Color and B/W Console Switch settings
1 Toggle between A/B difficulty for left player
2 Toggle between A/B difficulty for right player
F1 Set keyboard/mouse to player 1 control
F2 Set keyboard/mouse to player 2 control
F3 Set keyboard/mouse to player 3 control
F4 Set keyboard/mouse to player 4 control
F5 Pan display left
F6 Pan display right
F7 Pan display up
F8 Pan display down
F11   Save machine state to outdir/
F12   Save Screenshot to outdir/
Up Arrow Move up: joystick, booster grip
Left Arrow Move left: joystick, booster grip, paddles, driving
Right Arrow Move right: joystick, booster grip, paddles, driving
Down Arrow Move down: joystick, booster grip
CTRL Trigger
ALT Booster
NUMPAD7 Keypad 7
NUMPAD8 Keypad 8
NUMPAD9 Keypad 9
NUMPAD4 Keypad 4
NUMPAD5 Keypad 5
NUMPAD6 Keypad 6
NUMPAD1 Keypad 1
NUMPAD2 Keypad 2
NUMPAD3 Keypad 3
NUMPAD* Keypad *
NUMPAD0 Keypad 0
NUMPAD/ Keypad #

3.2 Game Controller/Joysticks

Up to two game controllers (e.g. joysticks) can be used, where the first two found in the device list will be selected for use.

For game ROMs that use the paddle controller, the mouse will be used as input unless the Stelladaptor controller is detected as one of the selected game controllers. In this case, mouse input will be automatically deactivated and the Stelladaptor device will be leveraged for paddle input.

The paddle swapping keys (Q and E) of the SDL and WPF Host are useful when you are using a set of original Atari paddles, where the "player 1" potentiometer is excessively worn and delivers non-uniform and/or erratic resistances. Chances are the "player 2" dial has not seen as much action and will perform better.

3.3 Paddle and Lightgun Emulation via Mouse (SDL and WPF Host)

On paddle games, the mouse can be used as the paddle controller. Sensitivity is currently not configurable. The mouse is also be used for lightgun games. Look for a small white dot that indicates where on the screen the "lightgun" is pointed at.

3.4 User Interface

3.4.1 Game Select Tab

Game Select Tab

The number of ROMs recognized in the roms/ directory is displayed in the lower left corner. To select a new directory, click the Select ROM File button, and navigate to the ROM directory of your choice. When a ROM file is selected, the rest of the directory contents will be scanned and will be presented for subsequent selection.

Open File Dialog

By default, .bin files will be displayed in the Open File dialog. To show .a78 files, use the File Type drop-down.

3.4.2 Settings Tab

Settings Tab

There are several settings that can be adjusted on this tab. Settings will saved, so they will not need to be set again every time the program is launched.

3.4.3 Console Tab

Console Tab

Events pertinate to the execution of the emulator are logged to the Console. Commands may also be issued here to access features not available via the GUI. To see what is available, enter ?.

3.4.4 Help Tab

Help Tab

The Help tab features an integrated web browser control. Two link controls are available, located at the bottom of the control. The README link references this README file on the local system. The Game Help link varies dependent upon the currently selected game, and is intended to reference original game instruction manuals, available online. At the time of this writing, not all games have help URLs defined. URLs can be specified in the ROMProperties.csv file, and more will be included in subsequent EMU7800 verisons. Standard web browser features, like the Back button and Refresh, are available by right-clicking in the browser window.

Note that when the Game Help link is clicked, it will "disable" to indicate the page is loading. It will "re-enable" once loading is complete. If no Game Help URL is available, the link will not be visible.

3.5 Addressing Performance Problems

In essence, EMU7800 is a streaming media application. Video output is a sequence of pixels emulating the television raster beam sweeping across the inside surface of the television screen. Similarly, audio output is a stream of pulses. The emulator operates by running as fast as possible, working to fill up the sound queue. Once full, the emulator waits on the queue until a sound frame opens up to receive the next frame of data. The sound queue is consumed by the audio device, at the necessary playback speed. This has the effect of opening up sound frames precisely at the desired frame rate and ultimately synchronizing the video and audio output together.

Should the sound queue be consumed at a faster rate than it can be filled, popping or buzzing noises will occur. The Settings Tab permit the frame rate to be throttled up or down from the default. Reducing the frame rate will reduce the rate at which the sound queue is consumed, giving the emulator a better chance of keeping up on slower machines.

3.6 External Command-line Options

To support various emulator front-end programs, EMU7800 can be launched with a full filename provided as a command-line argument:

EMU7800.exe "c:\Program Files\EMU7800\roms\OYSTR29.BIN"

Should the ROM file not be found, be unreadable, or not recognized, the GUI interface will be launched as normal. Clicking on the Console Tab will show the reason for the failure. Otherwise, the ROM will be run immediately.

4.0 Screenshot Gallery

Atari VCS (2600) Titles:

combat26.JPG breakout26.JPG oystron26.JPG adventure26.JPG frogger26.JPG cosmicark26.JPG asteroids26.JPG gijoe26.JPG earthdiescreaming26.JPG

Atari ProSystem (7800) Titles:

asteroids78.JPG impossiblemission78.JPG mspacman78.JPG summergames78.JPG joust78.JPG darkchambers78.JPG robotron78.JPG dkongjr78.JPG mariobros78.JPG