The Wayback Machine - https://web.archive.org/web/20041122223833/http://emu7800.sourceforge.net:80/

EMU7800: A .NET Atari 7800 Emulator

Mike Murphy, [email protected]

EMU7800 releases can be downloaded from SourceForge here.
v0.60, August 31, 2004

Contents

1.0 Introduction
    1.1 Copyright Notice, Disclaimer, License
    1.2 Release Notes
    1.3 Acknowledgements
    1.4 Known Issues/TODO List
2.0 Installation
    2.1 Prerequisites
    2.2 Installing Binary-only Release
    2.3 Rebuilding from Source
        2.3.1 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.5 Addressing Performance Problems
    3.6 External Command-line Options

1.0 Introduction

This is a release of EMU7800, an Atari 7800 emulator implemented using Microsoft's .NET platform. Most 2600 and 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 well on Pentium 4 Windows 2K/XP-based computers. Your mileage may vary on other .NET installations.

You are probably asking, "Why would you want to implement an emulator in .NET for?" This was an academic graduate capstone project, for the Institute of Technology at UW Tacoma, where I needed a project that had lots of technical risk.

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

1.1 Copyright Notice, Disclaimer, License

EMU7800 is Copyright © 2003, 2004 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.

THE "msvcr70.dll" FILE IS REDISTRIBUTED PER THE FOLLOWING MICROSOFT KNOWLEDGE BASE ARTICLE:

Microsoft Knowledge Base Article - 326922
Redistribution of the Shared C Runtime Component in Visual C++ .NET
http://support.microsoft.com/default.aspx?scid=kb;en-us;326922

THE LICENSING TERMS OUTLINED IN "LICENSE.TXT" DO *NOT* APPLY TO THIS "msvcr70.dll" FILE!

1.2 Release Notes

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 if I need to include someone else in this list. For all things Atari, including game manuals, tips, and community, be sure to visit AtariAge!

1.4 Known Issues/TODO List

ROM Problems:

TODO:

2.0 Installation

2.1 Prerequisites

To run EMU7800, you will need to have the .NET runtime installed onto your computer. Currently, this means that you will also need to be running Microsoft Windows. I hope this will change in the near future. (Any Linux-heads out there wanting to give it a try?) In any case, it is a free download from Microsoft's website. To have the capability to build from the included source code, be sure to install the SDK (software development kit) as opposed to just the redistributable runtime. EMU7800 was developed on a machine with a Pentium 4 Celeron 1.7 GHZ processor. This appears more than adequate for emulator performance. Your mileage may vary, and I would be interested in hearing how well it works (or doesn't) on other machines.

2.2 Installing Binary-only Release

For convenience, a binary-only distribution is available as an .MSI file. Launching the .MSI file will bring up an easy-to-use installer dialog for deploying the software (Windows systems only). You will need the Windows Installer Service installed on your system, which is available as a free download from Microsoft should it not be available on your system. After running the installer, one shortcut will be placed on your desktop to launch the emulator.

2.3 Rebuilding from Source

For the curious and/or the justifiably paranoid, the source distribution is available as a .ZIP archive. After unzipping the downloaded archive, you should find the following files: All must be in the same directory for things to work. To rebuild from source, simply start a command prompt (CMD.EXE), and change directories to the src/ subdirectory of the EMU7800 distribution. Then to rebuild, enter the command:

csc @build.rsp

The EMU7800.exe executable should appear within the directory within a few moments. Be sure to remember to move it into the same directory as the other files discussed above to have it work.

2.3.1 ROMProperties

As in other emulators, there are properties that are associated with recognized roms. In EMU7800, these are stored in ROMProperties.CSV in the same directory as the executable. Any text editor or a spreadsheet program (that can read .CSV files) can be used to update the file. Should the file become unintentionally damaged, a backup can be copied from within the src/ directory.

3.0 Running the Emulator

Some testing has shown that SDL may occasionally stop with a DirectDraw is still drawing error message to the console on some platforms. Simply hitting the Resume button will continue running the machine where it left off last. This will also happen if the Windows key is pressed during gameplay. If the sound pops or buzzes, then the sound queue is underflowing due to the emulator not being able to generate the sound frames fast enough. This is more likely to happen with the GDI host, versus the SDL Host. The framerate can be adjusted to slow the emulator enough to prevent this (see Settings Tab for more information). The sound playback rate will also be slowed, causing the overall pitch to lower as well.

3.1 Keyboard Mappings

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

3.2 Game Controller/Joysticks

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

For 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 is deactivated, and the Stelladaptor device is used instead for paddle input.

It seems that on Windows XP, the SDL library doesn't return a string where the Stelladaptor can be automatically recognized (this could just be the author's misconfigured machine.) Should this also be the case for you, simply check the "Deactivate Mouse Input" on the Settings Tab to let the attached Stelladaptor be read as paddles.

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

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

NOTE: To use the mouse for paddle/lightgun emulation, make sure the "Deactivate Mouse Input" on the Settings Tab is unchecked!

3.4 User Interface

3.4.1 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.

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

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

3.4.3 Console Tab

Events are logged to the console, to capture information regarding the state of the application at any time. Commands may also be issued here. To see what is available, enter h for help.

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 CRT. Audio output, as you would expect, is a sequence of pulses. The emulator operates by running as fast as possible, working to fill the sound queue. Once the queue is 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 suitable playback speed. Overall, 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 is filled, abnoxious popping or buzzing noises will be evident. The Settings Tab permits the frame rate to be throttled up or down from the default frame rate. Lowering the frame rate will reduce the rate at which the sound queue is consumed, giving the emulator a better chance of keeping up.

When running with the SDL Host (the preferred host), the frame rate cannot exceed your monitor's refresh rate. So if for some reason, you like to play Atari games at an accelerated pace, say, 90 frames per second but your monitor is operating at 72HZ, then 72 frames per second will be the performance limit.

Since the NTSC television standard operates at 60hz, this is the most desirable frame rate for running [NTSC] games with EMU7800. However if your monitor is operating at 60HZ, this will throttle the emulator such that it will not be able to keep the sound queue full. For ergonomic reasons, your monitor should never be operating lower than 72HZ.

Generally, reports indicate that a commodity Pentium 4 system should be enough to run the emulator at full speed. To run on slower systems and to avoid sound pops, tune the frame rate down to a level where they no longer happen.

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.


*** End of README.html ***