1. Preliminary Design Ideas
1. Provide an emulated x86 platform on which to run binary x86 code.
1. Able to execute the 8086 instruction set
2. Able to interface with plugins to simulate hardware devices
3. Able to provide a debugger and symbols data generating/loading
4. Able to provide an IDE supporting debugging, syntax highlighting, quick reference, etc
1. Should support the full 8086 instruction set.
1. Eventually can support more instructions, such as the floating point coprocessor instructions
2. The emulator should be runnable standalone as well as attached to the IDE
3. Should be able to load pure binary (.bin) and simple executable files (.com)
4. Should be able to load plugins from a dynamic link library (.dll) to simulate hardware devices
5. Should provide a debugger with inbuilt disassembler, as well as symbols loading.
6. Use FASM as an assembler
7. IDE should be programmed in Win32 API. Cross platform compatibility not required.
1.3 Required Components
1. It is important that the core emulator implementation is not platform specific. Any usage of platform-specific components such as mutexes or threads should be abstracted through wrapper functions, or through preprocessor blocks
2. Core emulator engine
1. Emulator engine should be able to serve two purposes
1. Most importantly, to emulate code
2. Second purpose should be to disassemble an input file
1. This can be accomplished with a "disassembler" flag, in which it outputs an ASCII representation of the disassembled code
2. Or it can be accomplished in a different module
4. Emulator interface to virtual devices
5. Emulator user interface (Front-end). This component should be programmed in the Win32 API
1. Debugger user interface
2. Disassembler user interface
1. MDI user interface
2. Support for loading projects
3. Syntax parser and highlighter