No description or website provided.
Clone or download
Fetching latest commit…
Cannot retrieve the latest commit at this time.
Permalink
Failed to load latest commit information.
Prepare
Products
bin
bsd/RiscOS/Sources
castle/RiscOS
cddl/RiscOS/Sources/HWSupport/ATA/SATADriver
gpl/RiscOS
mixed
.gitignore
.gitmodules
Licence_v1_1.pdf
Makefile
README.md
Start_RISC_OS.desktop
Support
Test_Boot
Test_IOMD32
Test_Wimp
run_RISC_OS

README.md

Linux port of RISC OS

This is experimental software, there is a good chance it won't work!

It is currently being discussed on the RISC OS Open website.

It should run on ARM Linux system natively, or slow on other Linux systems with the aid of a slightly modified QEMU.

The RISC OS "ROM" Image is a Linux executable.

If you run RISC OS directly then, unlike virtual machines such as RPCEmu, there is no restriction on what RISC OS programs can do to the Linux environment beyond that provided by Linux. If you use the provided scripts then RISC OS should be prevented from causing harm.

RISC OS Open Limited’s DDE is required to build RISC OS, this is proprietary software that may be brought from RISC OS Open Limited

Compiling on RISC OS

This Linux port of RISC OS can be built in similar fashion to the traditional method as documented on the RISC OS website, it is not necessary to run InstallTools as the relevant files will be accessed from the DDE without copying. However this will not build the SDL front-end which connects RISC OS to the Linux graphics system, without it RISC OS is limited to a text only interface.

Compiling on Linux

It can also be built on Linux using the Makefiles, which runs the majority of the build on RISC OS, by default using a binary of the Linux port that is automatically downloaded from github and RISC OS Open Limited’s DDE in ../DDE. Allegro (for RPCEmu), Bash, Bubblewrap, GCC, GNU Make, Libattr, Libseccomp and SDL 2 are also required by Makefiles and support code. Either Bubblewrap must be setuid root, or unprivileged user namespaces must be enabled, or insecure mode enabled.

On Debian and Ubuntu the dependencies are in the packages "bash bubblewrap gcc g++ make liballegro4-dev libattr1-dev libpixman-1-dev libseccomp-dev libsdl2-dev unzip", on Fedora the dependencies are in the packages "allegro-dev bash gcc gcc-c++ glib2-devel libattr-devel libseccomp-devel patch pixman-devel SDL2-devel unzip".

Additional packages are required for building QEMU.

The following variables are accepted by the Makefiles:

Variable
ACORN_CPP Path to AcornC.C++ diectory of DDE, default is ../DDE/AcornC.C++
TARGET What to build, such as IOMD32 for a RiscPC/A7000 ROM image. Only Linux and IOMD32 are supported by this source.
METHOD How to build, valid values are rpcemu and Linux.
JOBS Number of CPUs to use for building, if 0 or unset build sequentially.
LINUX_ROM Location of Linux RISC OS executable to use for building.
QEMU Location of qemu-arm executable.
PHASES Space separated list of build phases to run.
INSECURE Set to YES to enable insecure mode.

The following targets are provided by the Makefiles:

Target Action
build Build RISC OS (or some other thing).
check Build and test RISC OS.
fast Runs only rom_install and join phases and tests.

This following items will be download to ~/Downloads if needed:

  • RISC OS 5.22 Disc Archive
  • RISC OS 5.22 IOMD ROM Image
  • RPCEmu 0.8.15
  • QEMU 3.0.0

IXFS

File type handling

Unlike other software IXFS by default stores RISC OS file types in POSIX extended attributes, by default only writing extensions if writing a POSIX extended attribute fails. How IXFS handles file types can be configured using the special field.

Special Field Mode Name Write extension Read and strip extension Read extended attribute
R Raw Never No Yes
P Pure Remove if wrong Yes Only if no extension
Normal If needed Yes Only if no extension
W Write Always Yes Only if no extension
X Exclusive Always Yes Never

Case sensitivity

As is standard for RISC OS filing systems IXFS is case insensitive by default, if 2 filenames only differ by case it is unpredictable which file is acted upon unless the exact filename is provided to IXFS. Case sensitivity may be enabled by adding "C" to the special field.

Linux RISC OS command line options

Option Action
--abort-on-input Abort on debug terminal input
--help Display help message
--isreboot Indicate hard reset to RISC OS (not power on)
--nvram FILE Filename for nvram
--noaborts Disable aborts - RISC OS will die with SIGSEGV
--noseccomp Disable seccomp support
--notimers Disable HAL timers

Linux RISC OS error codes

Return Code Error
100 Reboot requested
101 Memory mapping failed, try running "sudo sysctl vm.mmap_min_addr=8192"
102 Unrecognised command line option
103 Unable to open NVRAM file.
104 Permission denied when attempting to open NVRAM file.
105 Read only filesystem when attempting to open NVRAM file.
106 Unable to read size of NVRAM file.
107 Unable to enlarge NVRAM file.
108 Failed to reserve address space.
109 Unable to fork
110 Parent process exited (no message)
111 Cloning ptrace thread failed
112 Failed to set alternative signal stack.
113 SWI intercept failure
114 RISC OS kernel returned to HAL
115 Interrupt test failed
116 Exec failed
117 HAL_DebugRX called and --abort-on-input given.

To do List

  • Complete the key map.
  • Fix the realtime clock.
  • Make data aborts raise errors.
  • Support writing timestamps in IXFS.
  • Support reading timestamps in IXFS to centisecond resolution.
  • Test timestamps.
  • Officially allocate names and SWI numbers etc.
  • Fix failure to truncate of unbuffered files when opened for output, and associated race condition.
  • Fix spurious calls of FSEntry_Args 6 (flush file to disc) when files are closed.
  • Perform proper error handling in IXFS.
  • Split video keyboard and mouse driver into separate module.
  • Finish video keyboard and mouse driver.
  • Fix overwriting of ROM image when rebuilding RISC OS, which will cause a crash if the overwritten ROM image is currently being run.
  • Provide a means to run Linux programs.
  • Implement PMP dynamic areas.
  • Replace the changes that are labeled "Hack"
  • Replace the branch table at the beginning of the HAL.
  • Write test cases for VFP errors.
  • Implement VFPSupport.
  • Possibly add a binary release to the ABRelase phase.