Skip to content

Latest commit

 

History

History
625 lines (554 loc) · 39.5 KB

File metadata and controls

625 lines (554 loc) · 39.5 KB

Current status of RISC OS 64 development

Summary

The tables within this document indicate the status of each component.

  • Lang indicates the RISC OS Classic implementation
  • Filetype indicates the filetype (for disc based components)
  • C-State indicates whether there is a port to C (for Asm components), or - if the source is already in C.
  • 64-state indicates how functional the component is in 64-bit.

There are footnotes beside the component state notes which indicate how far the development has progressed, limitations, or changes in the implementation of the component.

For a phase-focused view of the status, see the Progress page.

Terminology

Details of the terminology can be found in the Terminology document.

RISC OS components

ROM modules

Name Lang C-state 64-state
Kernel:SystemInit Asm
Kernel:Introspection Asm Stub Stub
Kernel:Vectors Asm
Kernel:Modules Asm
Kernel:SWIs Asm
Kernel:Mode Asm
Kernel:Sprites Asm
Kernel:OSByte Asm
Kernel:OSWord Asm
Kernel:DAs Asm
Kernel:Modules Asm Stub Stub
Kernel:Vectors Asm
Kernel:Heap Asm
Kernel:VDU Asm
Kernel:MemManagement Asm
Kernel:DAs Asm
Kernel:VDU Asm
Kernel:Graphics Asm
Kernel:Sprites Asm
Kernel:Exceptions Asm
Kernel:ProgEnv Asm
Kernel:Time Asm
Kernel:Input Asm
Kernel:Mode Asm
Kernel:IRQs Asm
Kernel:Timers Asm
UtilityModule Asm
IRQ Asm
TimerManager Asm
Podule Asm
IIC Asm Stub Stub
NVRAMHW Asm
Conversions Asm Complete Complete
OSSWIs Asm Stub Stub
EvaluateExpression Asm Stub Stub
SystemVars Asm Automated Automated
FileTypes Asm Complete Complete
FPEmulator Asm
SharedCLibrary C -
UnSqueezeAIF Asm
AppPatcher Asm
DiagnosticDump C -
CFrontDemangler C -
ReadLine Asm Functional Internals1
CLIV Asm
VideoTTX C - Built
VideoSW Asm
VideoHWVIDC Asm
VideoHWVF Asm
VideoGuard C Built Built
OSCommands Asm Stub Stub
FSCommands Asm
ModuleCommands Asm Functional2 Functional2
ARM Asm Stub Stub3
BufferManager Asm Stub Stub4
Debugger Asm Functional5 Functional5
RTC Asm Functional Internals1
DMAManager Asm
RTCAdjust Asm
RTCHW Asm
OSPointer Asm
Hourglass Asm Functional6 Functional6
Portable Asm Prototype Prototype
FileSwitch Asm
Squash Asm/C
ResourceFS Asm Internals Internals
ResourceFiler Asm
Messages Asm
MessageTrans Asm Functional7 Functional7
FSLock Asm
TerritoryManager Asm
UK Asm
International Asm
SerialDeviceDriver Asm
SerialDeviceSupport Asm
Mouse Asm
SerialMouse Asm
PS2Driver Asm
InternationalKeyboard Asm
KeyInput C - Built
FileCore Asm
ADFS Asm
ADFSFiler Asm
RamFS Asm
RAMFSFiler Asm
CDFS Asm
CDFSFiler C -
DOSFS C -
SystemDevices Asm
PipeFS Asm
AIF Asm
TransientUtility Asm
BASIC Asm Stub8
BASIC64 Asm
BASICTrans Asm
Obey Asm Complete9
DDEUtils Asm
PathUtils C - Functional
SysLog C -
BootCommands C - Functional10
GameModes Asm
ScreenModes Asm
ScreenBlanker Asm Investigate
ScrSaver C -
SoundDMA Asm
SoundChannels Asm
WaveSynth Asm
StringLib Asm
Percussion Asm
SoundScheduler Asm
SharedSound Asm
SystemBell Asm Functional Functional
DeviceFS Asm
ParallelDeviceDriver Asm
ColourTrans Asm
Draw Asm
SpriteExtend Asm/C
ColourMap C -
BlendTable C - Built
InverseTable Asm
DrawFile C - Built11
FontMap C -
ZLib C - Built
PNG C -
ROMFonts Asm
FontManager Asm Investigate Investigate
SuperSample Asm
ImageFileConvert C -
CompressJPEG C -
ConvertPNG C -
ConvertBMP C - Built
ConvertDoom C - Built
ConvertGIF C - Built
ConvertICO C - Built
ConvertPCX C - Built
ConvertPNM C - Built
ConvertSprite C -
ConvertSun C - Built
ConvertXBM C - Built
ConvertClear Asm
ImageFileRender C - Functional
ImageFileRender_Artworks C -
Zipper C -
PrinterBuffer Asm Functional Functional
PDriver Asm
PDriverDP Asm
PDumperSupport Asm
PDumper24 Asm
PDumperCX Asm
PDumperDM Asm
PDumperE2 Asm
PDumperIW Asm
PDumperLJ Asm
PDriverPS Asm
MakePSFont Asm
RemotePrinterSupport C - Built
RemotePrinterMessages Asm
WindowManager Asm/C
Wimp:CommandWindow Asm
Wimp:ErrorBox Asm
Wimp:Fonts Asm
Wimp:IconBorders Asm/C
Wimp:IconRender Asm
Wimp:Interaction Asm
Wimp:Introspection Asm
Wimp:Memory Asm
Wimp:Menus Asm
Wimp:Messages Asm
Wimp:Pointer Asm
Wimp:Polling Asm
Wimp:SWIs Asm
Wimp:SpritePools Asm
Wimp:SpriteRender Asm
Wimp:Startup Asm
Wimp:TaskManagement Asm
Wimp:Templates Asm Functional Functional
Wimp:TextRender Asm Functional Functional
Wimp:Tiling Asm/C
Wimp:WindowManagement Asm
Wimp:WindowRender Asm/C
Wimp:WindowStacking Asm
FilterManager Asm
RedrawManager Asm
Desktop Asm
IconBorderBeveled C - Built
IconBorderFob C - Built
IconBorderCrossy C - Built
IconBorderLoop C - Built
IconBorderPlainPopping C - Built
IconBorderPlain C - Built
IconBorderRound C -
TaskManager Asm
ShellCLI Asm
DisplayManager Asm
DragASprite Asm
DragAnObject Asm
Filer Asm/C
FilerSWIs Asm
Filer_Action C -
Free Asm Investigate Investigate
Pinboard Asm
ClipboardHolder C -
WindowScroll C -
ColourPicker C -
TaskWindow Asm
NetI Asm
NetFS Asm
NetStatus Asm
NetFiler Asm
NetPrint Asm
MbufManager Asm
Internet C -
InetServices C -
Resolver C -
MimeMap C Built Built
InternetTime C -
InetConfigure C -
DHCPClient C -
ZeroConf C -
RouterDiscovery C -
Freeway C -
FreewayHosts C -
ShareFS C -
LanManFS C -
Toolbox C -
Window C -
Menu C -
Iconbar C -
ColourDbox C -
ColourMenu C -
DCS C -
FileInfo C -
FontDbox C -
FontMenu C -
PrintDbox C -
ProgInfo C -
SaveAs C -
Scale C -
GDivider C -
ToolAction C -
TextGadgets C -
ImageFileGadget C -
CDFSResources Asm
CDFSdriver Asm
CDFSSoftATAPI Asm
CDFSSoftChinonEESOX Asm
CDFSSoftHitachiEESOX Asm
CDFSSoftPhilipsEESOX Asm
CDFSSoftSonyEESOX Asm
CDFSSoftToshibaEESOX Asm
LegacyBBC Asm
LegacyScreen Asm
BBCEconet Asm
SpriteUtils Asm Stub12 Stub12
OwnerBanner Asm Functional13 Functional13
IRQUtils Asm
WindowUtils Asm
CallASWI Asm
BootNet Asm
AUNMsgs Asm
!Alarm BASIC
LibraryHelp C - Functional
ErrorLog C - Built

New ROM modules

Name C-state 64-state
SystemVarsDefaults Functional Functional

System modules

Name Lang C-state 64-state
RateTracker C - Built

(to be updated)

Additional modules

Name Lang C-state 64-state
IconBorderBeveled C - Built
IconBorderCrossy C - Built
IconBorderFob C - Built
IconBorderPlain C - Built
IconBorderPlainPopping C - Built
IconBorderSkins C - Built

ROM resources

Name Filetype Lang C-state 64-state
BootMenu Absolute C - Functional1415
Repeat Absolute C -

Library files

Name Filetype Lang C-state 64-state
ForHooks Absolute C - Built
ImgConvert Absolute C - Built
MiniJTran Absolute C - Built
AddApp Utility Asm
AppSize Utility Asm
CDReinit Utility Asm
ClrMonitor Absolute C - Built
Do Utility Asm
FontChange BASIC Script
ForHooks Absolute C - Built
HOff BASIC Script
HOn BASIC Script - Built
IfThere Utility Asm
LoadCMOS Absolute C - 16
MD5Hash Absolute C - Built
MiniGZip Absolute C - 17
MiniGrep Absolute C - Built
MiniUnzip Absolute C - Built
MiniZip Absolute C - Built
Repeat Absolute C - 18
SafeLogon Absolute C - Built
ScanLibs BASIC Script - Built
SysPaths Absolute C - 16
X Utility Asm

Boot utilities

Name Filetype Lang C-state 64-state
AddToRMA Utility Asm
BandLimit Absolute C - Built
BootLog Module C - Built
BootRun Obey Script
BootVars Absolute C - 16
CheckMouse Absolute C - Built
DeskCheck BASIC Script
DeskRun Obey Script
Desktop Desktop Script
ErrorLog Module C - Built
FileCoreCheck Absolute C - 18
FreePool Utility Asm
HWScan Absolute C - Built
LibraryHelp Module C - Functional
MemFix Module Asm
AppPatcher Module C -
SetChoices Obey Script
ShrinkRMA Utility Asm
Softload Absolute C -
UnplugTbox BASIC Script -
VProtect Module Binary

Libraries

Libraries have a slightly different lifecycle, as they don't produce a tool or module themselves which is usable, but are used by others. As such, the Built state indicates that the library has been exported and is available for use - but that it hasn't been validated that it works properly.

Name Lang C-state 64-state
C library C/Asm - Functional19
OSLib DSL/Asm Complete20
Base64 C - Built
ANTMemLib C -
AOFLink C - 21
Asm Asm
AsmDebug Asm
Base64 C - Built
CLX C - Built
Configure C - 22
DES C - Built
Desk C -
DeskLib C -
FindResolver C - 14
Fortify C - Built
GResolve C - 14
GetOpt C - Built
IFCLib C - Built
INIRead C - Built
Interact C - Built
Interfaces C - 14
JBacktrace C - 23
JavaScript C -
LongLong C -
MD5 C - Built
MemCheck C - 23
MiniDump C -
ModMalloc C -
ModuleTask Asm
ModuleWrap Asm
PBTS C -
PlainArgv C -
PNG C -
RISC_OSLibSA C - Built
ROLib C - Built
RegExp C - Built
Resolver C - 14
SCLStubsG C - 23
SHA1 C - Built
SQLite C -
Support C - Built24
TCPIPLibs C -
TGRlib C -
TIFF C -
TaskWindow C - 22
Throwback C - Built
URLFetch C - Built
WebImage:WebImage C - Built
WebImage:XBM C - Built
WebImage:GIF C - Built
WimpKeyName C - Built
Zipper C - Built
ZLib C -
mDNSCore C - Built

Tools

The tools for developing 64-bit components need to be created. The table below shows information about various tools and their support:

  • Tool: Describes the intent of the tool.
  • Name: The particular variant of the tool described.
  • Lang: The implementation language (if relevant).
  • C-state: The status of the RISC OS implementation for 32bit.
  • 64-state: The status of the RISC OS implementation for 64bit.
  • Linux: The status of a Linux version of the tool.
  • Mac: The status of the Mac version of the tool.
  • Windows: The status of the Windows version of the tool.

Primary toolchain

Tool Name Lang C-state 64-state Linux Mac Windows
C Compiler cc (Norcroft) C - N/A25 N/A N/A N/A
C Compiler gcc (GCC) C N/A26 Functional27 Via Docker Via WSL?
C Compiler tcc (as compiler) C Functional28 No Functional28
C++ Compiler c++ (Norcroft) C - N/A2529 N/A N/A N/A
Assembler objasm (Norcroft) C - N/A25 N/A N/A N/A
Assembler gas (GCC) C N/A30 Functional31 Via Docker Via WSL?
Linker link (Norcroft) C - N/A25 N/A N/A N/A
Linker ld (BinUtils) C N/A32 Functional33 Via Docker Via WSL?
Linker tcc (as linker) C Built28 No Built28
Lib maker libfile (Norcroft) C - N/A25 N/A N/A N/A
Lib maker makealf C - N/A34 N/A N/A N/A
Lib maker ar (BinUtils) C N/A35 Functional36 Via Docker Via WSL?
Module header cmhg (Norcroft) C - N/A2537 N/A N/A N/A
Module header cmunge C - Functional38 Functional Functional N/A
Make tool amu (Norcroft) C - N/A25 N/A N/A N/A
Make tool make (GNU) C N/A39 Functional39 Functional39 Via WSL?
AOF-to-C aoftoc (Norcroft) C - N/A25 N/A N/A N/A
Bin-to-AOF binaof (Norcroft) C - N/A25 N/A N/A N/A
Decode AOF decaof (Norcroft) C - N/A25 N/A N/A N/A
Code compress squeeze (Norcroft) C - N/A2540 N/A N/A N/A
Code compress modsqz (Norcroft) C - N/A2541 N/A N/A N/A

Additional tools

Tool Name Lang C-state 64-state Linux Mac Windows
Perl perl (5.001) C - Functional42
Fortran GNU Fortran C - Functional43
Pascal P2C (Gillespie) C - Functional44 Functional44
Rust Rust C - Prototype45
Detokeniser basicdetokenise C -
Tokeniser basictokenise Perl Functional Functional
Parser gen bison C - Built46
OSLib gen defmod C - N/A47
OSLib gen oslib parser Python Functional47 Works47
Lex analyser flex C - Built48
Header maker hdrtoh Perl
Cat file kitten C - Functional49
Mod decoder modservices C - Functional50
Stream edit sed C - Built51
Version Trans vtranslate C - Functional52
Binary includes binaof C - N/A2553 N/A N/A N/A
Resource mods modgen C - Functional54 N/A N/A N/A
Resource includes resgen C - N/A2555 N/A N/A N/A

See also Languages

The Docker build environment provides the build tooling for 32bit and 64bit systems. The environment is functional as a tooling environment for building applications, utilities and modules. It currently uses GCC 12 (crosstool-NG-1.26.0).

Norcroft tools

This section lists the build system components from the regular Norcroft toolchain used on RISC OS, and how they have been addressed with the 64-bit world.

  • amu - make tool

    Makefile tools can use the standard GNU make. Or RISC OS AMU if necessary.

  • cc - C compiler

    Norcroft is not necessary; GNU gcc will work fine. CLI transform can be used to manipulate the command line to handle RISC OS style filenames.

  • objasm - Assembler

    Norcroft is not necessary; GNU as will work fine. However, as has ugly syntax, so a wrapper can be provided which transforms objasm syntax into as assembler.

  • link - Linker

    Norcroft is not necessary; GNU ld will work fine, with a suitable linker script. Function signatures can be added with post-processing. Run time relocation can be added as necessary.

  • cmhg - Module header generator

    Norcroft is not necessary; CMunge can be used, with suitable modifications.

    Outstanding issues: Not all interfaces implemented yet.

  • squeeze/modsqz - binary compressor

    Not required, as disk space is cheap, and transmission time is low.

Services

  • RISC OS Pyromaniac demo shell - example RISC OS environment.

    Available in 32bit and 64bit variants, with example applications present.

  • RISC OS Build service - API for building RISC OS applications.

    Can run RISC OS Pyromaniac in 32-bit and 64-bit environments, allowing testing of built RISC OS 64-bit utilities, absolutes and modules.

Footnotes

  1. Vector claims are not supported yet in RISC OS Pyromaniac or CMunge. 2

  2. CMunge does not support help code yet. 2

  3. Stub created which has a dummy *Command and that's it.

  4. Buffer vectors InsV, RemV, CnPV have very poor interfaces, which should not be propagated into RISC OS 64.

  5. Debugger Functional in 32bit and 64bit, and decodes ARM, Thumb and AArch64. 2

  6. Hourglass still has assembler code, but this has been ported to AArch64 (within a Python generation process). 2

  7. Missing dictionary calls. 2

  8. Being worked on by Steve Revill.

  9. Completed by Julie Stamp.

  10. BootCommands works, but its implementation isn't sane for the AppSize command at all - it manipulates the RMA, not the application slot size.

  11. Built but doesn't work as the structures are not the right sizes in memory. Also doesn't have any colour mapping or IFC support.

  12. Does not support the vector handling yet. 2

  13. Only the text part of the banner is currently implemented. 2

  14. Network libraries are not currently implemented, so no networking is available. 2 3 4 5

  15. The support library doesn't currently build for 64-bit. 2 3

  16. Requires ZLib library.

  17. The system() call is not currently implemented for 64-bit. 2

  18. C library has been reimplemented, using open source and custom components.

  19. OSLib for RISC OS 64 is now complete.

  20. Requires Toolbox libraries. 2

  21. Isn't relevant for AArch64? 2 3

  22. Support library is mostly built with a few internal libs missing.

  23. The Norcroft toolchain only builds 32-bit binaries, so it is not useful to port this to RISC OS 64. As other compilers exist for AArch64 code, it is more sensible to use them instead of updating the aging Norcroft toolchain. 2 3 4 5 6 7 8 9 10 11 12 13 14

  24. GCC has not been ported to RISC OS 64.

  25. The riscos64-cc tool has been created as a wrapper around gcc which sets up the necessary environment for building RISC OS 64 binaries.

  26. TCC has been ported to RISC OS 64 and demonstrated to create objects that are linkable. It can be compiled for macOS and will create code suitable for use on RISC OS 64. 2 3 4

  27. CFront hasn't even been attempted, as it is ancient and doesn't really support modern C++. It also doesn't built itself with C++ compilers.

  28. GAS has not been ported to RISC OS 64. GAS has an ugly syntax, but can be used to build AArch64 binaries on other platforms.

  29. The riscos64-objasm tool has been created as a wrapper around objasm2gas and as which translates sources in objasm format to those that can be used by as, as ObjAsm is a much more familiar format for RISC OS users.

  30. ld has not been ported to RISC OS 64.

  31. MakeALF only operates on ALF files so has not been ported to RISC OS 64.

  32. ar has not been ported to RISC OS 64.

  33. The riscos64-libfile tool has been created as a wrapper around ar, which has libfile syntax to create libraries for RISC OS 64 (as a syntactic sugar).

  34. CMHG constructs the module header from binary code fragments, which would need to have significant changes to make it work with AArch64. CMunge is a better solution as it creates assembler files which can be examined and modified easily.

  35. CMunge has been updated to generate AArch64 module headers. Not all the interfaces are complete; in particular vector handlers cannot claim the vector as yet.

  36. GNU make has not been ported to RISC OS 64. It can be used to orchestrate the building of AArch64 binaries for use with RISC OS 64 on other platforms, as a native tool. 2 3

  37. Code compression is redundant these days as disc is cheap and fast.

  38. Code compression is redundant these days as disc is cheap and fast.

  39. Perl in RISC OS 64 is functional, but cannot invoke commands due to the lack of system in the C library.

  40. GNU Fortran has not been ported to RISC OS 64. The Linux version can be used to build Fortran binaries to run on RISC OS 64.

  41. P2C can be used to convert Pascal to C, which is then compiled by either the Norcroft or GNU compiler to create runnable code. Module code has been made work in the past but has not been tested. 2

  42. Prototype code has been built into a RISC OS AIF file from within Rust, and run on RISC OS 64.

  43. Bison has been built but not tested in its built form.

  44. Defmod relies on AArch32 output, so is not useful for AArch64. 2 3

  45. Flex has been built but not tested in its built form.

  46. A small version of cat.

  47. Lists services used by modules. For AArch64 this is only dispatched through a table, so is trivial to decode.

  48. SEd has been built but not tested in its built form.

  49. Version number translator has been built and works.

  50. BinAOF creates AOF files directly, so isn't useful for non-32bit systems. Similar tools like bin2c might be a suitable alternative in the future.

  51. ModGen creates a module which just contains resources (like the Messages module).

  52. ResGen builds resource contents that we can register, but as an AOF file. It would be handy to replace this with a tool that created ELF as well.