According to a message to the Inferno mailing list, an early port of Inferno to ARM once existed but was not made generally available. The target was the Acorn A7000 with an ARM 7500 CPU. Note: The port was included in the first edition source code, which was available in an archive, but is now more easily accessible in the inferno-1e1 repository.
With this in mind, a newly-written, proof of concept port of Inferno to the Acorn A7000+ can be found in the
a7000+ branch of this repository. It supports the framebuffer and keyboard input, as well as mouse input to a lesser extent. It has been tested under the RPCEmu emulator.
Although the original ARM port ran natively, and did not require RISC OS to boot, this port is designed to be started from RISC OS. This is mostly for convenience, so that people can easily try it if they want to.
Building the sources
Clone the repository and check out the
a7000+ branch, then enter the repository:
git clone -b a7000+ https://gitlab.com/dboddie/inferno-os.git a7000 cd a7000
mkconfig file so that the
OBJTYPE variables match your build machine's configuration.
If this completes successfully, set the
PATH environment variable to include the appropriate
bin directory for the build machine; an x86_64 machine running Linux in this case:
Create a missing directory and build a hosted Inferno for the build machine:
mkdir Inferno/arm/lib mk install
If this builds without errors, you can now build the A7000+ port.
Building the port
os/a7000 directory and build the port:
cd os/a7000 mk
This builds the kernel and a set of resources that are included as a built-in root file system. You should find the
ia7000p file has been generated at the end of the build process.
Installing the port
Installations of RPCEmu tend to have a
hostfs directory that provides access to files on the host system. Create a directory called
!Inferno in the
!Inferno directory, create a file called
!Run,feb and write the following text to it:
Wimpslot -min 24576K 24576K Run <Obey$Dir>.!RunImage
ia7000p file into the
!Inferno directory and rename it to
!RunImage,ff8 so that it appears as an Absolute file to the RPCEmu emulator.
Run RPCEmu as normal. Using the latest version on Linux, this typically means running the
Configure the emulator to emulate the A7000+ by opening the configuration dialog via the Settings menu.
In the desktop, set the screen mode to 32000 colours at 800x600 pixels resolution and open the HostFS filer window.
You can check the contents of the !Inferno application by holding down the Shift key and double clicking its icon. The !Run and !RunImage files should have the icons shown.
Double click the !Inferno application icon without holding Shift to run the application. The screen should clear and the system should boot to a console.
Check that the keyboard works by running some common tools.
Notes and limitations
The port uses the memory map already set up by RISC OS. This limits the amount of memory available to about 26MB. In practice this is probably not a problem since I have encountered problems with larger memory areas in other ARM ports (Raspberry Pi, Efika MX Smartbook) that may be due to limitations with Dis.
The framebuffer is fixed to 800x600 at 16-bit colour and the assigned screen RAM needs to be enough for this when booting Inferno. This is why the screen mode needs to be set appropriately in RISC OS.
There is no support for storage devices, such as hard disks. As a result, all the tools and resources needed are built into the root filing system. Some support for the window manager is included, but this causes the kernel image to grow quite large.
There is no way to reboot, shutdown or return to the RISC OS environment. There should also be a warning shown before starting Inferno that warns the user about this.
Mouse support is incomplete. RPCEmu needs to have host mouse support disabled for Inferno to be able to access the emulated hardware. Untick the Settings→Mouse→Follow Host Mouse menu option. The way the cursor is drawn requires more thought than I was prepared to give it. For some reason, the locations of the cursor and its hotspot diverge over time, making the Inferno window manager environment unusable.
Try running the following at the console to see the window manager in action:
You will need to reboot the emulator after this.