CopperScreen is an Amiga emulator written entirely in C# and .NET 10. The project is built from scratch, with each subsystem implemented incrementally: audio replay, SID emulation, Motorola 68000 emulation, Paula, and additional Amiga hardware as required. Developing the emulator this way allowed every new feature to be validated by running real software instead of relying solely on synthetic tests.

As a side project, I have published the Copper68k package that emulates 68000/010/020/030/040 and also has a JIT backend.

The biggest challenge has been balancing accuracy with simplicity. The Amiga 500 uses DMA heavily, and an accurate re-implementation of the DMA engine is important. Games and demos depend on cycle-exact behaviour. But that is not enough: an accurate 68000 emulation is necessary, too. It shares the same memory bus with the custom chips and DMA, and if the 68000 is using too many or too few memory slots, the emulation is not correct.

The performance is always an issue. C# does its job. Modern dotnet is capable of running the emulator but the DMA engine makes it very demanding. It has to be emulated accurately and at real speed, maintaining 50 FPS.

The 68000 emulator backend has JIT (or, in fact, dynamic recompile). This allows very fast CPU emulation and is portable because 68k code is translated to CIL and then dotnet translates to the host machine language. It works on my Windows/x64, Linux and macOS / Apple Silicon.

There is also full RTG emulation.

Emulating Amiga 500 requires a real Kickstart ROM image or using built-in CopperStart that can replace the original Kickstart ROM for a limited set of games and demos.

Built With

  • dotnet
Share this project:

Updates