1. A method of simulating a multi-processor system by running code that simulates the system (“system code”) on a host processor, in which: (a) a SPECULATE and a COMMIT instruction in the system code is used to mark an area of memory, shared across several simulated processors, and (b) the system code is translated at run time to a form required by the host processor; wherein all instructions are mapped to a native instruction set of the host using two different code dictionaries.