This website is currently doing service just as a repository of software that I have written, and documentation thereof. Some of it is commercial, much is available as free downloads. All of it, at present, is designed to run on RISC OS, a little known but much loved British computing platform supported by the following companies:

RISC OS and the Raspberry Pi

RISC OS has gained more attention in the popular press of late, following the creation of the Raspberry Pi single-board computer, based around a Broadcom SoC, and my initial port of RISC OS to the Pi in October 2011, whilst I was working at Broadcom. The port is now in the hands of RISC OS Open for whom I occasionally do some other development work.

My own commercial software is available through Spellings Computer Services Ltd and described below.

My commercial software

Below are those programs which I've written and decided are reliable and useful enough to release for others. Some of it has now been released for free, for the benefit of the RISC OS community, but I continue to support and update it.

Aemulor - 26-bit emulation for 32-bit RISC OS machines
Cino - the first RISC OS DVD player
Geminus - graphics enhancements for the RISC OS desktop

Aemulor - The 26-bit emulator for 32-bit RISC OS machines

Aemulor user guide

Aemulor is the software emulator that allows RISC OS applications which were written for a 26-bit ARM system to be used on more recent CPUs that provide only 32-bit addressing modes. It was originally developed for the XScale-based IYONIX pc, which uses the XScale IOP321.

By exploiting some hardware features that are new in the XScale core and not found on any earlier ARM CPU, and by careful coding to avoid unnecessary CPU load, Aemulor achieves roughly 1/3 native performance.

Since most instructions operate identically in 26- and 32-bit addressing modes, Aemulor achieves its performance by quickly ascertaining which of the application's instructions must be emulated, leaving the rest to execute natively on the XScale CPU. A number of clever tricks and some carefully-tuned code, combined with the fact that any work which the application requests of the underlying OS executes natively, allows Aemulor to achieve much greater performance than anybody ever anticipated.

IYONIX pc, A9home, Raspberry Pi users

To purchase Aemulor, or to try a time-limited demo copy, download and run this simple 'rmachine' utility to obtain your machine ID, and then visit Spellings.

BeagleBoard/PandaBoard/i.MX6 (Cortex-A8/9)

Users of these platforms can obtain a free, performance-limited copy of Aemulor Pro here, with thanks for supporting the platform and suppliers.

IGEPv5 (Cortex-A15)

Users of this platform can obtain a free, performance-limited copy of Aemulor Pro here, with thanks for supporting the RISC OS platform, its developers, manufacturers and suppliers.

NOTE: The free builds for Cortex-A8/9/15 cannot operate on builds of RISC OS that relocate the CPU vectors and kernel workspace (referred to as 'Zero Page Protection', or 'High Processor Vectors') because Aemulor must make some small, but critical, changes to the kernel in order to achieve maximum compatibility with 26-bit software.

Work is underway on a modified version of Aemulor to be released for all RISC OS platforms, but at the time of writing (July 2015), no firm commitment can be made regarding a release data.

There are some additional resources relating to Aemulor available via the following links:

Aemulor user manual

Technical articles on Aemulor and Aemulor Pro, originally written for Foundation RISC User magazine.

Technical explanation of the operation of Aemulor.
Introduction to Aemulor Pro.

Geminus - Graphics enhancement software for RISC OS

Geminus main page

Geminus brings multi-monitor support, screen rotation (for LCD panels that can be used in portrait modes), graphics acceleration and faster JPEG rendering to the IYONIX pc desktop.

Other features include the ability to transform/rotate JPEGs, which is available for all RISC OS machines, and Red/Blue colour swapping to support other graphics cards and digital outputs such as DVI (not yet supported by the NVidia driver module).

Future features planned for inclusion in Geminus are low-bpp screen modes for legacy software (currently implemented in Aemulor Pro) and possibly support for remote screens so that you can you extend your desktop over screens connected to other computers, rather than purchasing additional hardware.

Geminus was originally available through Spellings Ltd but is now available for free here.

Cino - Software DVD player for RISC OS

Cino download

Cino is an ongoing ambitious project to bring DVD support, including full playback of Video DVDs to the RISC OS platform for the first time ever.

The latest code is twice as fast as any other MPEG-2 decoder on the same hardware but still only achieves half the required performance on the IYONIX pc, ie. sustained 12.5fps playback with audio decoding too, primarily because of the high latency of memory accesses that miss the L1 cache (although the CPU isn't ideally suited to decoding video either!) and it is hoped that improvements can be attained through further careful tuning of the memory accesses, and ensuring that data is prefetched and available when needed.

Later Cortex-based SoCs as found on the BeagleBoard, PandaBoard, Raspberry Pi 2 and Freescale i.MX6 platforms should be capable of performing software decode even using just the single CPU core supported by RISC OS on those platforms.

Free Software and Other Developments

Relocatable Module Linker (Mixed-mode)

Linker for efficient mixed-mode (eg. C and ARM assembler) relocatable RAM-based RISC OS modules. This is a bespoke linker designed to work with the output from the Norcroft translators (CC and ObjAsm) and to produce a soft-loadable relocatable module that uses the minimal amount of memory and procedure entry/exit instructions, to overcome the ugliness of C-based modules that employ the SharedCLibrary. A subset of the ISO C standard library is also included, with optimisations for the ARMv5+ instruction set/pipeline architectures.

NetSurf logo

I also do some work on an open source web browser called NetSurf which is my primary browser on my RISC OS machines and provides good performance on ARM processors, with a lovely user interface. NetSurf can be obtained for your RISC OS machine, amongst other targets, for free. Whilst it currently still lacks some support for some web standards I find that it renders most of the webpages I access, and is improving all the time.

It has, in my opinion, by far the best user interface - and is certainly the most RISC OS Style Guide compliant - of any web browser that I've used.

PicoDrive port

Following Jeffrey Lee's porting of PicoDrive (a Sega MegaDrive emulator) to the RISC OS platform, I did some work to tune and improve the code, implement multitasking, full screen operation, keyboard and joystick input, audio output, ARMv4 support etc etc.... The port has a home page, but I'm also hosting it myself for anybody who wants it because that site has had problems in the past.

RPCEmu port

First screenshot of an emulated RiscPC running RISC OS 4.02 on my IYONIX pc, courtesy of a crude initial port of Tom Walker's RPCemu.

VNC server

I keep the latest alpha-quality (at best) release of my VNC server for RISC OS here. It is, as of March 2010, being updated fairly regularly and is just about usable, although you'll have to exercise some patience. It's presently very memory hungry (about 30MB), rather slow, and not yet stable. You have been warned! That said, it's more usable for me than any of the servers I've previously tried on RISC OS.


This compressed archive format is becoming increasingly popular on the Internet. There's a quick port of the command line decompression tool 7zdec here.


A simple C program to copy all the files in one directory to another but renaming the files from 'foo.blah_c', 'foo.blah.c' or 'foo.blah/c' to 'foo.c.blah' which is the RISC OS convention for arranging source directories. I wrote this because I find SparkPlug to be the most effective tool for extracting files from downloaded TAR archives but it unfortunately seems to insist upon producing files called _c and _txt, for example.

Do not expect this program to be a complete solution to the problem of importing archives from foreign systems; no such solution can exist. I hope only that this program saves some time by doing most of the tedious work for you, as it has for me.

Screenshot of volume control

Volume Control Utility

A simple BASIC program that provides a mute button and volume slider for the speaker (left) and headphone outputs (right) because I often change these settings and it's a pain doing it through the Configure system.

(Application name not registered. Tsk!)


An extremely simple but useful module that exchanges the left and right mouse buttons so that you can more naturally (in my opinion) use the mouse with your left hand. I am pretty much ambidextrous and often find it handy to be able to put the mouse to the left of the keyboard, eg. if I'm using two computers.

Additionally, there is good evidence that using your left hand is better for preventing/mitigating musculo-skeletal problems, because your arm will be closer to the midline of your body since keyboards usually have a lot of (often superfluous/rarely used) keys on the right, such as the numeric keypad. Full source, such as it is, included.


A RISC OS module that implements the optional ARMv7 SDIV and UDIV instructions for those targets that do not implement it, via software emulation akin to the way that the FPEmulator works. This should work for all 32-bit RISC OS targets. Source and test utility included.

Coders' Corner

Coding hints, tricks and techniques that may be of interest to other programmers which I've learned/discovered over the (far too many) years that I've been writing code, with a particular emphasis upon performance optimisation.

Development tools

Sherlock and Symtab library

A diagnostic tool that provides symbolic disassemblies/memory dumps/ stack backtraces based upon the symbol tables/definitions emitted by the Norcroft linker. The intention is to aid in debugging faults in released code, where it is impossible/impractical to (repeatedly) rebuild the RISC OS Relocatable Module/application code in question to investigate the failure.

Inspired by the observed difficulty/tedium of tracking down failures induced by the relocation of 'Page Zero' in the latest RISC OS ROM images, Sherlock is a RISC OS module that aims to expedite the mapping of such failures back to the corresponding C source code. In-development builds of the Sherlock module, and in time the underlying source code and independent library, are being published here.


Performance profiling code for use (currently just on XScale cores), originally written as part of the Cino project. This code use the cycle counter built into the XScale CPU to provide very precise measurement of the amount of CPU time spent in each of a set of routines. It uses a very minimal relocatable module to access the hardware, and supplies a small library of routines to be linked into your code. Full source included.


Provides logging of textual debug information to one of a variety of destinations, including system DRAM, nVIDIA video memory and dedicated memory on a proprietary podule expansion card. Also catches and logs processor exceptions and, on the XScale CPU, provides an instruction execution trace up to the point of failure, assisting in diagnosing the cause of the failure.

Full source included.


A very simple program that protects the first 1KB of address space from USR mode reads as well as writes. This is sufficient to catch many unintentional memory reads which, whilst often harmless, can cause problems when porting software to/from other platforms and may lead to errors or failure if the program uses that data later in its execution.


A simple module - currently unregistered! - that raises the processor vectors on the IYONIX pc (a hardware feature not present on earlier machines) in an effort to reduce the chance of a program error causing a fatal machine hang by taking out the SWI and/or IRQ handlers.

This code should be regarded as experimental and I don't have it running all the time myself, at the moment. I'd suggest trying it only if you have a reproducible machine hang and need some way to debug it. Also note that it was written for the IYONIX pc (ARMv5) and is unlikely to work on later-architecture machines. Source code is included in the archive.


A short BASIC program that alters the protection of five pages of memory in the system workspace (from address 0 to &7FFF). This can be useful for catching software errors, or alternatively for allowing older, buggy/mischievous software to run on later OS versions.

Legacy software

This page provides an archive of some very old software written years ago, and is for all practical purposes 'abandonware.' There is no intent either to improve or to support it, and it is presented here purely for historical interest or curiosity. My coding style and experience has changed a lot over the intervening years as I have, I hope, learned a thing or two.

Experimental work

3D Graphics Engine

A from-scratch (including derivation of the required mathematics) implementation of a 3D graphics engine, mainly geared towards architectural/model applications rather than games, implemented entirely in fixed-point arithmetic (FP maths not being a strong point of older ARM-based machines). This is mostly an exercise in self-tuition at the moment, but a screenshot of the software running on the IYONIX pc and rendering an incomplete model of an house may be found by following this link.

Filtered image scaling

With the intention of improving NetSurf's rendering of resized images, I'm writing some filtered image scaling routines which I hope will be sufficiently useful that they can be used by other applications and perhaps also find a home in Geminus for transparently improving the image quality of a number of existing applications without the need to change them. Read more....

Debugger project

To learn about my ongoing efforts to bring a reliable, advanced debugger to the RISC OS platform, see here.


Pulse2 (The Iyonix Killer!) It seems that this small program is particularly good at freezing Iyonixes; what happens is that, if audio is playing in the background, the audio will cease and some time later the CPU itself will freeze, often upon the next disk access.

If you find that this program doesn't cause a freeze on your machine and you have a HiNT bridge chip, or if it does and you have an Intel 21154 bridge, I'd like to know please.

This problem is resolved by the PCI bus modification issued by Castle Technology Ltd

Copyright © Adrian Lees 2003-2017