The changelog tries to follow https://keepachangelog.com/, with the following definitions used for the sections:
- Security: Changes which affect security (whatever type of change they might be).
- Added: New features, or implemented functionality.
- Changed: Existing features, or interfaces, which have been updated. Unless it's a large functionality change, stubs being implemented or made configurable fall into this group.
- Fixed: Bugs in the implementation which have been addressed. This does not include the addition of missing functionality unless that functionality was meant to be present.
- Removed: Features or implementations which have been removed and are no longer present.
Internal and design changes are not documented here, unless they impact the behaviour of the system.
0.17 (01 Nov 2020)
Added
- We now have an IRQ stack, for timer routines to execute on.
- OS_ResyncTime is now stubbed.
- OS_Word 11 is now able to read the palette.
- Configuration for paging mode
shift
allows the shift key to trigger moving on to the next page when paged mode enabled. - Screen banks are supported in the graphics system, and implemented in the Cairo implementation.
- WxWidgets and GTK 'Edit' menu now offers option to copy the screenshot to the clipboard.
Changed
- Errors from the error system (like error pointer being 0) now report warnings to the trace system.
- When interrupts are disabled, we now trigger ticker events at switching points like SWI calls and exceptions (previously ticker events would only be triggered at key reads).
- VDU cursor state used by VDU 23,0,10 and VDU 23,1 is now tracked.
Fixed
- Errors setting configuration values should always report as ConfigurationErrors (previously might report python errors with traceback).
- Ensure that callbacks happen on python SWI calls which would return to user mode.
- Service debug now reports the service names as
<name not known>
when names are not known (previously would report asNone
) - Timer operations now ensure that the V flag is not set (previously could report errors accidentally).
- KeyV generation now works properly for cursor keys (previously would generate the wrong codes in *FX4,2 mode).
- Vertical character output was not writing the text properly (previously would write some text horizontally).
- WxWidgets will no longer generate errors if the About window is open on termination.
- OS_ReadPoint now reads the correct point (previously would read the pixel above that requested).
- Hourglasses turned on and off rapidly no longer report exceptions.
- Hourglass_Start 0 will now start immediately (previously would wait until a tick event was checked).
0.16 (03 Oct 2020)
Added
- Debug can now report when SynchroniseCodeAreas is performed.
- SWI executions called from IRQ modes now report a warning through the trace system.
- Keyboard disable, Caps Lock and the keyboard status byte are now supported within the key system.
*NoURD
,*NoDir
and*NoLib
(and their correspondingOS_FSControl
s) are now implemented.*Count
now supported, although without the confirmation option.*Free
now supported, together with theOS_FSControl
49 and 55 SWIs.- New OSPointer module provides the
*Pointer
command and configures its shape and colours. - Hourglass 'pointer' implementation now provides a standard RISC OS pointer in the graphics UI implementations.
*HOn
/*HOff
are now provided by the Hourglass module.- SoundDMA stub module allows configuration to happen, but does nothing.
Changed
- SoundChannels now announces on initialise and finalise, and issues
Service_SoundControl
on sounds. OS_Confirm
now programs the pointer shape and acts on mouse clicks.- SoundChannels debug is now
soundchannels
(previously wassound
). SOUND
now honours the undocumentedOS_Byte 210
sound suppression flag.
Fixed
- Tracepoints no longer exception if no trace points have been identified.
- SWI execution should now always happen in SVC mode (may previously have executed in caller's mode).
- Invalid network interface names now report an error (previously would report a traceback).
- WxWidgets UI 'About' box now wraps license text (previously would result in a very wide window).
- Running directories now correctly tries the
!Run
file (previously would try running%s.!Run
). - GTK window is now sized properly in OSX UIs (previously would leave an empty block at the bottom of the window).
- Default screenshot save directory in WxWidgets UI is now the current working directory (previously would be the last directory used).
- Hourglass 'vdu' implementation now prints messages (previously would be identical to the 'null' implementation).
Hourglass_Colours
will now select the colours for the hourglass (previously would generate an exception).
0.15 (30 Aug 2020)
Added
- ANSIText VDU implementation can now be configured to change terminal size.
- Filesystem can be configured to always return the same timestamp on files.
- Windows network interfaces are now enumerated with approximate flags.
- Introduce API warnings for
OS_IntOn
/OS_IntOff
,OS_EnterOS
/OS_LeaveOS
andOS_SynchroniseCodeAreas
. - TickerV is now supported.
- Dotted line patterns are now supported in cairo graphics implementation (continuations and end point elision are not supported yet).
OS_SetECFOrigin
is now supported, although it is not acted upon.OS_SpriteOp
stub implementation is now provided for some operations.- GTK and WxWidgets menus can now reboot the machine and save screenshots.
- WxWidgets button click events are now similar to those that are generated by GTK.
OS_Byte 106
andOS_Word 21
to control the pointer shape and parameters are now supported.- Pointer shapes are now handled internally, and passed to the GTK and WxWidgets UI to be used as cursor shapes (configurable).
OS_FSControl 21
to read internal handles is now supported.*EnumDir
is now supported.Territory_WriteDirection
now implemented and can be configured to return different flags.
Changed
- UserV now reports through VDU, and is configurable.
OS_BGet
now reports EOF, and then an error on the second call at end of file (previously would repeatedly return EOF).- Graphics windows is now honoured in the cairo graphics implementation.
- Windows console input now supports cursor and function keys, as a configurable option.
- Windows console input no longer blocks (timers are triggered whilst waiting for keys).
- Windows and Linux WxWidgets have a corrected key map, so should be able to handle key presses on the graphics window.
- WxWidgets now has a redraw rate control in the same style as the GTK graphics implementation.
- WxWidgets About dialogue boxes are now more standardised and include centrally sourced information.
- Mouse positions is now updated in both GTK and WxWidgets.
- GTK and WxWidgets menu implementations have been made more consistent.
- Network interface handling has been reworked to be more flexible when used on Windows, Linux and macOS.
*PyromaniacConfig
can now be given a-help
switch to get more information about the configuration options.- MessageTrans is now a module in its own right, and can read Messages files (configurable).
- Trace reports now include interesting pointers in the 'Locations' section.
- Tracing SWIs now ignores SWI reports for OS_Write*/OS_NewLine SWIs (configurable).
- The
--set-variable
configuration is now applied before ROM modules are loaded (previously would be assigned after the ROM modules).
Fixed
- Backtraces from Python will now appear properly formatted in ANSIText mode (previously would appear staggered due to the raw newline output).
- Filesystem interfaces correctly skip leading spaces (previously would be truncated at space in most APIs)
- The native filesystem directory is checked for existance on configuration (previously would traceback on first use if the directory was invalid).
- Modules being replaced now uncache their data (previously would still remember the SWI base for dispatches).
OS_GSTrans
now propagates the terminator from the input string to the output string (previously would not terminate the string at all).OS_ReadArgs
will now process/E
and/G
through EvaluateExpression and GSTrans respectively (previously would just pass through)ColourTrans_SetGCOL
should now report the log2bpp in R2 (previously would be corrupted).- Draw strokes are now rendered correctly when a transform is in use (previously would be transformed incorrectly by the offsets).
- Draw transform offsets are now applied correctly (previously would not be scaled correctly).
- Can now start on Windows (previously would fail initialising trace due to unnecessary use of /dev/null).
- Windows WxWidgets should not generate exceptions (previously had some typing problems).
- Windows WxWidgets 'Exit' option now appears on the menu (previously there had been no File menu).
- Windows WxWidgets should now open in the centre of the screen only on the initial open.
- Graphics character rendering in Cairo now positions characters properly when not-1:1 scaling (previously they would appear offset).
- Mouse buttons are now reporting correctly from both GTK and WxWidgets.
- Rare exceptions due to negative timeouts in the sound system no longer cause exceptions.
- Rare exceptions due to negative timeouts in the WxWidgets system no longer cause exceptions.
- Documentation link no longer gives exceptions if it is clicked.
- Rebooting the system no longer disables key input from the UIs.
*Vector
no longer reports a backtrace if you give an invalid name.- Temporary stop (TSTP; ctrl-z) on a console will no longer give an EINTR backtrace.
0.14 (02 Aug 2020)
Added
- Configurable run time limit to stop execution after a limited period.
- New configuration options to set limits on the depth of SWI recursion, and change the internal Python recursion limit.
- Execution trace points can be registered, allowing reports of the system state when the registered code is executed.
- SWI traps can be registered, allowing reports of specific SWI calls, rather than reporting all SWIs.
- Trace reports now include a C backtrace after the register locations.
*Vector
is now provided by the Debugger module to list the currently claimed vectors.OS_Heap
claim and free can now clear their memory (configurable).OS_ChangeEnvironment 33
now returns the command line buffer address and its maximum size.- Key repeat delay and rate are now implemented in the key input.
- Key handling can now be configured to be forcibly enabled when outside the UI system, allowing KeyV to function without a UI (previously the key handling would only ever take effect if a UI was used).
- Tab character redefinition with OS_Byte 219 is now honoured.
- Escape key effects changes with OS_Byte 200 is now honoured.
- New configuration action to input text into the keyboard buffer.
- Minimum widths can now be set on the graphics UI to scale up low resolution modes.
- Graphics UI now has configurable border size and colour.
- LegacyBBC now provides a SOUND (OS_Word 7) and ENVELOPE (OS_Word 8) implementation, although the latter is just a stub.
- SysLog module has been created, for local logging.
*Sound
is now supported by the SoundChannels module.Territory_ReadCurrentTimeZone
,Territory_ReadTimeZones
,Territory_ConvertTimeToUTCOrdinals
,Territory_ConvertTimeToOrdinals
andTerritory_ConvertOrdinalsToTime
are now supported.
Changed
- Command line buffer length is now 1024 byte, and is now configurable.
- Help text for UtilityModule is now
MOS Utilities
to match RISC OS Classic. - Help text for Podule is now
Podule Manager
to match RISC OS Classic. - GTK windows will now open at the front of the stack (configurable).
- GTK and WxWidgets start with a cog icon in the dock on macOS (previously would use the Python launcher icon)
- GTK and WxWidgets UIs now close RISC OS when the UI window is closed (previously would leave RISC OS running).
- WxWidgets UI now passes key presses to RISC OS.
- Gap modes (and BBC gap modes) now have the correct character spacing, and clear the screen as expected (previously would not apply any spacing changes).
- ANSIText VDU implementation no longer honours the newline output format (it could produce inconsistent results).
*Copy
now supports the restamp and disabled attributes flags.
Fixed
OS_EvaluateExpression
now understands that variable names can be given in the expression (previously variable names could not be parsed).OS_SubstituteArgs
will now preserve quotes around arguments (previously they would have been stripped).- Resizing application space to 0 is now effective (previously it would leave the memory mapped in).
- Trace stack depth now indicates IRQ mode with an
I
(previously would be unrecognised and would appear as anx
). OS_Args 0,0
now returns temporary filesystem 0 ('None').- Error handler
pc
value is now populated in the same way as RISC OS Classic, from the top of the SVC stack, which is now populated by the abort handlers (previously would report the pc as the pycall address for the default error handler). - WxWidgets UI now resizes properly when a lower resolution mode is selected (previously would assert and the window would be left misplaced).
- Ctrl-C when the WxWidgets UI is in use will now generate escapes (previously would terminate the system).
- GTK UI distinguishes the left and right Alt keys (previously would report only the left key as the right key).
- Cairo output in GTK and WxWidgets UIs should now be crisper (previously would smooth when upscaling).
- When stdin has been redirected from
/dev/null
we no longer busy wait (previously would run continually due to an EOF condition). OS_ReadUnsigned
now skips leading spaces (previously would report an invalid string).OS_Heap
describe operations no longer abort with a backtrace.*Ex
no longer gives backtrace when listing an empty directory.*Exec
no longer fails when used a second time (would give a backtrace due to invalid use of NoneType).*ChannelVoice
now reports voice numbers invalid in more helpful ways (previously would fail with a traceback).- Linefeed in ANSIText should now move to the next line (previously it would function as a CR/LF sequence due to the terminal post processing).
- Fix for hang in VDU system when characters output at the right edge of a window.
DDEUtils_ThrowbackSend
no longer gives backtrace when bad pointer given, or invalid filenames used.
0.13 (30 Jun 2020)
Added
*Help OpenFiles
now lists the file system streams that are open.*Build
and*Append
are now supported.Socket_Recv
is now supported.
Changed
- Wimp_ReportError now issues Service_WimpReportError when invoked (previously, it didn't).
- OS_Find can now open directories and returns a useless handle for those cases; honours the bit to disable opening directories.
- OS_Find 'must open' flag is now supported, returning errors when the file doesn't exist.
- OS_Find stream information flags are now supported (for Read, Write, Directory, Modified)
*Copy
honoursCopy$Options
as the default options to use.*Copy
supports the recurse ('R') and force ('F') options.- SVG output from Cairo will now be filtered to output 'image-rendering: crisp-edges' to improve rendering in Firefox (ineffective in Safari and Chrome).
- UI input using ctrl-alpha now generates a control key code.
- GTK key mapping now works for
[
,]
,{
,}
,-
,+
and a bunch of other related keys.
Fixed
- OS_Find now locates files referenced by path variables properly (previously would report anything on a multi-element path as not existing)
*Copy
correctly parses arguments and handles variable expansion (previously multiple spaces would confuse it and system variables were never expanded).OS_SubstituteArgs
/OS_SubstituteArgs32
now correctly processes%
characters not followed by an argument number.- Off by one errors in rendering lines in graphics modes fixed (previously would omit the last pixel of some lines).
- VDU 127 now correctly erases characters in graphics modes (previously just moved back a character).
- RMA corruption caused by the
Resolver_GetHostByName
allocations has now been fixed (previously would write a 0 over a heap length word) *SetType
no longer processes only the first characters of the type as hex numbers (previously would set type to &A when the stringAMU
was given).- VDU 127 correctly deletes characters in graphics implementations.
0.12 (04 Jun 2020)
Added
- OS_Byte now outputs debug on the
osbyte
setting. - Input now processes ANSI escape characters for function keys and cursor keys.
- Input now decodes UTF-8 input into the alphabet and inserted into the buffer.
- OS_Byte 4 is now implemented, and can switch between cursors generating codes and function keys.
- OS_FSControl 26 (Copy) and *Copy implemented for limited sets of options.
- OS_AMBControl is now implemented, and functions similar to (but not identical to) RISC OS Classic.
*FileInfo
is now implemented.*X
,*AppSize
,*FreePool
and*IfThere
are now implemented in BootCommands.- All implementations (or invididual systems) can be listed with
--list-implementations
or--list-implementations <system>
. - Graphics system now supports the HLineAddr entrypoint.
- OS_RemoveCursors/OS_RestoreCursors are now defined (but do nothing; we still don't have a flashing cursor).
- Service_ModeExtension, Service_ModeChanging, and Service_ModeChanged are now issued, and extension modes are selectable.
- Rendering in DoubleHeight text modes should now work (just mode 23).
- Dynamic Area clamps are now supported.
Changed
- Enabled key input from the UI systems.
*Info
is now configurable whether it usesSys$DateFormat
or not.*Info
output alignment is slightly different to match up with*FileInfo
.- Internal emulation SWI calls are now hidden from trace.
- Hourglass implementation Console now writes to stdout, and new implementation VDU writes to VDU stream as console used to.
- Released 'pyro' tool now defaults to using the user's current environment (previously would isolate itself in a virtualenv).
- Mode configuration may use a fallback if the mode is not valid on startup.
- Cairo no longer defaults to saving images on exit.
- Cairo can now save images in PBM format.
- Shifts on arithmetic and memory operations are now capitalised in disassembly.
- Environment handlers can now be used when read with OS_ReadDefaultHandler.
- Exception messages (Data abort, prefetch abort) now include the region name by default.
*ShowRegs
includes information about the code near the PC, and includes the IFSR and DFSR information in the output.
Fixed
- Basic Pyromaniac functionality now runs on Windows (previously differences between it and POSIX would cause it to fail to initialise).
*GOS
no longer allows parameters to be passed to it (which would be ignored).*Echo
no longer terminates in a 0 byte (previously*Echo <22><0>
would fail to select mode 0).- Unknown SWIs now report the correct error number (&1E6).
- SPSR is now set correctly on entry to SWI calls (previously would not be updated).
- ROM module enumeration now starts properly (previously starting enumeration would immediately return 'No more modules').
- VDU 127 now deletes characters (previously would be ignored).
- Terminal cursor shape is now reset in ANSIText mode if it had been changed (previously would be left in changed state)
- Vector calls should now correctly return the flags (previously most cases would preserve flags from the caller).
- OS_File 5 and friends no longer report an error for files in an unknown directory.
- OS_ReadVduVariables returns correct values for 0s (previously was returning -1).
- OS_Byte 135 no longer crashes when used with the Cairo SVG image format.
- Video directory is only created when enabled.
- OS_Plot operations should be more accurate (previously there were a number of off-by-one errors in positioning of graphics operations).
- VDU 4 character plotting of backgrounds off-by-one fixed (previously left a line unfilled behind characters).
- CLS will now clear to the edge of the screen (previously left a line unfilled on the right of the window).
- Read text character at cursor can now read characters in 256 colour modes.
- Invalid size and hex configuration now report a configuration error (previously gave Python errors).
- Fix for OS_ReadVduVaribles WindowWidth and WindowHeight off by one (previously would return the number of characters, not maximum offset).
- Fix for VDU colour invert and tint colour changes not affecting ANSIText output.
0.11 (03 May 2020)
Added
- Warnings are now generated when module syntax messages do not start with
Syntax:
. - When entering modules, they are now marked as preferred.
- Environment change debugging is now available under
envchange
. - ClipboardHolder provides multiple implementations (null, static, pyperclip, posturl).
- DDEUtils provides the Throwback SWIs, with implementations for console output, null and posturl.
- TRACE.md document created to describe the trace output from the system.
- Podule manager added, which can build a chunk directory for RISC OS Select 32bit ROMs, and has rudimentary support for the RISC OS 5 ROM format.
- Module initialisation now tries to load modules from Podule Manager.
- Added support for unplugging modules in the configuration.
- Transient callbacks and timer events are now recorded into traces when they're active.
- Added help text reporting for configuration groups and options.
- Warnings can now be generated for SWIs which generate errors from SVC mode, or which could generate errors (non-X SWIs called from SVC mode) in the trace output.
- Dynamic Area Heap (including RMA) corruption or misuse now reports trace output, describing how the location was reached and the state of the heap blocks.
- International module provides BBC font definitions and alphabet definitions;
*Alphabet
is now implemented. *Spool
/*SpoolOn
are now implemented.*PyromaniacHostCommand
allows running of commands in the host system, with output configurably converted from ANSI colouring to RISC OS colouring.*PyromaniacFeatures
is now a command, not just a*Help
command, which shows the system features.*Do
is now implemented.- Wimp_ReportError is now provided by implementations and provides a UI variant using EasyGUI.
Changed
- ClipboardHolder preserves the filetype in the
*ClipboardHolder_ToFile
command. - Command line option
--register-internal-modules
changed to--load-internal-modules
to be more consistent. - OS_Memory 8 (read amounts) is now configurable, rather than reporting static values, and can dynamically calculate the memory that has been used from the system configuration.
- OS_ReadSysInfo platform class flags are now configurable, rather than being static.
- Tracing of LDRB is able to report strings referenced by the source register, configurably.
- Diagrams now use fallback fonts which look similar to Optima.
- Dynamic Areas Heaps (including RMA) now resize when they become full.
*ROMModules
outputs a slightly different string due to the more consistent naming for ROM sections.- Locations described within the trace output may now include more checks for function signatures and give offsets from a nearby signature.
- Exceptions, errors and warnings reported in the trace output now include the location of the pc and link register, if they are aligned within existig address space.
- Interrupts from timers are now disabled by default, as these are buggy.
Fixed
- Internal aborts caused by memory writes now correctly report as writes (previously reporting as reads)
- Internal aborts caused by memory reads should now report as aborts (previously they might still give a python traceback)
- Module prefix checks on CLI, like
Run:cc
, no longer cause a failure to match the command line because there isn't a matching module (egRun
isn't a module name). - ROM modules are now correctly preceded by their length.
- Configuring EOF as
exit
now correctly exits supervisor (previously would have looped forever). - 'Safe' strings reported in error messages and trace output are now 256 bytes long (previously were 128 bytes).
- Parsing in GSTrans fixed to handle space termination properly within variables, and to correctly pass through
<>
. - Doubly mapped dynamic areas are now disallowed (previously they were allowed but would only be singly mapped).
- EvaluateExpression handles binary operations on different types (number and string, and vice-versa) more consistently with RISC OS Classic.
*Unset
no longer reports errors when the variable isn't found.- Character reading no longer fails when the stdin is a pipe.
- Trace addresses now appear correctly when they take up 8 characters (previously would expand to 9 characters).
- Numeric configuration in the configuration files is now parsed correctly (previously hex values would be reinterpreted from their decimal representation).
- Address space allocation messages are now more specific that it is address space which was unavilable (rather than a lack of heap space, for example).
- RMA allocation, free and extend have now been tested and numerous corner case and negative conditions are now reported better.
- RMA operations should now report the correct error numbers.
- DynamicArea operations should now report the correct error numbers.
- Callback handler is now correctly called (previously, would not be called)
- OS_CallAVector now returns flags properly, which was causing ReadLine module to always report Escape.
- Registered allocations are now in use for the OS_Byte 129 and platform class.
- Pyromaniac hardware error numbers are now registered, and so have moved.
- Console input is no longer flushed when using the native readline (previously prevented pasting of multi-line text).