Use Keil ARM MDK. It supports entire range of ARM processors. Search here & you will get it...
Most of the on-chip peripherals are simulated so you can test the basic structure of your program within it.
In case of simple external devices like i2c, spi based eeproms etc. can be simulated using scripts within keil IDE.
Once you pass this stage testing on actual hardware seems more appropriate and all of the ARMs support that very well through JTAG.