Welcome to 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.
- 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
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
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.
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.