QEMU

Introduction
QEMU is an open source processor emulator, of which two independent RISC OS-related projects exist.

User-mode emulation
Changes were made by the GCCSDK developers in order to let it run unmodified AIF and ELF based RISC OS binaries in its user mode emulation (Linux only). Combined with Linux's binfmt_misc kernel module such RISC OS binaries can be run as normal Linux processes.

These changes have been made in order to easily test GCCSDK produced binaries using testtools like GCC own testsuite based on DejaGnu. For this a minimal subset of the RISC OS SWI API is implemented. This SWI API can be easily further enhanced by explicit C++ code or by loading unmodified RISC OS modules (like GCCSDK's own SharedUnixLibrary module is loaded).

Source
The RISC OS specific changes to QEMU together with build and install instructions can be found in our QEMU source repository.

Developer help wanted
In case you are a developer and want to spend some time on these QEMU RISC OS related projects, this is a non-exhaustive list of ideas to get you inspired:
 * The RISC OS specific bits for QEMU's user-mode emulation can be made better:
 * SWI dispatching code could be made faster (using STL map i.s.o. vectors)
 * The QEMU build on 64-bit host is full of warnings because of 64-bit pointers being casted to 32-bit pointers in the RISC OS world and vice versa. This should be changed in something cleaner (but probably not with just a simple cast).
 * Adding more RISC OS module support like SharedCLibrary SWIs support which would allow to run the GCCSDK testqueue using the SCL stub (-mlibscl option). This can either be done by a native implementation of the SharedCLibrary SWIs or by loading a binary copy of the SharedCLibrary and made sure that this can be emulated (the latter might require other modules to be supported). This needs some investigation what the best approach is.  There is already some SharedCLibrary support code but not used at the moment.

System-mode emulation
Daniel Clarke has done much of the groundwork for emulating the Risc PC's hardware (including 26 bit ARM instructions) in QEMU's system mode, which provides a full system emulator including JIT with many hardware emulations supplied by QEMU (network, USB, CD, floppy, parallel, serial, etc). It should run on any platform and OS that will support QEMU. A lot of work was done improving ARM and MMU code and currently it still needs work fixing bugs in order to get it to boot RISC OS or ARM Linux.

The long term goal is to have a fully capable emulation of Risc PC/A7000 class hardware and for it to be merged into the master QEMU repository. So that it is available on all distributions that ship with QEMU.

This project is currently be managed by Peter Howkins and its webpage is http://www.home.marutan.net/qemu/.