I have an emulator on the app store called Mu - Multi System Emulator. See Commerce > Phoenix Retro Games. An emulator eg a GameBoy emulator takes a rom (game file taken from a game cartridge) that runs on a GameBoy and allows the game to run on the host (whatever machine the emulator is running on). My emulator Mu allows alot (and I mean alot!) of games published for various home computers and games consoles to run on Apple iPhones (running the iOS operating system).

What emulators do is that they interpret the code made for another machine (eg the GameBoy’s cpu and gpu - if it has one and other hardware) so that the code runs on the host machine. The emulator is itself a piece of software that you run before you run the game rom (or any other emulated code ie software) within the emulator. I’m writing this because I think that you can design hardware specifically with emulation in mind. Imagine a iPhone/iPad like device with has hardware (ie logic circuits) which works like an emulator. I’m not a cpu/hardware designer so this may not be a worthwhile exercise. Effectively this would be an emulator in hardware rather than in software. Perhaps a FPGA (Field Programmable Gate Array) programmed to be an emulator.

As the FPGA is reprogrammable you can program it to emulate a wide variety of hardware. I think this is more whether it is worthwhile to do rather than being a technical problem. Having said that we are now in the age of the cloud and (just having looked it up - thanks Google) FPGAs are apparently used quite extensively in the cloud.

So in summary it would be quite feasible to have emulators running on FPGAs in the cloud and this would make the emulation powerful in terms of what can be emulated as the emulation is performed in hardware.

There is the concept of logical equivalency between hardware and software. (I’m sure that I haven’t made that up) What you can do in hardware you can do in software and vice versa ie the instructions that a cpu performs can also be done in software. As an example you can write a program that calculates 1+1. That calculation can also be hardwired into the instruction set of a cpu. By turning the emulation software into CPU instructions, you can simply emulate more powerful hardware and/or actually emulate multiple devices (eg home computers/consoles) in parallel. Why would you want to do that? You can provide the emulation as a service (SaaS).

Traditinally, you write source code, which is human readable, in a programming language. That source code is compiled into machine code (ones and zeros) which a machine understands eg an .app for a Mac and .exe for Windows. Each machine understands different ones and zeros so to get a program that works on one machine to work on another, you would RECOMPILE the code for another machine (architecture - to use the proper word). That works perfectly well but it needs to be done by a programmer (software engineer). What happens next is that the machine becomes old and obsolete which is what happens in computing history. So in order to use that software you have to use an emulator. Well what about simply recompiling the code for the modern machine. That requires access to the source code, which may not available. Another thing is that the obsolete machine probably had lots of software written for it. The home computer that I grew up with, the Commodore 64 has apparently 10,000 to 15,000 programs written for it. Re-compiling one or two apps is perfectly fine (as long as you have access to the source code) but it doesn’t make sense for a large number of apps (maybe thousands!) and you may not have access to the source code anyway.

Emulation is primarily used for games but what about emulation of other software. One reason is simply academic ie it took a lot of effort to write the software and it may simply be worth preserving it (in the same way that we have libraries to preserve books - though libraries may not actually be thought of in that manner; they are generally regarded as places to go to access information stored as text in books not as places to simply preserve books ).

It’s somewhat of a rabbits’ warren the more you venture into it but that is a reflection of the fact that it is a line of enquiry that humans are pursuing. Computing is a science and software is a product of computer science so I figure that software is worth preserving and investigating. As a side note, going backwards in time the software is less sophisticated and it may prove ideal for education and a simpler word processer may be ideal when you just want to write and focus the mind without the interruptions that modern technology presents.