QEMU: Difference between revisions
m (Moved the "Emulation of RISC OS" at the bottom again.) |
m (Made it clear that the system level emulation project is now done by Peter Howkins based on Daniel Clarke's work) |
||
Line 15: | Line 15: | ||
== System-mode emulation == |
== 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. |
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. |
|||
[http://www.home.marutan.net/qemu/ Daniel Clarke's qemu port] |
|||
This project is currently be managed by Peter Howkins and its webpage is http://www.home.marutan.net/qemu/. |
|||
== Developer help wanted == |
== Developer help wanted == |
||
Line 25: | Line 27: | ||
**SWI dispatching code could be made faster (using STL map i.s.o. vectors) |
**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 visa versa. This should be changed in something cleaner (but probably not with just a simple cast). |
**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 visa 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. |
**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: this needs coordination with Daniel Clarke but there is certainly value to have his sources in a source control system and the [[source repositories overview#QEMU|QEMU source repository]] could be candidate. If that's fine with Daniel, development could be done in a separate branch. |
|||
Discussions, questions, new development ideas or just a statement you're want to help here can be done in [http://www.riscos.info/mailman/listinfo/gcc GCCSDK mailing list]. |
|||
{{Emulation of RISC OS}} |
{{Emulation of RISC OS}} |
Revision as of 18:51, 1 April 2007
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.
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/.
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 visa 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.
Emulation of RISC OS |
Emulators: RPCEmu, QEMU, Arcem, VirtualAcorn, RedSquirrel, Arculator |