> Text.Changes List for Proto-Arfur.


Versions up to .078 are ancient history, man.

Version .078
============

Bugfix of environment string setting

Version .079
============

Converted to new error header
Top bit R0 error indicator support removed
Flags added to ReadLine : bit 31 R0 set => don't reflect chars not going
                                           into the buffer
                          bit 30    set => any reflection done with char in R4

Heap robustification : checks that hpds, etc are in existing LogRam

New heap call : ExtendHeap, takes hpd in R1, size to change by in R3. Gives
two errors : BadExtend for wally changes (i.e. end moves outside existing
RAM), and ExcessiveShrink for end moved below area in use. The heap end has
been moved as far as possible in the second case. R3 returned as amount
actually changed by.

Default Sys$DateFormat set up to give string identical to Master TIME$.

Version .08
===========

Heap changes bugfixed
*con. monitortype added
Default screen on 512K Weed is 80K
If no keyboard (on ANY reset), it autoboots irrespective of other state.

Version .081
============

Overlong environment strings / errors don't overwrite your breaklist.
Service_Memory issued when AplWork size being changed : error given if
service is claimed. Service therefore means "are you using the AplWork?"
R2 contains the address of the currently active object, so winge if this
address is within your code.

Sources changed : conditional flags for native VDU, tube connected removed ;
it didn't stand a chance of working anyway if you changed either flag.

New Tim stuff : key up/down events, Con. monitortype does things.
SWI to set handlers with workspace added : handlers yet to change.
New fileswitch : buffering buggette fixed

Version .082
============

Configured sizes are now "PageSize" (8 or 32K) units.
Vset returns from module Init bugfixed.
VSets in RMTidy better
Bug in WriteI fixed (if an error occurred, it poked the stacked R14 with the
error pointer, rather than the stacked R0!)
Utility open file with winge has had open bits added (nodir,mustopen)

Major bash of handlers, also 3 escapes aborting removed.
SWI OS_ChangeEnvironment added : calls the envchange vector, default owner of
which sets the handlers. Give handler number in R0 (see hdr.envnumbers),
address in R1, workspace pointer in R2 (if used), buffer pointer in R3 (if
used). All old handler setting SWIs call this internally.


Version .083
============

Rationalised version number (cor).
Escape handler calling bugfix


Version .084
============

ValidateAddress acts sensibly for zero-length ranges.
New TimStuff
Kludge for now : workspace for error handler passed in in R0.
Help Commands lists *Modules and *Configure.
Assembly flag ; can assemble versions that convert exceptions into errors
with negative numbers
ValidateAddress allows the part of PhysRam that's in the screen.
Bugfixes of callback, breakpoint handler setting
*GO doesn't screw with your error handler, and supervisor doesn't reset the
world every time it panics.
New FileSwitch
Default PrinterType$4 variable
*Error and *Eval
Aliasing bugfix : *fred. doesn't match Alias$Fred
*Create bug fixed : *create jim now works
All files closed on all resets
Changes to CMOS reset : station ID unmolested (use magic Set transient!), and
 Sync state is TOGGLED rather than set. Do R-power on twice if necessary!

Version .085
============

INKEY -256 bugfix


Version .09
===========

Version number rationalised!
Configure language added.
Configured language used, which meant changes to module entering :
this sets up the envstring from anything after the filename on RMRun,
or from the string pointed at by R2 on Enter.
New Timstuff, new fileswitch
Attempts to restore registers 10-12, lr on exceptions.

.09/a
=====

Bugfix of cmd tail on *Go.
Monotonically increasing time added, + SWI to read it.
*GOS starts up the Supervisor application, which lives in the utility module

.09/b
=====

Oscli Bugfix : *Volume127 not OK.
SWI Module doesn't enable interrupts for claim, release and describe ops
New Timstuff : should beep!

.09/c
=====

Bugfix of errors from exceptions
Ballsup in ReadLine removed!
Sam hack of Beep code to make it beep at least a bit.
*Unplug etc. added.

.09/d
=====

Beep on hard reset moved.
Sound CMOS set on CMOS reset : speaker 1, volume 7, channel 1.
Reducing RMA / sysheap updates hpd proply.
RMTidy tries to shrink RMA if tidy successful

.09/e : Hard reset beep moved a bit more.
.09/f : Silly screensizes converted to as close to 20K as poss
        Optional 325 speed for a1 roms.
.09/g : Reset initialises timer0 so can use CMOS RAM read write.
.09/h : IOC Control set to FF on reset, new Tim code to do spastic things
        with Break key.
.09/i : Nibble mode ROM speed removed from A1 version!
        Better Tim code, new fileswitch
.09/j : RMReInit reports errors when inserting unplugged modules.
.09/k : Allowed to con. screensize 0-127, max screen actually set up 480K
        Bug in Create fixed. Dump now allows tbs -> printable masking
        Entry Envstring for RMRun fixed.
        Entry to Supervisor always by RMEntering utilitymod.
        ValidateAddress allow super stack
        Net EX/CAT CMOS reset better
        Status/configure when listing all goes into paged mode
.09/l : Soft break possible : FileSwitch tried and found Guilty of corrupting
        system heap.
        New Tim stuff, + weird country stuff in init.
.09/m : Basic SWI code doesn't change FIQ bit.
        Can set dump area for default exception handlers.
        *Help says "Help on keyword flurgle" instead of just flurgle.
        Oscli terminators table adjusted.
.09/n : Minor help text changes
        Fixed module command tails
        New Tim doobries : no chars from Rodent buttons!
        *Dump given offset=filesize winges "Outside File"
.09/o : New fileswitch ; *Copy.
        *Shadow implemented
        " :" changed to ":"
        Paged mode in *Show
        New TimStuff
.09/x : Timstuff
.09/y : Show pagemode bugfix
        Country CMOS reset to 1
        New fileswitch
.1    : Too much optimism and new Tim stuff
.11   : Keyboard code in reset fixed.
        <65junk> will expand variable 65junk
        Syntax/help messages tidied up
        *Time, *Ignore added
        New Tim stuff
        Conversion SWIs added
        Vectored SWIs (notably osbyte) can only affect C and V
.12   : Exception errors put PC on error msg.
        *Shadow (no param) works, *ignore 3please faulted
.13   : Conversions point R1 at 0
.20   : New fileswitch
        Language 3 set on CMOS wotsit
.21   : PrinterType$4 not set by MOS.
        ChangeDynamicArea does nothing if attempt to extend a heap too far.
        Also always leaves one page in AplWork
        Enters configured doodad if error on autoboot.
        Redundant bits removed.
.22   : Wierd terminator chars removed from ReadUnsniged, bit 29 flag added:
        restrict range to 0..r2 (inclusive). Used in SWI naming stuff (won't
        say "OK" to "Econet_&FFFFFFFF" etc.
        Unknown SWI error gives SWI number.
.23   : CMOS reset TV is 0,1
        Configured RMASize is amount free in RMA after mos initialisation.
        Fixed tbs restrict in PrintCharInGSFormat
        Errors propagated back in utilities from file closure.
        Exception register dump area only reset on break.
.30   : V set return from Help_Is_Keyword code not ignored
        Nude flieswitch
        R12 to Help_Is_Keyword code correct
        Bugfix of OS_ConvertNetStation : no explosion for bad net
        New glue together
.31   : XOS_Heap(DescribeHeap) subs 4 off right value.
        Setting Restrict Range to R2 flag in ReadUnsigned meant only base 10 OK
        Default R12 for event/escape handlers = -1
        XOS_Heap(ExtendBlock) by 0 works, valid block checking better.
        First version multiple incarnations, podule support.
        *Modules gives numbers
        DFlynn/AThomas memory page/size evaluation used. MOS now pagesize
        independant.
        Can assemble a multiple keyboard version
        *net: bye etc fixed.
        SWI dispatch immeasurably improved
        Module LookupName added
        Bugfix of *Status <module keyword>
        Module prefixes on oscli added: can specify command only comes from
        (a particular incarnation of) a particular module
        Bugfix of 239: wrch errors not being dealt with
        New fileswitch; oscli also reads any secondary FS command table
        Interrupts enabled in SWI name <-> number conversions
        SWI PrettyPrint & SubstituteArgs
.32     New fileswitch
.33     New Tim stuff: SWIs Plot & WriteN.
        Slight changes to allow service calls to be issued before modules are
        initialised. Note may get modechange service before Service_Reset.
.34     Configured lang was out by 1.
        SysHeap is shrunk to minimum, then configured extra size added (after
        main initialisation). Should give about 16K extra on 305/310
        Service_UKConfig conforms to (latest PRM) spec.
        SubstituteArgs terminator corrected.
.35     Nude TimBits: optimised plots, etc.
        ValidateAddress looks up screensize in VDU workspace
        ChangeDynamic funkyfied
.36     ADev versions hurl abuse at 3 micron ARMs.
        OS_Claim frees any links with same values first.
        OS_AddToVector has old Claim semantics
        INKEY-256 returns &A1
        RMReInit clears CMOS of unpluggies before initialisation.
        *ROMModules added as a replacement for *ROMS
        EnumerateROM_Modules reason code for OS_Module
        Bugfix of init strings on rmreinit.
        Order of files changed: in * prompt, utilitymod should always be CAO
        ChangeDynamic involving screen removes the cursors
        SpriteSize is a 6-bit field in Status/Configure
        Write0 shortened!
.37     VecSwi call shortened.
        Stu did something to FileSwitch - R6 not wally for some entries.
.38     Obscuro bug in heap block extension - made RM manager free workspace
        while checking block validity!
        If ExtendBlock frees the whole block, it updates the returned block
        pointer to -1 (i.e. really naff ptr).
        RMClear doesn't kill podule modules.
        New TMD stuff (some RS423 bugs fixed, faster this and that).
.39     New big version (new DeskTop, Wimp,...)
        New block copy/move code
        SpriteV added
        Escape purging of sound now uses duration 1 (at request of DFlynn)
1.00    New RS423, FileSwitch, ADFS ...
        CMOS reset sets 1987
        V not cleared for CallAVector
        Configure mode allows up to 23
        PrettyPrint reads window width
1.01    Status/Configure deals better with Wrch errors.
        Modules            "  (Tutu number output fixed).
        Guess what; ReadUnsniged fixed AGAIN !!! ...
        FileSwitch Opt 1,n bug fixed + {on} in Count
        SWI WriteEnv invented for JGT use in debungler
        New TimBits: fix embarrasment with lines, palette
1.10    Apparently this is a more aesthetically appealing version number.
        Nuder TimBit: service_prereset lives!
1.11    OSGBPB 5,6,7 r6 bug fixed
        MOS 2 micronised. Default callback shrank!
1.12    Dump code shortened + gives better error response for IsDir etc
        Another (nastier) FileSwitch Opt 1,n bug fixed
        Module handler returns proper w'space contents for LookUpName
        Installing keyboard handler might work now says Tim
        More FileSwitch changes. And yet more. Dump fixed.
1.20    another release, another number
1.21    Oscli whinges about *net#arf:thing etc.
        *Modules counter doesn't wrap at 256 (and neither does *ROMModules)
        Module init failure: doesn't free incarnation node twice, and
        doesn't poo in the system heap.
        RdArgs SWI added, NoSuchSWI error made non-dynamic
        timbits/fileswitch
1.22    Added code to issue service call on RMA claim fail, as requested for
        ADFS. Not actually assembled in though!
        Module death can now be recursive
        Header fields checked for validity: word-aligned where appropriate,
        and within code length
        CAO during startup=32M: allow overwriting of MOSROM modules.
        Module SWI lookup much faster: enter into hash table on init
        Added SWI OS_ReadRAMFsLimits
        Looks for keypad * pressed on reset; drops into supervisor.
        T,Delete and Copy power-on added.
        List, Type use RdArgs (File/A,TabExpand/S), and expand tabs into
        8 spaces.
        Buggette in Module handler: recursive death may lead to operating
        on a module with 0 incarnations.
        SWI despatcher goes into caller's IRQ state; individual SWIs yet to be
        inspected.
        Supervisor doesn't reference ESCCNT or ESCFLG any more.
        Vecnum=Swinum SWIs enable IRQs, except for Byte & Word which disable
        them.
        Module SWI enables IRQs explicitly except for heap ops.
1.23    SWI Mouse disables IRQs
        Bugfix of Oscli: copes with buffer overflow in alias expansion
        parm substitution.
1.24    Simon Smith and his Amazing Dancing IRQ Despatcher! New SWIs to claim
        and release "devices" (i.e. bits in IOC interrupt registers A and B,
        with the podule device the only one capable of having multiple owners).
        EnumerateROMModules call (and so Rommodules) fixed.
        Workspace reordered so can call handlers by LDMIA R12, {R12, PC}
        *RMFaster added.
        Link passed to module SWIs has correct IRQ state.
        Interruptible (and also bug-fixed) heap manager incorporated.
        New Tim stuff
1.25    Default IRQ2V clears the appropriate mask bit, returns.
        SWI ModHand: ExtendBlock will return V set if appropriate.
        Register dumping changed; may save right registers for FIQ/IRQ.
        ValidateAddress fixed for screen memory.
        New Timstuff; ECF origin settable.
1.26    MOS help messages tidied up.
        Redirection errors better.
        Alias terminators same as module command terminators.
        Scratchspace sorting out: "bad number of parameters" error
        constructed in an Oscli buffer.
        Stack full error in Oscli has a sensible number; HelpBuffer
        allocated on the stack.
        Redirection handles made byte-sized.
        MOS buffers rationalised; there's now an enormous amount of sharing.
        SWI not known error contains SWI number if it wasnt done under
        interrupt.
        Backspace in readline = delete
1.27    Modules can refuse to initialise again.
        Background FIQ handling done; Service_ClaimFIQ and Service_ReleaseFIQ
        now come round immediately after Service_Reset, to set up the
        default handler.
        Stuart's HeapSort SWI added
        SWI ExitAndDie added
        SWIs to delink and relink application vectors added
        Configure keyword MouseStep added; can also do nK on size fields.
        ChangeDyn file improved; if cam map corrupted, necessary registers
        pulled.
        SWIs to allow user CAM-bashing; soft reset makes the application
        space contiguous again.
        ChangeEnvironment has a new reason code to allow setting of the
        application space size.
        Reset code masks CMOS; if top bit of CMOS gets set, used to be in
        a state where lots of memory was allocated, but *status said little
        was being requested.
        SWI number->name conversion uses hashtab.
        FE0-FFF initialisation removed.
1.28    TV configure syntax nitpicked.
        New FileSwitch
1.29    Monotonically increasing time move to &10C; now a public location.
        *key fixed; (re)uses EnvString
        as does *show
1.30    *show prettified
        FIQ downgrade highest priority interrupt.
        MOS FIQ claim/release handling altered; now should cope with
        background claims and/or releases occuring during a foreground
        claim.
        New extensions to callback; can now ask to be put on a vector.
        Hacked source.pmf.key so it calls the callback vector (but NOT
        the callback handler) in readc/inkey, if its bored.
        ChangeDynamicArea falls at the first fence if an IRQ is threaded.
        SWI despatch in RAM; 10% faster StoreHD.
        Bugfix of SWI node release on module death; bugfix of error percolation
        in new incarnations.
1.31    Supervisor printing of time taken ditched; bottom 32K, sysheap, cursor
        user-write-protected.
        Processor-speed dependant waits in NewReset now use Tim's magic
        delay routine.
        New TimStuff.
1.32    Bugfix of heap block extension.
        Dynamic SWI not known built in better buffer.
        Vector stasher always terminates the buffer (unless totally spastic
        buffer size).
        Improvement of heap block extension; will extend into preceding block
        if poss. Also fix of code spotting interrupted heap ops (from 1.30).
        PrettyPrint bugfix: hard space after tab.
        Writeability of CAO (for WIMP) via changeenv.
        Checks for keypad 0,1,2 on "power-on" resets, and sets monitor type
        accordingly.
        ReadBlockSize reason code added to heapman.
        New fileswitch.
        ROM speed slugged.
        Bugfix of SetMemMapEntries, soft reset copes with many pages mapped
        to the same address.
        Defined R0-R3 corruptible for IRQ processes.
1.33    Cam bashing revisited; PPL kept in soft copy too.
        ChangeDynamicArea also understands that the sysheap should be kept
        protected too.
        Dynamic "SWI not known" error fixed.
        Doesn't go address exception if no kbd.
1.34    Another instruction removed from SWI despatch.
        Times CPU and susses in spec ROM speed at reset
        Old style handler setters don't poo on r12 value.
        New fileswitch & timstuff: VDU output to sprites.
        RAMfs space protected.
        ReadDefaultHandler SWI added; pass number from hdr.env*, returns
        R1=address, R2=workspace, R3=buffer. 0 means not relevant.
        CAM soft copy size doubled; 8Mbyte may work.
1.35    New fileswitch.
1.36    MOS Default FIQ ownership fixed.
        New Timstuff: window width obscurities, border stuff.
1.37    CAM bashing revisited for 8M; next bit up now included. Ta Jamie!
        Bugfix of SubstituteArgs.
        New Timstuff.
        Service offered after ChangeDynamic has moved stuff.
        When copying (if screen is being extended), ChangeDynamic copies
        from a PhysRam address. The last page of application workspace is
        copied into, so this MUST NOT be doubly mapped in MEMC.
        Bugfix of RMtidy: checks CAO in RMA again.
1.38    SWI despatch understands that modules may have zero incarnations.
        Ballsup of ReadDefault corrected.
1.39    ChangeDynamic overhauled: changing screensize cooperates better with
        VDU drivers.
        Setting of variables uses a stack buffer; scratchspace use across
        sysheap extension a nono.
        R0 in Service_Memory corrected. Always issues post-service, even if
        error/nothing to move.
        Monitortype bits expanded in status/configure.
        r1 uncorrupted in OS_Exit for HMeekings.
1.40    Help matches against module titles as a postscan, giving keywords
        recognised in the module.
        Bottom 32K protection removed.
1.41    Soft break forces noprot on application space.
        ChangeDynamicArea rejects out of range area numbers (instead of
        crashing).
        SWI Module does better when block extension has to try and extend the
        RMA.
        Exported HLINE takes colour information.
        ROM unplug bits extended by using original Master frugal bits.
1.42    Setting of numeric variables fixed.
1.43    Default CMOS: NewADFSCMOS+2=1, DumpFormat=4.
        Much molested prettyprint.
1.44    DrawV added.
1.45    New fileswitch.
        PrettyPrint allows you to specify the MOS dictionary by setting r1=0.
        Saved a word in CallVector (2 micron needed); stopped error gen if
        vector number > NVectors
 (defined r0-r3,r12 trashable on IRQ vectors)
1.46    Made IRQ vector claim force release of any previous entries.
        SubstituteArgs: tbs r0 on entry => don't tack any unused part of the
        line on the end.
        New HeapSort which can shuffle data/build array pointers for you
        Much munged help text.
        BGet cache put into kernel so we save about 4us per call (saves
        branches, temp register pushes). New FileSwitch
1.47    ROMModules fixed.
        Added default handler for EconetV for Bruce
        Minor speedups/space savers from Stu.
        Fixed module name match: adfs. no longer matches adfs
1.48    Removed fast entry for Args/GBPB/File/FSControl as it was dangerous
        new fileswitch that matches the above, so default vechandlers changed
        *Quit migrated.
        BPut cache migrated into kernel; removed VecFSSwi code
1.49    Fixed syntax message expansion.
1.50    ChangeDynamic has 3 = Sprite area
1.60    Richard III is dead
        New serial stuff, apart from XON/XOFF
        InstallKeyHandler with R0=1 => read keyboard id
1.61    Default osbyte vec has r12=OsbyteVars
        Error returns for bad RMA heap claim/extend improved.
        RMA block extension needing RMA extension fixed.
        Doesn't corrupt end of physram on reset.
        System heap not protected just because there are idiots instead of
        programmers out there.
        RMEnsure. SystemSpeed CMOS removed.
        Noo really dangerous FoolSwatch
1.70    New title for release
1.71    Heap Extend wallyism removed.
        System heap protection really removed.
        Changed help for load/save/create etc. to keep DBell happy
        New FileSwitch
        CRC stored in pair of bytes at end of each ROM image
        HeapSort now does B SLVK rather than LDR pc, =BranchToSwiExit
        Exception handlers disable FIQ asap, shorter
        Interrupt handling fix: DiscChanged on Archie became winnie IRQ!
        Memory speed/MEMC1a flag (tbs) saved in RAM at &110.
        CMOS resetting modo-fied a la Tim Caspell - R/T-power-on don't reset
        harddiscs or country, or time; DEL/COPY zap harddiscs/country, but also
        leave the time alone.
  ****** N. B. ********* harddiscs not being reset may lead to long waits the
        first time a named disc is used: on current ADFSs, it will be an
        infinite wait.
        Added help on Break, Reset and PowerOn.
        Module handler fudged a bit for modules with 0 incarnations; tidier
        after somebody explodes in Initialisation/Finalisation.
        "Module postfix given" now reads "'%' in module title".
        Even newer FileSwitch
        SYS OS_ReadSysInfo: give it 0 in R0, it returns what screensize is
        set by CTRL-BREAK.
        *type/list with only one param assume it's a filename.
        Made memory speed a halfword; MEMC1A flag now bit 16.
        Byte at &107 is an inconsistency semaphore; if non-zero at reset,
        hard reset is forced. ALWAYS lower and raise with IRQ disabled.
        New monitor type 2, compatible with UNIX monitor (mode 23 only).
        Minisculely faster floodfill.
        SWI OS_Confirm.
        New multi-threadable FileSwitch (actually saved code and store !)
        SKS fixed SWI OS_Confirm - it never cleared Z or C ! It also used wrong
        exit criteria; &1B does not necessarily mean an escape condition exists
        it also corrupted r3.
        SKS fixed SWI OS_ReadSysInfo; it actually preserved r0!
1.72    New FileSwitch + loads of modules for yet another release
        SWI ClipBox
        Fixed FileSwitch howler
1.73    Help terminates on escape.
        Autoboots if unrecognised keyboard too.
        New FileSwitch
        CAM remapping don't fiddle with the interrupt state; caller must think
        this through themselves.
        Default CMOS sez ArthurLib
        Added periods to end of configuration help where they were missing
        Moved more supervisor stuff into Super1
        ReadLineV default owner gets called with suitable r12
        Attempt to fix *-reset by delay loop
        Calling of CallEvery events fixed; CallAfter/CallEvery SWIs don't
        corrupt r1.
        Made keyboard + printer buffers bigger, cut down Sound0,1,2,3,Speech
        Reduced *-reset delay loop; moved Inter+IntKeyModules higher in list
        Added ConvertFileSize+Fixed, CRC swi
        IRQs off when entering callback handler.
1.75    Made a500 version for release
        Fixed Copy use of WimpFreeMemory <-- NB. A500 versions are wrong
          and set SlotSize 0. Sorry chaps.
1.76 should have been set AS SOON AS THE CODE WAS CHANGED (Stuart).
        Extended RESET helptext. MouseStep all one word.
        Mutter mutter. Explicitly reeenable irq before waiting for metrognome
        change. Fixed power-on monitor type reconfigures
1.77    Status doesn't say 0K for screen.
        Moved OPT code to kernel so *opt1 etc. valid. Shortened PrintR0Decimal
1.78    Made a500/a1 versions for release
        Fixed conversion swi number to name to recognises new swis
        New FileSwitch
        After looking at the MOS irq device handlers, we'd better define r11
        to be trashable on IRQ device handlers as well as r0-r3,r12! Also IRQ1
        Default IRQ shorter - people on IRQ2V must preserve all except r12!
        Defining r3 -> IOC for all IRQ handlers would be a very good move
        Compressed SysComms, added MakeErrors in most of MOS + FileSwitch
        FileSwitch now has path: stuff
        Fixed default callback handler
        Make redirection work with INKEY as well as RDCH
1.79    Bugfix ReadArgs; non-abbreviated keywords with aliases now work.
        Made RMEnsure scan for digit after getting to 16th col in module
        help string anyway; means we can rmensure the current clib.
        *Error GSTranses the error string.
        Callbacks will be processed before calling the error handler.
        Put in new SLVK exits to save space
        Nude fileswitch
        Fixed SWI OS_GenerateEvent so can call from non-SVC mode.
        Should we define r9 trashable on module SWI calls ???
        Move V test into RAM SWI area
        Default event vector call with appropriate r12
        Faster BPut; we have deviant wp in top vector node
        Made error handler shorter
        New entry to PMFWrch, gets OsbyteVars up its' entry point
        Removed error on setting callback handler if callback outstanding;
        came in earlier in 1.79.
        Improved 'RM not found' and RMEnsure errors.
        SWI OS_ServiceCall instead of BL Issue_Service in reset.
1.80    Made image for release
1.81    Faster SWI OS_CRC by TMD
        Padded OS_Confirm pointer shape, put the active point on the right.
        Added an upcall handler.
        Font cache at 30M; ValidateAddress modified.
        Reason code 4 in ChangeDynamic = font cache
        SWI OS_ReadDynamicArea.
        Regard keyboards with ids 1-31 as the same.
        Got a dozen spare vectors
1.82    *Time copes with oswrod errors
        CallAVector internally preserves caller's interrupt state.
1.83    Fix to ChangeDynamic of font area.
        Fixed PIRQ/PFIQ despatch for case when LSB of B CONT ~= 0
        Also made the above faster/shorter
1.84    Fixed ChangeDynamic for sprite area; used to indirect into deep space
        Also allow APL/BottomWS to shrink to 32K
        Fixed ReadArgs to allow y and z in keywords.
        Fixed code in heap block extension to satisfy comment.
        Changed default Sys$DateFormat to "%24:%mi:%se %dy-%m3-%ce%yr"
        Changed *Time to use OSWord 14,0
        ExtendHeap was total garbage!
        Make MODE 23 Unix compatible
1.85    ReadDynamicArea returns start of screen address
        ChangeDynamic safe in conjunction with background heap ops
        New FileSwitch
        Moved Quit in command table to alphabetic place
        Put a B in TimeCPU to make result more accurate
1.86    OS_ReleaseDeviceVector disables IRQs.
        OS_AddCallBack disables IRQs earlier.
        OS_Confirm mouse shape has no colour 2
        Flushing the printer buffer makes it dormant if not a stream
        CheckModeValid works properly with a user monitor type
        A500 keyboard changed
        Mouse buffer not flushed when new bounding box set, instead coords are
        clipped against the current bounding box when read out of the buffer.
        MODEs 21 (multisync) and 24 added
        Set DomainId to 0 at reset
        Made process_callback_chain disable IRQs round updating head^ so we
        didn't lose callback vector requests when processing the chain; saved
        2 instructions in AddCallback
        Maximum configurable mode is the max mode the MOS implements
        ChangeDynamic can do RAMFS if no files in it.
        Heap Extension call rounds size to words correctly (always towards
        zero).
        Handlers zapped to defaults if app starts and exit handler belongs
        to supervisor.
        VGA modes (25..28) added
        ChangedBox fixed for VDU 5 8x8 and 8x16 text
1.87    Hi-Res-Mono palette changed so PP field returned is &10 or &11 or &12
        Also changed to return full black or full white for the RGB fields, not
        red.
        Bugfix in *Help; Escape while printing a module summary gave a random
        error message.
        Swapped silly name for another silly name.
1.88    Heap manager size call fix.
1.89    TimeCpu code was wrong (misordered merge of 2 8-bits) and had wrong
        cutoff point for MEMC1a
1.90    New week number code - now conforms to BS4760 (supposedly)
        New FileSwitch with file buffering fixed
2.00 (15 Sep 88)
        Econet background FIQ problem fixed
        NetStatus and Hourglass error handling improved
        Kernel locks out background FIQ claims while the release service call
        is in progress.
2.00 (03 Oct 88)
        New FileSwitch - default run action for text files is now *Type
        New NetFiler - version in previous MOS was out-of-date
2.00 (04 Oct 88)
        New ADFS (Winnie podule problem fixed)
        New TaskManager (doesn't claim null events when window not open)
Note:   Change all occurrences of GoVec(2)
        May also note that default vector owners can trash r10, r11 IFF
        they claim the vector...

2.01 (02 Mar 89)
        New version of ChangeDynamicArea which reenables interrupts.
        Heap manager optimised in a few places.
        Fixed bug in extend heap call (stack imbalance when returning
         'No RAM for extending heap' error)
        Heap manager extend block has improved IRQ latency.
2.01 (29 Mar 89)
        Fixed "*%" (LDREQB not LDREQ).
2.01 (31 Mar 89)
        Fixed OS_ReadArgs with a /E argument that evaluates to a string (always
        used to give 'Buffer full' - also fixed 2 other bugs lurking in the
        background, viz. did STRB of buffer addr assuming it was non-zero to
        indicate a string, and didn't allow for length and type bytes in amount
        free value.
2.01 (11 May 89)
        Fixed OS_Word &15 reason code 4 (Read unbuffered mouse position)
        - it used to generate undefined instruction trap due to stack mismatch.
        Fixed OS_SWINumberToString with negative numbers.
2.01 (16 May 89)
        Fixed ROMModules never saying 'Running'.
        Fixed bug which occasionally left soft cursors on the screen.
2.01 (23 May 89)
        Made OS_SpriteOp reentrant by pushing register dump area on stack.
        Fixed sideways scroll by one 'byte' in MODEs 3 and 6.
2.01 (26 May 89)
        Made OS_Byte &87 restore caller's IRQ state during call.
2.01 (30 May 89)
        Made OS_Word &0E,0 enable IRQs during call.
        Made OS_Word &15,0 enable IRQs during call.
2.01 (01 Jun 89)
        Fixed incarnation names being terminated by 1st character.
        Fixed *Unplug using address as extra terminator for module name.
2.01 (30 Jun 89)
        Fixed podule IRQ despatcher corrupting R0 (prevented it from
         correctly disabling the podule IRQ (or podule FIQ-as-IRQ) interrupt
         if no handler)
        Fixed rename incarnation bug.
2.01 (01 Sep 89)
        Added help on LEN in *Help Eval.
2.01 (04 Sep 89)
        Fixed bug in prefer incarnation which returned duff error pointers.
2.01 (06 Sep 89)
        Changed BadTime error message from null string to
         'Invalid time interval'
        Fixed bug in CallAfter/Every which returned duff error pointers.
2.01 (11 Sep 89)
        Fixed bug in AddCallBack which freed the wrong heap node.
2.01 (12 Sep 89)
        Fixed bug in monadic plus/minus in EvaluateExpression (eg *Eval 50*-3)
2.01 (25 Sep 89)
        Fixed bug in GSRead with quoted termination.
        Fixed bug in keyboard driver (pressing Break (as escape) key when
         keyboard buffer full did nothing)
2.01 (27 Sep 89)
        Added SWI OS_ChangeRedirection
2.01 (06 Oct 89)
        Optimised ConvertTo5Byte routine
2.01 (10 Oct 89)
        Took new FileSwitch from Neil
2.01 (12 Oct 89)
        Added SWI OS_RemoveCallBack
2.01 (19 Oct 89)
        Added code to poke VIDC clock latch from bits 9 + 10 of control
         register.
        Modified FIFO request pointer algorithm to new one, also taking the
         VIDC clock speed into account.
        Changed INKEY-256 to &A2.
2.01 (23 Oct 89)
        Changed memory sizing routine to cope with 12 and 16MBytes (but CAM map
         still needs extending!).
        Added keypad-4 reset to select monitor type 4 (super-VGA).
2.01 (26 Oct 89)
        Put in variables for pointer to CAM map and number of CAM pages.
        Recoded ChangeDyn and NewReset to set these up and use them.
        CAM map is now either in low-down area for up to 8MBytes, or just above
         IRQ stack for 12 or 16MBytes.
2.01 (27 Oct 89)
        Added new VDU variable VIDCClockSpeed(172), the current VIDC clock
         speed in kHz.
2.01 (02 Nov 89)
        Added ModeExtend pixel rate specification interface.
2.01 (03 Nov 89)
        Changed fast CLS code so it can cope with screens which aren't a
         multiple of 256 bytes long (eg 800x600x4bpp).
2.01 (07 Nov 89)
        Put in code to handle sync polarity programming (including ModeExtend
         interface).
2.01 (08 Nov 89)
        Fixed over-zealous fast CLS code.
        Made a 4MBit EPROM image of this.
2.02 (09 Nov 89)
        Changed start-up message to "RISC OS+" (removed flag Fix0).
        Started test software integration.
2.02 (10 Nov 89)
        Incorporated new screen modes from Paul Swindell.
2.02 (20 Nov 89)
        Changed RS423 RXIRQ routine to process the 'serial input ignored'
         OS_Byte flag after checking for XON/XOFF characters.
2.03 (21 Nov 89)
        Changed !Draw and !Paint run file WimpSlots
2.04 (30 Nov 89)
        Got new headers (including new Hdr.CMOS).
        Removed initialisation of CatalogCMOS and ExamineCMOS in R-poweron.
        Optimised PushModeInfoAnyMonitor so it doesn't set up VIDC stuff - this speeds
         up SWI OS_ReadModeVariable enormously (this had slowed down due to VIDC tables
         now being different for different monitor types).
2.04 (01 Dec 89)
        Fixed OS_Word &07 (SOUND) needing a word-aligned control block.
        Added SWI OS_FindMemMapEntries.
2.04 (04 Dec 89)
        Changed SWI OS_FindMemMapEntries to new spec.
2.04 (07 Dec 89)
        Modified SpriteLoad/SpriteMerge to use OS_File instead of OS_Find/OS_Args/OS_GBPB
        - this means the Econet broadcast loader doesn't have to sit on SWI OS_SpriteOp.
2.05 (08 Feb 90)
        Updated *Help PowerOn to mention 4 key on numeric keypad.
2.05 (01 Mar 90)
        Put in code for handling squeezed modules. Bit 31 of init entry set
         => module is squeezed (bits 0.30 are the length of the module, at
         the end of which are the unsqueeze information words.
        Bit 31 of die entry set => module is not killed by RMClear (the
         unsqueezed module image normally has this bit set).
2.05 (05 Mar 90)
        Changed title back to "RISC OS" from "RISC OS+".
2.06 (27 Jun 90) (some intermediate versions missing)
        New screen mode parameters - letter box modes for VGA
        OS_Byte &7C and &7D changed to use SWI XOS_SetCallBack rather than
         poking to the callback flag themselves (other bits are used in this
         flag)
        OS_ChangeDynamicArea now checks explicitly for areas trying to grow
         beyond their maximum possible size (necessary for machines with
         more than 4MBytes)
        OS_ReadDynamicArea specification changed: if bit 7 of r0 set on
         entry, then on exit r2 holds the maximum size of the area (and r0,
         r1 are set up as per usual)
2.06 (16 Aug 90)
        Fixed bug when configured screensize is less than 20K.
        Started splitting off MEMC-specific stuff.
2.07 (08 Oct 90)
        Fixed bug in OS_ReadVarVal when you test for presence of a variable with
         R2<0 and R4=VarType_Expanded and the variable is a macro.
2.07 (30 Oct 90)
        Made errors from unknown OS_Module call and unknown dynamic area in
         OS_ChangeDynamicArea be "Unknown OS_Module call" and "Unknown
         dynamic area" respectively rather than "" and "" respectively!
         (They share the same error number).
2.08 (31 Oct 90)
        Fixed three bugs in the *Help code, to do with correctly handling
         errors from OS_WriteC (via OS_PrettyPrint).
2.08 (16 Nov 90)
        Changed module handler to call Podule manager to translate podule
         number into hardware address, rather than doing it itself.
        OS_ValidateAddress now issues Service_ValidateAddress when area
         appears to be invalid, so modules can add valid areas.
2.08 (19 Nov 90)
        Fixed two bugs in RMEnsure; (a) no help string (b) help string shorter
         than 16 chars
2.08 (27 Nov 90)
        Added 3 more bytes of unplug CMOS
2.08 (28 Nov 90)
        Divorced kernel from FileSwitch (BGET and BPUT now always go thru vector)
2.08 (08 Jan 91)
        Fixed bug in OS_Module 11 (copied extra word, which could corrupt RMA)
2.08 (15 Jan 91)
        Fixed bug in OS_Module 17 (corrupted R9 on exit)
        Changed OS_Module 17 to cope with extension ROM modules (including directly executables).
2.08 (23 Jan 91)
        Changed OS_Module 19 to cope with extension ROM modules
        Added OS_Module 20 (same as 19 but also returns version number)
        Fixed zero-effect bug in OS_Module dispatcher - if called with maxreason+1 it jumped off the end of the table -
         into the unknown reason code routine!
        SpriteOps 60 and 61 (switch output to sprite/mask) now issue Service_SwitchingOutputToSprite after switching
        Issue Service_PostInit after all modules have been initialised
2.08 (01 Feb 91)
        Added *RMInsert command
        Finished off extension ROM code (hopefully!)
2.08 (06 Feb 91)
        Changed keyboard code to only send LED changes when state has actually changed
2.08 (07 Feb 91)
        Made hardware address of extension ROMs zero
2.08 (13 Feb 91)
        Made OS_ReadSysInfo return screensize in step with real algorithm, ie a) ignore top bit of CMOS, b) if less than 20K,
         add in extra pages until >= 20K
2.08 (01 Mar 91)
        DoMicroDelay optimised by Ran Mokady
        Started to put in Configure Mode/MonitorType/Sync Auto.
        Conditionally remove parallel/serial drivers
        Stopped *Configure allowing garbage on end of command, eg *Configure Delay 30 this is rubbish
        Fixed *Status TV corrupting error pointer while printing "TV          "
2.08 (04 Mar 91)
        Merged Configure Mode and Configure WimpMode
        Set 'DriversInKernel' flag for now
        Added OS_ReadSysInfo(1) - return configured mode/wimpmode value (with Auto expanded)
        Fixed OS_ReadSysInfo(>1) so it returns an error properly
2.08 (08 Mar 91)
        Put in Configure PrinterBufferSize and support code
2.08 (11 Mar 91)
        Used to change screen mode and print "RISC OS xK" before module initialisation. Now it changes screen mode before
        (in case modules print during init), and afterwards (in case a module has provided a new screen mode), and then prints
        the message.
        Also after a monitor type reconfigure, selects default mode, not mode 0.
2.09 (12 Mar 91)
        Fixed *Status MouseStep corrupting error pointer while printing "MouseStep  ".
        Fixed *Status corrupting error pointer from module code.
2.09 (15 Mar 91)
        Put in IOEB and LC detection, and monitor lead type detection.
2.09 (19 Mar 91)
        Completed monitor lead type interface.
        Changed default Language to 4 (which is new Desktop module number).
2.09 (21 Mar 91)
        Improved monitor lead detection of Hsync.
        Made InitialiseROMModule return errors correctly.
2.09 (25 Mar 91)
        Fixed bug in OS_SWINumberFromString to do with checking for valid module SWI chunk.
        Fixed loads of other bugs in SWI OS_SWINumberFromString.
2.09 (26 Mar 91)
        Fixed similar bugs in SWI OS_SWINumberToString.
2.11 (02 Apr 91)
        RM - Changed time calls to use TerritoryManager calls to cope with local time.
             OS_ConvertDateAndTime now calls Territory_ConvertDateAndTime
             Changes made in: Source.PMF.osword  and in Source.PMF.convdate.
2.11 (05 Apr 91)
        Finished putting in 82C710 detection and configuration.
2.11 (12 Apr 91)
        Put in support for new serial drivers.
2.11 (18 Apr 91)
        Moved Service_PostInit to after filing system selection.
2.12 (26 Apr 91)
        Put in SWI XPortable_Speed in RDCH/INKEY.
        Made *Modules and *ROMModules check Escape flag.
2.12 (29 Apr 91)
        TestSrc.* (Power-on Selftest)
        -  82C710 changes addressing for FDD inuse light
        -  Validation of CMOS checksum
        -  Disables long memory test (blue phase) if Misc1CMOS bit 7 is set
        NewReset
        -  Checks CMOS checksum on Power-on{delete/copy/r/t}. Forces complete (including Econet
           station number) reset if checksum is corrupt.
        -  Initializes checksum if CMOS reinitialised.
        Source.PMF.i2cutils
        -  Addition of ValChecksum and MakeChecksum
        -  'Write' now maintains checksum byte. Checksum byte itself may be changed.
        Hdr.A1
        -  Addition of ChecksumCMOS switch. FALSE removes checksum maintenance.
2.12 (02 May 91)
        Changed default configured caps setting to NOCAPS.
2.12 (07 May 91)
        CMOS checksum seed changed to 1 (CMOSxseed in Hdr.CMOS)
        Selftest reports CMOS failure to user only if IIC fault occurs
        Space reserved for processor test removed from TestSrc.Begin
2.13 (13 May 91)
        Put in code to read unique ID
2.13 (20 May 91)
        Added new characters to system font
2.13 (23 May 91)
        Put in debugging for forced hard reset
        Updated *Help Power-on
        Fixed bug: if configured monitortype is unknown, uses naff VIDC parameters
2.14 (05 Jun 91)
        Put in hex digit pairs for characters 80..8B, corrected location of new characters.
2.16 (12 Jul 91)
        Changed default buffer flags for MOS buffers.
2.16 (18 Jul 91)
        Changed default 82C710 configuration.
2.17 (26 Jul 91)
        Adjusted Error_Code to place constructed error at GeneralMOSBuffer+4
        rather than GeneralMOSBuffer to avoid clashes with default error
        handler's use of GeneralMOSBuffer.
2.17 (26 Jul 91)
        Adjusted default owner of error vector to copy the error text limited
        to 252 characters, truncating if necessary. Avoids duff error blocks
        destroying the system.
2.17 (26 Jul 91)
        Fix display of error by default error handler - it used to not put
        the error number out.
2.17 (30 Jul 91)
        Changed the value of INKEY(-256) to &A3.
        Modified DoInsertESC (OS_Byte 153) to only do special things on buffers 0 or 1.
2.17 (05 Aug 91)
        Changed default CMOS settings.
2.18 (12 Aug 91)
        OS_Byte(2,non-zero) code now checks if serial stream open before trying to open it again.
2.18 (13 Aug 91)
        Changed Messages file: removed extra space in "Extn", added space on end of "EXTROM", "PODROM".
2.18 (16 Aug 91)
        Added code to respond to service DeviceFSCloseRequest to close printer and serial streams.
2.18 (19 Aug 91)
        Changed *Error to use MessageTrans error buffers. Avoids numerous clashes in GeneralMOSBuffer.
2.18 (23 Aug 91)
        Made ErrorSemaphore a byte, not a word.
        Added PortableFlag so that we don't issue more than one abortive SWI Portable_Speed.
        Change RS423Vdu to not put bytes in the serial output buffer if
         couldn't open serial stream, and also to report any error.
2.18 (30 Aug 91)
        Change error "System variable not found" to "System variable 'blah' not found"
2.19 (05 Sep 91)
        Change monitor type for superVGA monitor ID to 1 for LiteOn monitor.
2.19 (06 Sep 91)
        Added an extra space on end of "Result: Result is %0, value :" message.
2.19 (10 Sep 91)
        Fixed kernel messages not translated after soft reset bug.
2.19 (11 Sep 91)
        Fixed Configure Mode Auto always using 27.
3.00 (25 Sep 91)
        Amber release.
3.01 (07 Oct 91)
        Fixed bug A-RO-9984 (requests to close kernel device streams didn't work).
        Removed redundant non-functional code from DoOsbyteVar which tried to close the
         serial output stream if WrchDests no longer included serial - this code is not
         needed because the kernel now responds to the DeviceFSCloseRequest service.
        Put in checks on OS_SpriteOp for SLoad/SMerge.
3.01 (15 Oct 91)
        Fixed bug RP-0039 (OS_ChangeDynamicArea goes wrong when amount to change = &80000000).
        Removed redundant copy of month names table from kernel.
3.01 (17 Oct 91)
        Added DebugHeaps option to initialise used and freed blocks in heaps.
        Changed OS_SpriteOp check: it used to check that offset to first
         sprite = 16, but this is too stringent - there are silly files out
         there that have extension words in the header - so now it just
         checks that the offset is within the file.
3.01 (21 Oct 91)
        Put in support for 82C711 (including OS_ReadSysInfo(3)).
3.03 (11 Nov 91)
        Enhance system variables: increase allowable length from 256 to
         16M; don't assign if going to overflow (found to be bad in
         practice).
        Split Arthur2 into system variable stuff (GSTrans etc,
         OS_ConvertBinaryToDecimal, OS_ReadVarVal etc) and Utility, the
         start of the utility module.
3.03 (13 Nov 91)
        Change palette code to use PaletteV.
3.03 (18 Nov 91)
        Added support for module to tell OS the real VIDC clock speed.
3.03 (22 Nov 91)
        Added bit in CMOS that is set on a CMOS reset, and cleared on any other
         reset.
3.03 (25 Nov 91)
        Added new screen mode 22 for visually disabled - 768 x 288 x 4bpp, XEIG=0, YEIG=1,
         for monitor types 0 and 1.
3.04 (20 Dec 91)
        Fixed system SetVarVal to no GSTrans a string result from
          EvaluateExpression (ie fix *SetEval). As a consequence a new
          SetEval type allowed: VarType_LiteralString - string without
          GSTransing.
3.04 (15 Jan 92)
        Added OS_SetColour.
        Switching output to a sprite takes into account Fg/BgPattern setup by OS_SetColour.
3.05 (21 Jan 92)  lrust
        Changed mouse buffer routines to BufferManager block transfer buffers to improve
          interrupt latency.
3.05 (24 Jan 92) JRoach
        Increase default mouse step from 2 to 3 as per ECR.
3.05 (28 Jan 92) LRust
        Changed OS_Claim/Release code to restore IRQ state prior to releasing
          vector node to system heap (conditional on IrqsInClaimRelease) to
          improve interrupt latency.
3.05 (30 Jan 92) LRust
        Changed ProcessTickEventChain to re-enable IRQ's while returning ticker nodes
        to the system heap (conditional on TickIrqReenter).  CallEvery/After events
        are now processed last in centisecond clock interrupt.
3.06 (14 Feb 92) TDobson
        Fixed dotted line bug (dotted lines with a dot pattern length > 32
        which start outside the window where the number of undisplayed
        pixels modulo the dot pattern length exceeds 32 go wrong).
3.06 (14 Feb 92) LRust
        OK lets start with the easy ones!  Fixed bug report RP-0387. 
        Change *Error syntax in 'HelpStrs' to show error number as optional.
3.06 (18 Feb 92) LRust
        Fixed RP-1299 - stack imbalance for OS_Word &0F under error conditions
3.06 (19 Feb 92) TDobson
        Added Welsh characters and swapped direction of hex number characters
        in kernel system font.
3.06 (19 Feb 92) LRust
        Fix RP-0617.  TranslateError now preserves callers IRQ state
3.06 (20 Feb 92) JRoach
        Install an index on system variables to speed their assignment and
        access.
3.06 (20 Feb 92) LRust
        Invoke Service_SyntaxError from OS_CLI if command syntax error
3.06 (26 Feb 92) LRust
        Fix RP-0609 and RP-0370.  Callback handler only entered if SVC stack is
        empty.  RTC day/months of 0 are forced to 1
3.07 (03 Mar 92) LRust
        Setup of printer buffer uses internal CMOS read routines, not OS_Byte
        which enable interrupts.  This prevents system hanging during start-up
        if keys are pressed.  Fixes RP-0990 etc.
3.07 (03 Mar 92) LRust
        Fixed OS_Word 11 to return palette data to r1+1, fixing RP-1429
3.07 (04 Mar 92) LRust
        OS_GSInit now only resets the evaluation stack (in system workspace)
        if the string contains a '<' character.  This prevents contention between
        high level calls to OS_GSTrans and low level use by FileSwitch while
        opening message files.  This fixes RP-1483
        OS_SetVarValue fixed to use XOS_GSTrans (was non X form)
        OS_SetVarVal now returns correct error if string is bad
3.07 (05 Mar 92) LRust
        OS_Confirm now reads Yes/No characters from message file.  The
        pointer shape to be displayed is now read from the Wimp sprite pool,
        RMA first followed by ROM, looking for 'ptr_confirm'.  Fixes RP-1449
3.07 (06 Mar 92) LRust
        OS_Byte 129,0,255 now returns version number &A4 (was &A3) fixing RP-1638.
3.07 (06 Mar 92) TDobson
        Sprite load/merge now only checks offset to first sprite is < length of file,
         fixing bug RP-0589.
3.07 (09 Mar 92) TDobson
        Don't reset keyboard on OS_InstallKeyHandler if we've only just got the
         keyboard ID.
3.07 (17 Mar 92) JRoach
        Postpone error lookup in ChangeDynamicArea to after the
         reconstruction of the RAM and System Heaps. Prevents double-mapping
         of pages resulting in a dead system. G-RO-5512.
3.08 (23 Mar 92) LRust
        OS_EvaluateExpression now returns R1 = 0 (no returned string) if the expression
          evaulated by GSTrans overflowed the internal buffer.  This ensures that *IF
          reports the buffer overflow error message instead of "not a string", fixing RP-1534
3.08 (01 Apr 92) TDobson
        Added code to switch into user mode and issue a dummy SWI just after Service_PostInit,
        so that any pending callbacks get serviced (fixes RP-1812).
3.08 (02 Apr 92) TDobson
        Added screen blanking code.
3.08 (03 Apr 92) LRust
        RMTidy copies errors during die to GeneralMOSBuffer to ensure not overwritten
        during re-initialisation.
3.08 (07 Apr 92) TDobson
        Fixed DebugHeaps code in ExtendHeap (used to overwrite data below base of heap).
3.09 (23-Apr-92) LRust
        * Fixed CTRL-Break/Reset causing CMOS corruption by doing 16 IIC
          start/stop sequences after reset to allow RTC to shift out any
          data requested.
        * IIC start sequence extended to allow BMU to detect a start.
        * IIC read/write now disable IRQs during clock and data hi times
          to prevent erroneous idle sequence detection by BMU.
3.09 (24-Apr-92) TDobson
        Removed range checking of buffer number in OS_Byte &15 (flush buffer).
3.10 (30-Apr-92)
        Disable interrupts around IIC receive to aid BMU start/stop detection
        by preventing idle periods (clock & data hi).

-- RISC OS 3.10 released to public --

3.20 (xx-Apr-93) JRoach
        Added read option to OS_SetColour

3.20 (15-Apr-93) TDobson
        Made OS_CRC return an error if increment is zero, rather than looping forever.

< lots of Medusa work >

3.21 (21-Jul-93) TDobson
        First Medusa release

3.22 (09-Aug-93) AGlover
        vdugrafg/vdugrafdec: Fix bug in putsprite|mask when LH edge obscured
        vdugrafh:            Fix bug in SwitchOutputToMask when calculating mask size

     (18-Aug-93) TDobson
        RMA, System heap, Sprite area, Font cache, RAM disc are now new-style areas.
        Sprite area, Font cache, RAM disc, Free pool maximum sizes are now dynamic (ie total ram size),
         and their base addresses are allocated at run-time.
        Doubly-mapped areas are now supported, but known bug exists if
         screen grows and needs pages in use by a doubly-mapped area.
        Spec change to OS_DynamicArea (Create dynamic area): if workspace pointer passed in is -1, the
         value used is the base address of the area (this is important if the base address is being
         allocated by RISC OS).

     (20-Aug-93) TDobson
        New addition to OS_ReadDynamicArea: if r0 on entry is -1 then
         information is returned on application space:
          r0 = base address (&8000)
          r1 = current size (excluding bottom 32K)
          r2 = maximum size (excluding bottom 32K)

     (23-Aug-93) AGlover
        vdugrafK: Ensure new format sprites aren't screensaved with palettes

     (03-Sep-93) TDobson
        Areas which require particular physical pages should now work.
        LateAborts assembly option added (untested).

     (03-Sep-93) SCormie
        Memory information SWI (OS_Memory) added (file MemInfo).
        Processor vector indirection added, including SWI OS_ClaimProcessorVector (file ExtraSWIs).

 -- Version 3.23 released --

     (17-Sep-93) AGlover
        (vdugrafdec, vdugrafj vdugrafk) Sort out screenloading of sprites with new mode format
        mode words (untested at present).
     (20-Sep-93) TDobson
        Screen is now a new style area.
        All old-style area code now removed.
        Fixed bug MED-00488 (composite sync inverted).
        Fixed bug MED-00583 (modes with line length > 4Kbytes didn't work).
     (21-Sep-93) TDobson
        Fixed bug MED-00395 (OS_Byte 70 and 71 corrupting r5).
        Made kernel enable cache and write-buffer again.
     (22-Sep-93) TDobson
        Removed old screen modes 47-51 and put in new modes 47 (PCSoft) and 48,49 (Games).
        Fixed DataControlRegister programming so that eg mode 29 works with 2M VRAM.
        Late abort option enabled.

 -- Version 3.24 released

     (01-Oct-93) TDobson
        After pre-shrink handler is called, round down shrink value returned to a page multiple.
     (07-Oct-93) TDobson
        Fix MED-00626: RMReInit should only write to CMOS if module was unplugged to start with
        (solves FSLock problem).
     (08-Oct-93) TDobson
        Bottom level DPMS control put in - byte at location &147D controls DPMS state on blanking.
        Modified OS_Word(&15,4) (Read unbuffered mouse position) to call PollPointer, so that if
         no flyback IRQs happen (because hsyncs have been turned off), moving the mouse pointer
         still unblanks the screen.

 -- Version 3.25 released

     (19-Oct-93) TDobson
        Fix MED-00523: Remove pointer if would be completely off LHS of screen, otherwise can
        upset display if it straddles hsync pulse.
        Fix MED-00637: Creating dynamic area of zero maximum size now works.
        Screen mode 32 changed to NColour=63 and ModeFlags=0, like all other numbered 256 colour
         modes.

 -- Version 3.26 released

     (21-Oct-93) SCormie
        *Configure MouseType should have called OS_Pointer.
     (25-Oct-93) SCormie
        NewReset now waits up to 1 sec for keyboard present.
     (25-Oct-93) TDobson
        Fix bug MED-00811 - initialise SpriteSize to zero on reset.
     (25-Oct-93) JRoach
        Fix bug MED-00680 - *Save syntax message not tokenised properly.
     (26-Oct-93) JRoach
        Fix bug MED-00570 - delete-power-on gives 1997. Problem was
        delete-power-on set base to 1994 and so when the modulo of '3' came
        out of the clock the kernel thought it had to be 1997.
     (26-Oct-93) TDobson
        Fix bug MED-00301 - mode selector block now alternates between two
        overlapping ones, so that returned mode number changes each mode
        change (although if someone goes eg M%=MODE:MODE 12:...:MODE M% it
        will use the block specified by M%).
     (28-Oct-93) AGlover : vduswis, vdudriver, vdugrafj, vdugrafk
        Bugfixing session on sprites. Major points:-
        Screensave works, and gives old format sprites where possible.
        Screenload works, and no longer believes the mode number in the
        sprite - it will always build a mode selector to suit the sprite.
        EIG 0 and EIG 3 sprites supported - fixes DragASprite leaving
        trails on-screen in these modes.
        Mode 32 is now the monitor type 4 256 colour substitute mode.
        GetSprite(User) ensures no LH wastage on new format sprites.
        Screensave now copes with saving a full entry 256 colour palette.
        Whenever possible GetSprite will make an old format sprite - if
        you must have a new format sprite make it first with CreateSprite.
        
      While there are four of us intermittently touching bits of the kernel
      please say which files you've actually altered. Thanks.           amg
      
      (03-Nov-93) AGlover : vdugrafj
        Change substitute mode numbers used for 90 x 90 dpi sprites to 25-28
        instead of 18-21.

      (04-Nov-93) JRoach : GetAll, Kernel
        Enable IncludeTestSrc and make Reset vector for resetting work in
        conjunction with the test source.

      (08-Nov-93) TDobson : vdudecl, vdudriver
        Complete kernel support for DPMS.

      (10-Nov-93) TDobson : source.pmf.osbyte
        Fix bug MED-00963: INKEY(-256) now returns &A5.

      (11-Nov-93) TDobson : source.vdumodes
        Fix bug MED-?????: mode 32 now same timings as modes 29-31.
        
      (12-Nov-93) AGlover : source.vdugrafg
        Fix bug MED-01112 : 32K/16M sprites not working with SpriteOp ReadPixelColour (41)
        Fix bug MED-????? : Correct the routine which bounces palettes on new format sprites
        
-- Version 3.27 build

      (18-Nov-93) AGlover : source.vdugrafh, source.vduswis, source.vdudriver, source.vdugrafj
        Fix bug MED-01130 : GetMaskSpWidth was going wrong when mask exactly fitten in a word
        Change handling of sprite type so that unknown types are handled as 32bpp - will make
        life easier for people adding new types that the OS doesn't handle.

      (23-Nov-93) AGlover : source.vdugrafg, source.vdugrafh, source.vdugrafi
        Fix bug MED-01281 : return an error when I should for spriteops given new format
        masks.
        
      (24-Nov-93) AGlover: source.vdugrafg
        Fix bug MED-????? : sprite name matching code was being broken by changed
        lowercase macro. Code now uses uk_lowercase which retains the original
        behaviour of the macro keeping the sprite stuff compatible with 3.10

      (25-Nov-93) TDobson: source.vdumodes
        Fix mode definition for mode 47 (PCEm mode 360 x 480) to have sync polarity 3,
        so it gives correct height on VGA-only monitors.

      (26-Nov-93) SCormie: Source.PMF.key, Source.PMF.osinit
        Keyboard driver and key handler now trigger each other correctly during reset.
        Change default serial threshold from 9 to 17.

      (30-Nov-93) AGlover: source.vdu23, source.vduwrch
        Fix bug MED-01141: Split CompileTextFgBg into two separate routines and only call
        the one actually relevant. This prevents spurious colour changes when a text colour
        set by OS_SetColour is changed using VDU 17 or VDU 23,17 (what used to happen is
        that because the Fore/Back Col and Tint words didn't produce the colour in use (which
        had been modified directly by OS_SetColour) it was replacing it with whatever the
        ForeCol and Tint produced. Note: Doing a VDU 23,17 before the first VDU 17 will still 
        go wrong - but I don't think it's worth fixing.

      (30-Nov-93) TDobson: source.vdumodes
        Change XEigFactor for games modes 48,49 to 2 (from 1) at the request of Ran Mokady.

      (01-Dec-93) TDobson: source.pmf.osword
        Fix bug MED-00355: OS_Word(&0F) no longer requires a terminating
        character after string (it now pushes the string on the stack and
        terminates it, before calling the TerritoryManager).

      (01-Dec-93) TDobson: NewReset
        Fix bug MED-01513: now prints eg "RISC OS 10MB" on startup.

      (02-Dec-93) TDobson: ModHand
        Fix bug MED-01229: now uses 8 bytes of unplug CMOS for podules, + 1 for network card

      (06-Dec-93) JRoach: NewReset
        Correct mouse step default to 2 for faster mice we'll be using.
               
      (07-Dec-93) AGlover: source.vdugrafj, source.vdugrafk
        Fix bug MED-?????: make sure screensave and getsprite(user) don't permit palettes
        on sprites which it can't force back to an old screen mode

      (09-Dec-93) TDobson: source.vdudriver, source.vduswis
        Use Roger's algorithm for default XEigFactor, YEigFactor for mode selectors.

      (13-Dec-93) TDobson: GetAll
        Set AddTubeBashers flag to FALSE.

      (15-Dec-93) TDobson: GetAll, NewReset
        Set DebugROMInit and DebugROMErrors flags to FALSE.
        Fix bug MED-01774: Change default FontSize to 64K.

-- 3.28 build

      (21-Dec-93) AGlover: source.vdugrafj
        Change screenload so that should the mode selector it made fail, and the
        sprite has a mode number, it will select that mode as a fallback. Note:
        this won't work fully until OS_ScreenMode correctly returns VS for a mode
        it can't do. Bug MED-01895.

      (21-Dec-93) OLove: Messages
        Changed 'Memory cannot be moved' error message.

-- New version 3.29 spuriously created by Owen Love 21-Dec-93

      (21-Dec-93) AGlover: arthur3
        Fix bug MED-01583 - *eval 9999999999999 was calling msgtrans twice to return error
          
      (06-Jan-94) TDobson: Kernel, Source.PMF.Key, SWINaming
        Added SWI OS_Reset - part of fix for MED-01397.

      (10-Jan-94) BCockburn: Middle
        Fixed Ethernet address generation to use the correct base
        (&0000A4100000) value rather than the value &0000A4000000 as found
        in the Dallas chip itself.

      (10-Jan-94) TDobson: source.vdudriver, source.vduswis
        Fixed bug MED-00563: invalid mode selector should return error from
        mode change, not select mode 0.
        If current monitor type is a file, now uses VGA substitute table for
        unavailable mode numbers - eg if you select mode 16, you now get
        mode 27, rather than mode 0.

      (10-Jan-94) TDobson: source.vdudriver
        Fixed bug MED-00483: "mode selector" not on a word boundary (eg
        sprite mode word) is now not offered round to Service_ModeExtension,
        so should now give error, rather than data aborts.

      (12-Jan-94) JRoach: GetAll
        Fixed bug MED-00585: configured language wasn't 10, and now is.

      (13-Jan-94) TDobson: GetAll, ModHand
        Introduced conditional flag RMTidyDoesNowt - if true (which it is on Medusa),
        then RMTidy returns having done nothing. This is because it would always
        fail anyway, because FSLock always refuses to die. Fixes MED-02125.

      (14-Jan-94) SCormie: source.PMF.osinit
        Changed combo chip configure sequence so that 710 configuration doesn't put
        665 into a strange state if receiving at the same time (caused chip to generate
        an interrupt which could not be cleared.

      (14-Jan-94) JRoach: Arthur2
        Changed GSInit/GSRead to use its stack memory as a wrapping buffer.
        This means GSInit doesn't need to flatten it before starting which
        means recursive calls the GSTrans work.

      (17-Jan-94) TDobson: ARM600, ChangeDyn
        Put in semaphore, so that OS_ChangeDynamicArea will fail if it is already threaded.
        (Data abort handler clears it, in case area handler goes bang!)

      (17-Jan-94) TDobson, AGlover: source.vdugrafj
        Fixed the 21-Dec-93 fix so it assembles and hopefully works!

      (18-Jan-94) TDobson: ARM600, Kernel, SWINaming
        Added soft copy for MMU control register, and SWI OS_MMUControl to update it.

      (19-Jan-94) AGlover: source.vdugrafg
        Fix bug MED-02210 - plot mask for 1bpp masks was going wrong when plotting clipped.
        
      (19-Jan-94) JRoach: NewReset
        Correct CMOS default for textured window background to match the CMOS spec.
        (The spec says set bit 7 of &8c to 0 to turn on textured window backgrounds).

      (19-Jan-94) JRoach: NewReset
        Correct CMOS default for desktop font to '8' which is still Homerton.Medium.
        Changed needed as Darwin has been removed and so the numbers change.

      (19-Jan-94) TDobson: ARM600
        Fixed bug MED-02452: make BangCamUpdate check if oldaddr=newaddr,
        and don't remove page from old address if so.

      (19-Jan-94) TDobson: source.vdudriver
        Changed notional operational range for VCO to 55-110MHz (from 40-80MHz).

      (21-Jan-94) TDobson: ARM600
        Changed ROM access speed to 156.25ns (from 187.5ns)

      (21-Jan-94) TDobson: source.vdudriver
        Changed ComputeModuli to only use R-values up to 16 (not 64), to
        improve minimum comparison frequency.
        Change FIFO load position algorithm to use table produced by Peter
        Watkinson.

      (24-Jan-94) TDobson: GetAll, source.vdudriver, source.vduswis
        Conditionally reversed change to XEig/YEig algorithm back to what it was
        in 3.27.

      (25-Jan-94) TDobson: source.vdudriver
        Fixed FIFO load position table to use correct units.

-- New version 3.30 created by JRoach

      (28-Jan-94) AGlover: syscomms, source.vdugrafj
        Fix bug MED-01570 (syscomms), and various bugs reports involving 
        1bpp 2 x 2 eig modes (vdugrafj: sanitizesgetmode was mishandling
        double pixel modes)

      (28-Jan-94) TDobson: source.vdumodes
        Update kernel's hard-wired mode tables to use new VCO range.

      (28-Jan-94) TDobson: TickEvents
        Fixed bug MED-02498: OS_CallAfter/Every and OS_RemoveTickerEvent problems.

      (31-Jan-94) TDobson: TickEvents
        Fixed register corruption in above fix.

      (01-Feb-94) AGlover: hdr:sprite, vdugrafdec, vdugrafj, vdugrafk, vdugrafl 
        Fix bug MED-02160. Make switching output to, and screenloading of, a
        256 colour 8bpp sprite work. The hdr change is because the value of 
        MaxSpritePaletteSize has been updated.

      (03-Feb-94) TDobson: ARM600, ChangeDyn, GetAll
        Fix bugs MED-00793, MED-01846. Dynamic areas which may require
        specific physical pages must now have a new bit set in the dynamic
        area flags. As a result, other areas can perform large grows in one
        chunk, rather than being split up, because it is not necessary to
        set up the page blocks etc. Therefore a) dragging RAMFS bar is much
        faster and b) there's no chance that intermediate reinits of RAMFS
        can steal pages that were to be used for subsequent chunks.
        
-- New version 3.31 built by TMD

      (08-Feb-94) AGlover: source.vdugrafh
        Fix bug MED-01885. WritePixelColour wasn't working correctly for
        8bpp full palette sprites.

      (09-Feb-94) TDobson: Messages
        Fix part of bug MED-02389 by changing system heap full message.
                                   
      (10-Feb-94) AGlover: source.vdugrafh
        More on MED-01885. AddTintToColour decides what to do by NColour, rather
        that SprRdNColour which is correct for Write/ReadPixel in sprite.
        Set NColour to SprRdNColour for the call and then restore it afterwards.
        The scope of the bug was more than first thought - it affected writing to
        any 8bpp sprite in anything other than an 8bpp screen mode.

      (11-Feb-94) TDobson: NewReset
        Limit maximum size of RAM disc to 16MB, because FileCore can't cope
        with some larger sizes.

-- New version 3.32 built by TMD

      (14-Feb-94) TDobson: NewIRQs
        Fix bug MED-02859 - Unknown IRQ code now copes with DMA IRQs.

      (17-Feb-94) AGlover: source.vdugrafk
        Fix bug MED-02895 - *screenload was discarding the error pointer
        on an error return from WritePaletteFromSprite
        
      (18-Feb-94) AGlover: source.vdugrafj
        Secondary fix for MED-02895. WritePaletteFromSprite was actually
        destroying the error pointer. Remove the change to vdugrafk.
        
====> Medusa OS build <==========================================================

      (28-Apr-94) AGlover: source.vdugrafj
        Fix screenloading of 8bpp non-full palette sprites (deferred fix from Medusa
        freeze). MED-03186
      (28-Apr-94) AGlover: source.vdugrafh
        Fix spriteop readpixel for 256 colour full palette modes (deferred fix from
        Medusa freeze). MED-03090
      (28-Apr-94) AGlover: source.vduswis
        Fix readmodevariable returning 63 instead of 255 for a sprite mode word.
        MED-03265
      (25-May-94) AGlover: source.vdugrafg,j,k
        Changes to allow palettes on new format sprites of 8bpp and below. Also
        William Turner's vdugrafh,i.
        
**** this has been superceded by the +log file - no further entries here.
(amg: 21st September 1994)
        