Date: Tue, 03 JUN 1997 15:07:52 +0100 (BST) Subject: RISC OS Proposals Enclosed is a 2nd draft document containing suggestions of future work that could be done on RISC OS, either for 3.8 or for later versions. This draft contains suggestions by XXXX, XXXX, XXXX and myself. If anyone has any suggestions or comments, please let me know. Further discussions on prioritisation and resourcing can then be held and formal proposals submitted. Note that many of these ideas were suggested before Galileo surfaced; some (eg radical filing system work) may want to be deferred to Galileo; ideally Galileo should contain at least all the improvements suggested here for RISC OS, even if they are never fitted to RISC OS. XXXX ===== Proposals for RISC OS work The proposals in this document cover several parts of RISC OS, ranging from the kernel to new Toolbox gadgets. The aim is to work on parts of the system that have obvious potential improvements, adopt work that has been done for the Network Computer, and try to relieve the impression that work on RISC OS has ceased. 1) Kernel and low-level 2) Wimp and user-interface 3) Items deferred from Jaguar/Panther 4) Internationalisation 5) Filing systems 6) Printing Much of this work has already been coded, either experimentally or by ANC, so can be adopted cheaply. The following symbols are used to indicate the state of work on each item *) Is being done by ANC @) Has been done by ART %) Work is in progress 1) Kernel and low-level work ============================ a) Allow interrupts to go off in 32-bit modes. (@) b) Change the FPEmulator to operate in native 32-bit mode. It currently has a veneer to switch from UND32 to SVC26, producing a 10%+ speed hit. This relies on 1a. (@) This change will allow FP in Supervisor mode (helping item 6a below). c) Migrate more of system to 32-bit capable. New code should be 32-bit ASAP. (Making the kernel 32-bit aware will automatically make it Thumb aware also). d) Change the FPEmulator to use 64-bit multiplies on processors that are capable of it. This can produce a 5-10% speed improvement. (@, but some method of run-time processor detection will need to be added). e) Move the IRQ stack to a cacheable area of memory. f) Consider screen cacheability tricks to speed up window movement etc on StrongARM (moving a window in a 32bpp mode is noticably less smooth on a StrongARM than on an ARM710) g) Teach OS_AMBControl about Wimp_ClaimFreeMemory to reduce Wimp hackiness. h) Fix cacheability bug with non-cacheable dynamic areas. i) Tidy up OS_SetMemMapEntries, so flags can actually be set. Currently flags are forcefully cleared; rather than being unaltered. j) Add "squishable" dynamic areas (*) k) ARM7500FE support and correct (and internationalised) reporting of processor type on start-up. l) Extension to OS_PlatformFeatures 0 to indicate availability of various parts of the instruction set (eg MULL and LDRSB). m) Look at aligning modules to 32-byte boundaries to ease performance tuning for today's large-cache processors. n) Improve IRQ prioritisation. Allow defered IRQ handling for non- critical IRQs (eg callback after interrupt (CBAI)) o) Teach kernel about large pages to reduce TLB thrashage; at the least section map the screen - this improves full screen Replay performance phenomenally. p) Tackle and fix IRQ problems provokes by 16 bit sound. q) XXXX: Fix some of the 1000 bugs which our customers have been complaining about for 10 years now. 2) Wimp and user interface ========================== a) Fix numerous long-running Wimp bugs: (@) i) Get scroll bars positioned correctly at the end of large documents. ii) Stop multiple R5/R6 buttons being selected by holding SELECT down on one button and clicking ADJUST on others. iii) Stop R5/R6 buttons flickering when MENU is pressed on them. iv) Tidy up error box (align buttons properly). v) Make sure custom error buttons aren't lost if the Wimp brings up a "Application may have gone wrong" box. vi) Restore missing application sprite in "Application may have gone wrong" box. vii) Make sure 3D borders are drawn correctly if not screen pixel aligned, and make them solid in EX0/EY0 modes. viii) Stop flickering of solid toolsprites by not bothering to fill the toolsprite background if the toolsprite doesn't have a mask. ix) Get Shift-toggle size to work properly. x) Make sure toolsprites always press in (currently, running Alarm in HH:MM:SS mode is sufficient to almost totally stop toolsprites pressing in) xi) In various places throughout the Wimp (eg panic redrawing and single-tasking applications) the background is hard-coded as colour 15 (ie light blue). This is a throwback to Arthur when the background was _logical_ colour 15 (ie usually grey). Change it to colour 4 (ie mid grey). This will prevent blue flashes when panic redrawing. xii) Window updates initiated by a caret movement are far too tall (the flags aren't stripped of the height). xiii) Fix reversed menus (submenu off of left submenu arrow now appears in correct place) xiv) Correct *ToolSprites help and syntax xv) Fix Wimp_TransferBlock to/from dynamic areas above 2 gigabytes. b) Various minor Wimp improvements: i) Regulate icon bar scrolling (independent of processor speed or load) (@) ii) Accelerating icon bar scrolls (@) iii) Change default R5 slab colour to 3 to match the Style Guide (@) iv) Make close button light up when clicked v) Add a new PostGetRectangle filter to ease redraw in windows. (@) vi) Allow Mac-style drag+release menu selections. vii) Get highlighted title bar (and other tools) from ToolSprites - don't just rely on the cream filling. c) Add cut+paste and drag+drop to the Wimp's writable icons. Part of the work will be in a new Clipboard module which will provide general services to make simple clipboard operations easier. (%) Note, if this is done, Edit and Draw should support it as well. d) Allow nested windows (*), and provide higher-level support via ResEd and the Toolbox. e) Simplify the task manager by merging "System workspace", "Cursor/ System/Sound" and "System heap/stack" into a single "System workspace" slot. Make sure the "System memory" section adds up. Tidy the menu as suggested by Libra. f) Improve performance with many dynamic areas. Allow them to be grouped in Task Manager display, and allow them to be linked to a task so the Wimp can clear up after a task dies. g) Add ANC's multi-line text gadget. h) Improve iconisation of windows. Get icons tidied in to the corner of the screen and add an "iconise" button to windows. i) Implement sticky submenu dialogue boxes. j) Make the Pinboard a file store as well as an alias store (like the Mac) k) Alt-Select renaming of files in Filer (like in ResEd) l) New look m) Better set of beeps n) Examine XXXX's "TaskFS" concept; look at Window 95's "My computer" window. o) Add Unicode and kanji support to the Font Manager. p) General template tidy up - most templates are a complete mess. Make Alarm use outline fonts. q) XXXX: Add PC Exchange type facility/integrate ChangeFSI type functionality into OS to allow processing/translation of more foreign file types. In particular MS-Word, Acrobat, PNG, AVI, MOV, DXF. r) Support for Truetype/Bitstream/whatever fonts. s) Fix Filer problem with not sorting direcories >256 files. t) Extend task windows to a "terminal" onto full screen RISC OS applications (à la Windows). (It will make it possible for inexperienced developers to produce "multi-tasking" "desktop" software). 3) Items deferred from Jaguar ============================= a) Implement the Code filetype. b) Remove the Stork pointer code (or at least stop its nasty pointer transitions) 4) Internationalisation ======================= a) Get German translations into the source tree to ease maintenance. At present, each new version of RISC OS involves a lot of work to sort out internationalisation. Maintain a log of all message changes. b) Find a solution to the problem with MessageTrans' global error buffers (used by MessageTrans_ErrorLookup). Far too many parts of the system use these buffers, resulting in strange error messages when the wrong error is read from a corrupted buffer. c) Remove some non-language specific stuff from the Messages module. The Messages module is roughly 700K, and in RISC OS 3.7 needs to be totally replaced to get rid of the English-named applications in Resources:$.Apps. Try to get this reduced by splitting Messages into Messages and Resources with Resources holding: Resources.Wimp.Sprites[22] Resources.Wimp.Tools Resources.Colours.Palettes.* Resources.Colours.Tables.* Resources.Paint.Sprites Resources.Draw.Sprites (a total of ~430K) The idea is that a new Messages module will be required, but not a new Resources module. An alternate approach would be to extend ResourceFS to allow files to not only be overridden but to be deleted by subsequent ResourceFS registration. Thus some of Messages' files could be removed by a Messages2 module, without needing to re-register the large files above. d) Give the UK !Help the same !Boot file as the German !Info (ie set Help$Start). e) Internationalise "Application" in "Application may have gone wrong" message. f) Change the Toolbox to search for Res first, then Res, rather than the other way round. g) Get Toolbox ROM modules to reinitialise on Service_TerritoryLoaded. 5) Filing systems ================= a) Ensure all filing systems operate correctly with dynamic areas above 2 gigabytes (ie "negative" addresses). FileCore and ADFS fail on this. b) Enable multiple sectors per interrupt operation of ADFS. c) Make ADFS 'mount' hard discs like floppies. d) Ensure ADFS will support forthcoming hard drives. e) Consider starting major rewrite of RISC OS' filing system structure, with the aim of modularising the system more, using a high-level language, and replacing the increasingly cumbersome FileCore. (Details from XXXX) f) Consider adding ANC's CacheFS. (*) g) Should we incorporate CDFS 3 (possibly providing CDFS 2 on disc)? h) Changes for big discs. Notes from XXXX follow... FileCore: Change max. idlen which will reduce the problem of granularity somewhat. Leads to larger maps, which we might try to alleviate by caching (see below). New directory format. Required if we have more than 16 id bits (above change). Investigate the possibility of variable directory length (thoughts: it can be done and will allow the flexibility we need for the future). Variable length entries would be good for space use. Move workspace allocations (map, buffers, dir cache) to dynamic areas where possible. Make this the first change we make as it makes FileCore easier to debug and test, and we can also make some user interface changes (draggable directory cache - why not?) Have a long, hard look at CheckMap, and also at the free space map handling when discs are nearly full (it can still cause broken maps on RISC OS 3.60). Free space map caching. Would allow very large free space maps to be cached so that they are only held partially in memory. Could cause problems in some areas of FileCore: buffering being the major worry. However, much of FileCore limits itself to working a zone at a time, making the job that much easier. Major possible bug with >2G drives needs investigating. Sort out FileCore to allow files >=2G (upto 4G-1) to be used. Sort out scatter lists for >2G addresses. This gets more important when we move FileCore's buffers into dynamic areas (scatter lists are used to manage transfers performed this way). ADFS: Add proper iding of hard discs. Fix known bug with reporting mount errors on hard discs (disc error x at 0/000...006). Look at multiple sectors per IRQ (faster transfer rate and lower IRQ load). Fix ADFSbuffers for big discs. FileSwitch/fs in general: Find out where and why it has problems with long paths. Need to do something about the "Not enough stack..." problem. I think that the first thing that should be done is the workspace moving about stuff, since it's relatively easy, and will ease me back into the FileCore way of doing things. XXXX: Rework IDE so it is possible for us to use any IDE disc without evaluation or at least with minimal evaluation (currently it costs circa £5K/year directly + adds £5-19 to the COGS + reduces flexibility because our implementation of IDE does not follow that in the PC world). XXXX: Fix DOSFS so it works with Windows 95/Windows NT disc formats. Add support for Mac discs. XXXX: Make RAMFS dynamically adjustable. i) Make image filing systems close the image file automatically after a short time. (Can this be done at the FileSwitch level or must it be done for each IFS?) 6) Printers =========== a) Remove palettes - calculate on fly using new SVC-capable FPA b) Work required to catch up with latest printers. 7) Development tools ==================== a) To look competitive, our development tools need some serious work. Look at high-level C libraries, C++ classes and extending/bug-fixing the toolbox. b) Produce a Visual Basic equivalent.