"M" Genesis.
Current Table of Contents:
M is a MIPS-III system emulator, written purely in AMD64 assembly to make optimal use of commonplace iron. As discussed previously.
M will run lightly-modified Linux kernels with strict logical isolation vs. the host (and vs. any other instances of itself.) That is, it in fact does exactly what e.g. QEMU fraudulently pretends to do.
To keep things simple, dynamic recompilation a la Bellard's is NOT USED! This is a deliberate design choice.
M aims to fit-in-head. As such, a reasonably complete description of the emulated machine architecture is included in the program comments.
M has no dependencies other than AMD64 (host) Linux with reasonably-recent ABI (i.e. anything with 2.6+ kernel ought to work.) No libraries are used, and libc in any form whatsoever is also not used.
Currently the emulated system's RAM is fixed to 1 GB. To run this draft of M, you must have at least this amount of available memory on the host iron.
Note: in the genesis draft of M, the only means to exit (other than 'kill -9') is to shut down the guest OS (In the demo kernel's 'busybox' -- the 'poweroff' command.)
Devices Currently Emulated (see 'devices' dir) : MIPS Timer, 100Hz Timer, UART Console, Realtime Clock, Power Switch.
Please note that this is a draft, and as such is not recommended for battlefield use. Though it is difficult to think of a scenario where an emulator without disk or network functionality could be inadvertently put to a serious use...
You will need:
- A Keccak-based VTron (for this and all subsequent patches.)
- m_genesis.kv.vpatch
- m_genesis.kv.vpatch.asciilifeform.sig
- errata_slaveirq.kv.vpatch
- errata_slaveirq.kv.vpatch.asciilifeform.sig
(OPTIONAL DEMO) linux-3-16-70-bigendian.bin.gz- (OPTIONAL DEMO) linux-3-16-70-bigendian-100hz.bin.gz
Add the above vpatch and seal to your V-set, and press to m_genesis.kv.vpatch errata_slaveirq.kv.vpatch.
Follow the directions in m.asm to build. You should end up with a 13240-byte 64-bit ELF executable. If using the demo kernel, do not forget to unpack it first. The 100Hz timer is not yet supported by this kernel, therefore the real-time clock will run "fast".
A set of patches necessary to build kernels suitable for use with M will be published in the near future (it is pending on that magic moment when we genesis a kernel.)
An approximate timeline for the growth of this program "to adulthood" will be posted in the near future.
Edit: Preliminary Benchmarks.
The linux-3-16-70-bigendian-100hz.bin.gz demo kernel includes "dhrystone" program.
Edit: Several optimizations have been implemented.
Edit: A version using AMD's SIMD instructions in the TLB routines.
~To be continued!~