SimMachine Prototype - A Software Modelled Simulator
Turning one of our developers hobby into a piece of software wasn't really the plan. But perhaps, it could actually be useful!
CodeStep's SimMachine 0.2 was developed to test a virtual machine environment - but rather different to the usual ones.
This one wasn't designed to run your favourite OS - it was designed to build a software modelled environment to test hardware designs, new software designs and create a fully programmable "machine" - from scratch
The SimMachine framework allows software definitions of Motherboards, Memory Controllers, IO Ports, IO Buffers, Virtual Devices, Virtual Processors and Virtual ROM's/EEPROMs to cut down on the prototype boards, endless wires and electrical nightmares associated with testing new designs
Built using C#, it currently features:-
- Dual 8-bit CPU motherboard (can have up to 65,000 CPUs each with different architectures),
- 16 bit addressable, 8 bit Data Bus (the Motherboard can have up to 65,000 independent and different sized Buses up to 64 bit)
- Memory and ROM chips are managed via the Banked Memory Controller(s) with runtime configurable bank switches (and one per CPU)
- "SmartROM" software loader allowing binary images to be "mapped" into a virtual ROM chip to boot a test machine
- Simple test devices including an 8 bit LBA Hard Drive simulator
Security is a high priority for the target design. The virtual motherboard allows security assignment of IO Ports to CPUs (or cores) to ensure only the host Operating System is allowed access to devices. The Virtual Bus system can be bound to individual CPUs and attached to other buses programatically. Security will be extended to ensure Buses and Memory Banks / Pages can be mapped to cores and prevent the traditional security violations that occur in other designs
The current BIOS / OS is:-
- Hex & OpCode / Assembly written for a Z80 "boot CPU"
- Features an INIT, IDT and relocatable BIOS layout that copies itself from the ROM to the RAM chips before executing
- Allows the virtual Hard Drive controller to attach an RSX via a virtual ROM to boot an OS of a Binary Imaged virtual hard drive
- The OS simply proves it can communicate with hardware devices, initialize the second CPU, call the motherboard security assignments and not much else yet
Theoretically it could be used to:-
- Create any bit-sized addressing mechanism.......... a 128 or 256 bit bus might be interesting
- Could be used to test new ASIC or CPU designs with any bit size, function or capability
- Develop hardware designs within a software debuggable environment
- Allow the testing of software emulators within a software-debuggable hardware environment - no more need for oscilloscopes, short-circuits or crashes
So, not exactly a "ready-to-run" Hypervisor or commercially ready solution - but it does show that software modelling is far cleaner, simpler and easier to debug than traditional prototype boards and ICs which of course commercial manufacturers already use - but more importantly gives us a mechanism to test new coding techniques, structures, performance and designs at "bare-metal" levels
Put simply - we could build any hardware emulator for any spec - then develop the custom software - for any customer's requirements - before the hardware is even made!
Perhaps one day, this will turn into a fully fledged system platform!