411 REFERENCE · Wikibooks
Emulation/What is Emulation?
Reference material by Wikibooks contributors. This retains its source identity and is not 411 news reporting.
Emulation is a class of software that emulates the hardware level behavior of another system. The program that performs this is called an emulator. It differs from software porting or decompilation, which both involve the remaking or editing of old software with modern development tools. The purpose of an emulator replicating the hardware itself is so that read-only copies (ROMS) of the original software can be ran on the emulator, theoretically providing a near identical end user experience.
+Some main reasons for and differences between different legacy software maintenance methods.EmulationPortingDecompilationBrief DescriptionA separate piece of software is written to emulate the behavior of the original system. A copy of the software, such as a ROM dump from a cartridge or CD, is then ran on the software itself to emulate the experience of the original hardware.A program with known, available source code is edited, rewritten, or recompiled to run on modern systems as a native executable.A piece of software without known source code is meticulously reconstructed from compiled machine code or through best guess reconstruction.Pros Allows for near identical use of the software as compared to the old system.
Opens up a whole systems library of software to be potentially used on modern systems. Generally faster than either emulation or decompilation from start of project to release.
Maintaining legacy hardware makes it easier for it to be maintained in the years ahead. Provides a piece of software with working source code, allowing for more easy maintenance (see porting pros).
Opens up more opportunities for modding.Cons Requires foreknowledge of the system hardware, which may be publicly available but may also require reverse engineering. Not always an option of a program doesn't have public source code. Very tedious and timely process, typically requires multiple people and several years to be successful.
Why would one want to do this? Here are some reasons:
Maintaining Functionality of Older Software - As personal computers change and develop over the years, old software often becomes unstable or even unusable. Even if official ports are released by the original developer, they are likely not true to the original version. They are also often paywalled, or can only be accessed as part of a "retro bundle" or with a subscription.
Experimentation - Oftentimes when writing drivers for a piece of hardware or when writing software to run on a microprocessor one often wants to make sure they have a working piece of software before writing it onto the hardware. Sometimes the hardware you're writing the software for may not even exist yet. In either case emulation software is invaluable as it allows you to debug errors in your program without risking the hardware device, emulators can also provide more detailed information on errors that occur, thus they are ideal for testing software without risking the hardware.
Nostalgia - Let's face it. We all have old games or operating systems that we know and love. Perhaps it is no longer practical to use them full time, but it's always pleasant to play around with them once in a while.