On Thu, Mar 8, 2012 at 1:20 PM, Nick Ager <nick.ager@gmail.com> wrote:
Hi Elliot,

I'm probably the least qualified of the people who have responded so far - but if at all possible I'd love to try and help.

You're welcome too.
�
If you want something to do now, the first thing to do is to produce an ARM simulator plugin, analogous to the Bochs simulator. �The first thing to do is go out and find a suitable software simulator, written in either C or C++ (cuz these suit the plugin compilation system) and play with it, configuring an ARM and running some simple assembler on it.�

In terms of ARM emulators a popular one seems to be QEMU [1] - the Android simulator uses it.

Right, but this one is unsuitable because it does dynamic translation. �Because the Squeak VM has a moving garbage collector and because, when simulating, the entire Cog heap, including generated machine-code, lives in a single ByteArray, the machine code generated by Cog, when simulating, can move. �So the interface between the processor simulator and the generated machine code and memory must be based on virtual addresses. �I'm pretty certain that a JIT like QEMU will use real addresses and so its own code generation would get confused by any movements of the Cog heap ByteArray. �Hence it is I think better to stick with a simple interpretive simulator such as the Armulator, and of course Bochs. �BTW, the ARM is so simple that the core instruction set simulator in the ARM is only 1500 lines of C++ (including whitespace). �So another approach might be to implement ARM in Smalltalk, e.g. by back-porting the Armulator code, although I expect it'll be significantly slower than optimized C++.
�



--
best,
Eliot