This is SWARM - SoftWare ARM. The initial stage in this process is implement a plain software model of the basic ARM. There are, of course, already software models of the ARM available, so why do another one? Well, this one will need to allow the instruction set to be modified at run time, and provide not just an execution environment, but also a way of monitoring things like cache hits. To this end a hierarchical model of an ARM CPU has been implemented in C++. It currently supports: + Arm 6 based core. Currently able to handle data processing instructions, word/byte load and stores, load/store multiple, branches, 32 bit multiplication, and SWIs. + Support for plugging in different caches - be they unified or separate I & D caches. Currently only a direct mapped cache is implemented. + Compile for SWARM using ARM targeted gcc.