Emulation

I have always been fascinated by emulators and there are plenty on net to try out. This page contains links to some good emulator resources on the net, and will contain some of the emulators and utilities that I am working on myself. It also contains information and links on emulator programming.

General Emulation Links

General Emulator Programming Info

Emulator Source Code

System Tech Info

Emulation Articles

Message Boards

My Emulators


General Emulation Links

Retrogames
An excellent site for up to date emulator news and discussion.

Zophar's Domain
This site contains a very comprehensive archive of pretty much any emulator you would want.


General Emulator Programming Info

Marat Fayzullin's Emulation Page: Marat wrote the original Gameboy and Colecovision emulators and also wrote emulators for the MSX, NES and Sega Master System. You will also find source code for his generic 6502 and Z80 emulators on this page. He also has a good 'Emulator Programming How-To' here.

Arcade Emulation How-To: This an excellent document on emulator programming. It is geared towards arcade emulation but the info can be applied to almost any emulator. The documents even contains step-by-step instructions on how to write an emulator for the arcade game Phoenix.

 


Emulator Source Code

The following emulator come with source code that you can look at to see how things are done:

fMSX: MSX computer emulator by Marat Fayzullin.

Colem: Colecovision emulator by Marat Fayzullin.

Master Gear: Sega Master System emulator by Marat Fayzullin.

ACE: Atari 8-bit computer emulator.

Atari800: Atari 8-bit computer emulator by Dave Firth.

StonX: Atari ST emulator by Marinos Yannikos and Martin D. Griffiths.

MAME: Multiple Arcade Machine Emulator by Nicola Salmoria and MANY others.

NES, TRS80, VIC20, Atari 2600, Gameboy: All by Paul Robson and all with source code.

MESS: Multiple Emulator Super System.: This is a multi console/computer emulator based on the MAME source. It currently supports Atari 8bit, Atari 5200, NES, Genesis, TRS80, Colour Genie, Apple II, Astrocade, Kaypro, SMS, and Vectrex, with more to come.

 


Tech Info

The hardest part of writing an emulator IMHO is finding accurate technical info on the system you want to emulate. Here are some sites that might help:

Jeff Frohwein's GameBoy Tech Page: Gameboy info.

The Classic Gaming Tech Homepage: Atari 2600 and NES info.

The Jaguar Underground Documentation: Atari Jaguar info.


Emulation Articles

"How Do I Write an Emulator?" Vol. 1 by Daniel Boris: This is  a document I wrote to help answer the question of the title. I discusses the basics of microprocessor based hardware which is an important prerequisite for understand how emulators work. It the covers the basics of CPU and memory emulation.

"Emulating Pong" by Daniel Boris: This is an article I wrote to help answer the question "Why hasn't Pong been emulated yet?".

Converting Schematics to an Emulator V1.2 by Daniel Boris: I got the idea for this document while answering a message to someone about the game Zarzon. I decided this game would be a good example of how to determine a memory map from schematics. The newest version of this document has a few mistakes fixed and now has a section on the video circuitry.

Emulating Games - Getting Started (v0.01a) by Kevin Brisley: An incomplete document from 1997 about the basics of writing an emulator. It's a little out of date but still has some good information. 

A Guide to MAME Drivers

I have seen a lot of people looking for a document on how to write MAME drivers. There wasn't any documentation available except for the source code itself, so I finally sat down and wrote one. These are a little out of date but they are still a good starting point.

Volume 1: Data Structures: This volume summaries the data structures that make up a MAME driver. It takes the game Zarzon as an example and describes the function of each line in each structure. This is by no means a comprehensive guide to how MAME drivers work, but it does present the basics.

Volume 2: Vidhrdw.c: This volume describes how the video hardware section of a MAME driver works.

 


Recompilation Info

Recompilation is an alternate way of handling emulation, as opposed to the more common interpreter type emulators. Here are some links to information on various recompilation techniques.

Executor White Papers: Executor is a commercial Apple Macintosh emulator for the PC. It uses recompilation, which means it converts the 68000 code into 80x86 code and then executes the native code. There are 2 white papers on their site that discuss how this emulator works.


Message Boards

If you are looking for a place to discuss emulator programming check out these Emulator Programming Boards. They tend to not be to busy, but I try to check them on a regular basis.

Retrogames

 


My Emulators

(I have moved all these from this page to their respective pages)

Virtual VCS: This is my MSDOS port of the Atari 2600 emulator x2600.

Virtual Super System: This is my Atari 5200 emulator

6502sim: This is a generic 6502 simulator that I wrote.

O2em: This is my Phillips/Magnavox Odyssey 2 emulator.

Cloak and Dag-ulator V0.60 (Atari Cloak and Dagger arcade emulator)

Cloak and Dagger was a somewhat obscure arcade game put out Atari in 1983. It was originally released under the title Agent X, but was renamed to tie it in with the movie "Cloak and Dagger" which features the game supposedly being played on a 5200. The game that you see in the movie is the arcade game wired up to a TV so it looks like it was running on the 5200. The 5200 version was started, but never finished so there are no home versions of Cloak and Dagger. For more information on this check out the Cloak and Dagger Inside Story.

I am not doing any further development on Cloak and Dagger since it has been incorporated into MAME, and currently works better there. I have left the source here for educational purposes. It can be compiled with DJGPP and Allegro.

To download Cloak and Dag-ulator 0.60 Source click here

 


[Home] [Site Map]

Dan Boris - danlb_2000@yahoo.com