Emulator Programming


BASICXasm

Dennis Ranke has released his cross assembler which very cleverly patches the BASIC assembler in the same was as ExtBas, but to allow it to assemble code for the Z80, 6502 and Chip8. The assembly language to be used is set by adjusting the OPT value passed to the assembler, but once the BASICXasm module is loaded, it is completely transparent. A superb little tool which is invaluable for those who wish to develop emulators or software for the supported CPUs. Dennis is also looking at adding other assembly languages, possibly including 65C816 and 68000. BASICXasm also comes with demonstration code for all supported systems, including Icebird's superb gameboy library! You'll need to use ExtBas to assemble the demonstration Gameboy code though.

BASICXasm v2.05 (28/8/98)
BASICXasm (25Kb ZIP file)


emul6502

Alain Brobecker has been working on an ARM coded 6502 emulator using the BASIC assembler for free release. The emulator is very fast, running at about 4MHz on an ARM3 and is available to be used by anyone who wants to (in freeware projects). It has a very nice debugger built in with every feature you could ask for. There aren't many bugs left in the emulator at all (there is inevitably one somewhere) and Alain is using it to develop his Atom Bomb, Acorn Atom emulator to put it fully to the test. If you are thinking of starting to write an emulator of a 6502 system I suggest you take a look.

emul6502 v0.07 (28/8/98)
emul6502 (23Kb ZIP file)

Alain also maintains a cross development page with details about creating programs for other platforms (which can be run under emulation) on your Acorn.
http://www.cybercable.tm.fr/~brooby/xdev.htm


ACME

Marco Baye has written ACME (A Crossassembler for Multiple Environments) as a portable cross-assembler to be converted to several different platforms. At present there are versions for RISC OS, DOS, Linux and AmigaOS with OS/2 and C64/128 to follow shortly. ACME can assemble code for most of the 65xx series of processors, particularly the 6502, 65c02 and 65816 (SNES), support for the illegal 6510 opcodes (as used in the C64) is being added and the Z80 processor may be added shortly.

ACME was originally developed in order that Marco could code for the Commodore C128 on both his RISC PC and the C128 using the same assembler without having to change the code at all. The source code is freely available under the GNU GPL license and the C128 version will be out soon. Since it is to be used primarily for C128 development, it is no surprise that the assembler features some C64 specific features, if someone sends Marco info about what to add to make it an ideal BBC cross-assembler, he may of course include that as well.

ACME v0.04 beta (12/98)
ACME (115Kb ZIP file)

ACME homepage


Here is a collection of links to resources that may be helpful if you are trying to write/port an emulator, although this list is by no means comprehensive, it is a good starting point, and even if what you want is not listed here, then you'll probably be able to find it quite quickly from one of these pages. I recommend you try out the first few miscellaneous pages listed, as they're very comprehensive!!

Amiga:
Fellow (source)

Amstrad CPC:
CPC by Mark Rison (source)

Apple Mac:
vMac (source)

AppleIIe:
Apple][ emulator (source)

Arcade
MAME, multiple arcade machines (C source)

Atari Lynx:
Handy version 0.40 (C++ source) - already ported
Atari Lynx technical info

Atari ST:
Atari ST technical info - by Sam Ellis
STonX page - portable Atari ST emulator (source)

Atari 800:
Atari 800, 800XL, 130XE, 5200 emulator (C source) - already ported

Atari 2600:
Atari 2600 tech information
Atari 2600 emulator (source)_
Stella - multiplatform Atari 2600 emulator (source) - already ported
PC Atari (pascal and 80x86 source)

BBC:
BBCem page (C source code), v0.80 and lower as later use DirectX
BeebInC page (C source code)
BBC Lives technical documents
BBC documentation project

ColorGenie
ColourGenie emulator source code

Colecovision:
Colecovision (C source) - already ported!
ADAMem colecovision (C and miniscule 80x86asm) - already ported
Virtual ColecoVision (J++ java & C++ also)

Commodore (PET, VICE 20 etc.):
VICE (source) - already ported

Dragon:
Dragon & Tandy CoCo (source)

Gameboy:
Marat's Gameboy page
Jeff Frohwein's Gameboy Technical Docs
Jen's GB emu (80x86 assembly)
Andreas Stroiczek's ARM coded Gameboy emulator source

MSX:
MSX FAQ
fMSX (C source) - already ported!

NES:
Marat's NES hardware doc
The NES tech repository - some good NES docs
xNES (C source) - already ported & discontinued
Nezulator (Pascal source)
6502 emulator from Nesticle (80x86 assembly)
How to write a NES homebrew game
NEScript - mid-level language for NES development
Angelic Design NESdev - another development kit (in development)
Icarus Productions - a few interesting Gameboy Color homebrew ROMS
WinNES (Delphi source)

Nintendo64:
N64 technical docs - info is rather limited at the moment.
DEXTROSE

PC Engine:
TurboGrafx (PCEngine) internals
Jen's (VPCE author) TurboGrafx tech info
HuGo PC Engine (C source)
TGsim (C source)
PCE Hack list
TG16 hacking
Paul Clifford's PCE information page
Paul Clifford's Programmable Sound Generator info
Paul Clifford's Video Colour Encoder info

PlayStation:
pex, dynamic recompiler core for r3000 (playstation)
PSEmu v0.1.22 (C source, archive password = marlboro) FPSE source (C source)

Sega Master System:
Rich Talbot-Watkin's SMS technical guide
Massage v0.61 (80x86 Assembly source)
Zophar's Domain Master System/Game Gear technical docs

SNES:
SNEeSe SNES (C & lots of x86 source)
Snes9x (C source) - already ported

Spectrum:
Spectrum FAQ
Q-emuLator support page - Sinclair QL details.
X128 Spectrum emulator (source)
QLAY emulator for Sinclair QL (with 68000 source available)
Jasper, Spectrum (java source)

Vectrex:
Vectrex Emulator page

Virtual Boy:
Virtual Boy Technical Information

Windows:
WINE windows emulator (C source)

CPUs:
6502 Cross development tools - loads of assemblers, compilers and 6502 documentation (a lot are PC based)
6502 and Z80 portable emulators (C source)
both C & x86 assembly Z80 emulator
both C & x86 assembly 6502 emulator
x86 assembly Atari math box emulator

ARM code 6502 (unreleased) - David Sharp
ARM code 6502 (incomplete) - Alain Brobecker

Miscellaneous:
MESS source - multiple console and computer emulator source
Emulation Programmers Resource - good collection of emulation info
Emulation Programming Repository - a collection of emulation info.
The Console Programming Page - loads of good info on SNES and Megadrive!
Some Emulator programming ideas from the author of CAGE (for the PC)
Sources for GB97, NESa and many more
Computer Emulation Resources
Marat Fayzullin's homepage (including how to write an emulator in simple terms)- this man is an emulation god!!
Console Hack - BIOS archive for PlayStation, N64 and Sega Saturn
Jim Breen's Japanese Translation page - very handy if there's some docs you can't read!
Allegro graphics library information - used in a lot of C emulators.

Features of a good emulator...
Save/Load state at any time.
Pause and advance frame function (not just the systems pause either, a freeze frame of emulation is nice).
Reset.
Save screenshot.
Ability to set individual options for each ROM if desired.
Frame skip option, and automatic frame skip detection optional.
Installs to icon bar.
Multitasking option.
Various resolutions.
Doesn't require VIDC20 (RPC and later only).
Debugger and disassembler (for the techies).
ROM information, such as size, name, memory mapper used, manufacturers etc.
Sound sample grabber.
Force slow down emulator (to get past tricky parts in games).
Show Frames/second.
Configurable controls.
Adjustable emulated palette.
StrongARM compatible
Go at normal speed even if could run faster on a StrongARM (speed throttling).
Option to go at maximum speed (no speed throttling).


The Acorn Emulation Page - David Sharp
© Copyright David Sharp 1997,1998