ElectrEm Future 0.5
===================
Welcome to ElectrEm! ElectrEm is an emulator of the Acorn Electron that tries to be very easy to use through a combination of automation and accurate emulation.

This is the "Future" branch of ElectrEm, begun in 2003 as a full scale replacement for the ElectrEm code up until then. While the old code was a line based emulation, the replacement is event based. What that means in practice is that the old code worked in a fictionalised discrete time space where the entire system was updated in intervals of one pixel scanline, which is a relatively harmless fiction to introduce into an emulator, is an easy and obvious way to code and is probably how 95% of emulators out there work. The problem is that ElectrEm was always striving to achieve 100% accuracy and any false assumptions work against that. As the hacks to introduce "better than scanline" accuracy accumulated they all tended to rely on knowledge of the workings of the other emulated subsystems and it became harder and harder to maintain everything. The old code was also resolutely single threaded, as you'd expect from an emulator with a DOS port.

An event based emulation is harder to conceptualise and implement, but doesn't inherently introduce any inaccuracy. It also means that subsystems can be properly partitioned and easily maintained. Getting started is a lot tougher, but in the end optimisation is easier. The "Future" had to throw away most of the old code.

This version represents a huge step forwards for the "Future" branch, which now supports 90% of the functionality of the "Classic" branch.

Emulated Hardware
-----------------
- Base Electron, monitor, keyboard, speaker
- Tape subsystem (UEF and CSW file support)
- Disk drive emulation (UEF, ADF/L/M and SSD/DSD file support - FDI in progress), ADFS and DFS supported
- Slogger Master RAM Board in turbo and shadow (64 kB) modes
- (fictional) "Full BBC Micro speed" addon that gives BBC Micro operation speed with normal memory layout

Emulation Accuracy
------------------
The following are, in principle, 100% accurate and are usually not seen on other emulators (regardless of machine):

- Electron split bus timings, and hence CPU execution timings
- ULA collection timings
- Palette change timings

Special Features
----------------
ElectrEm Future retains the bit multiplexing features of the classic code, but they are virtually untested and poorly maintained. Bit multiplexing in theory allows old games to be spruced up with new graphics. The 6502 CPU continues doing exactly what the original programmer intended but its data manipulation operations are expanded so that more data is handled at once. If the correct data is injected into the extended memory before games are run and the game works in a broadly ordinary manner then at the end a more detailed frame buffer is created.

ElectrEm Future goes a lot further than the old code in making it easy to insert the extra data into otherwise completely accurate game/media images without damaging their integrity. This is a feature I hope to build on and better emphasise in future.

Authors
-------
Thomas Harte	- main programmer
Ewen Roberts	- first Mac OS X port, native GUIs for OS X and Windows
Fraser Ross	- CSW.dll, giving CSW support under Windows

Contact
-------
You can contact me at thomas.harte@gmail.com. You might also consider joining the Electron related mailing list that often hosts ElectrEm chat at http://games.groups.yahoo.com/group/electrem/.