emuStudio is a Java Swing application that implements editor of virtual computer, source code editor, and emulation “controller” (sometimes known as “debugger”). The emulation controller is used for controlling the emulation, and also supports interaction in application GUI. Under the hood, it operates with an instance of the so-called “virtual computer”. The virtual computer - or a computer emulator - is loaded from the computer configuration, selected by the user on the application startup.
Virtual computer is assembled from plugin object instances, possibly interconnected, according to the definition of given computer configuration. Each plugin is a single, almost a self-contained JAR file. It means almost all dependencies the plugin uses are present in the JAR file, except the following, which are bundled with emuStudio and will always be available in the class-path:
The application provides also:
- plugin configuration management - implementation of PluginSettings allowing plugins to register themselves or get instances of other registered plugins
- runtime API for the communication between plugins and emuStudio application - implementation of ApplicationApi
Plugins get those objects in the constructor. Details are provided in further chapters, but here can be revealed just this: there are four types of plugins: a compiler (which can produce code loadable in the emulated memory), one CPU emulator, one operating memory, and none, one or more virtual devices. The core concept of a virtual computer is inspired by the von Neumann model.
Each plugin implements API from emuLib, following some predefined rules. Plugin physically is compiled into a JAR file and copied into particular subdirectory in emuStudio installation.
From architecture perspective, emuStudio is a family of GitHub repositories, a combination of multiple sister projects:
- emuStudio - application and plugins
- emuLib - a shared run-time library used by emuStudio and plugins. Javadoc is here.
- Edigen - CPU instruction decoder and disassembler generator based on a specification file.
- Edigen Gradle plugin
- CPU testing suite - a general unit-testing framework for testing CPU plug-ins. Tests are specified in a declarative way.
- emuStudio website