What happened in 2022?
There were a lot of different areas that were worked on in RISC OS Pyromaniac in 2022. The changes tend to follow a few strands which change over time. Invariably the strand that I start working on gets a good deal of attention before being completed or overtaken by something more important or more interesting. This way of working usually means that a block of work gets completed to a reasonable standard, or parked as an experiment on a branch until it can be completed. Some experiments never work out - that is the nature of experiments - but others become key to the rest of the system.
So generally these strands fit into a more general theme that gets worked on because it is necessary or just interesting due to someone discussing the feature. Then either the theme gets expanded or drifts into something else. I will go into more detail in the later sections, and the full list of changes is available on the main Pyromaniac site. Here are some of the headlines of what happened after the 2021 presentation through 2022...
Theme: Quick hacks
- CompressJPEG was added, supporting all the main SWI calls except Transcode.
Theme: Block devices, Classic API interfaces, Quick hacks
- Block devices - ADFS, CDFSDriver, CDFSSoftPyromaniac.
- Can now use the Classic FileSwitch+FileCore with the ADFS module accessing a disc image (either a raw disc image or a RPCEmu disc image).
- Can now use Classic CDFS with CDFSSoftPyromaniac, using ISO images.
- ShareFS lets registrations happen to track the state of file shares.
- Experimental: Joystick module
Theme: Classic API interfaces, Investigating issues, Speak, Unicorn 2 testing
- Freeway tracks the registrations locally.
- ShareFS now announces its tracked shares with Freeway.
- The InetServices module was added to allow the Classic Select Internet module to be loaded properly.
OS_Heapfixes for some pathological cases that had caused problems in the desktop demos last year.
- Better debugging of the
OS_Heapoperations to make it easier to trace problems.
- Speak module, which can use the host interfaces to perform text-to-speech operations.
- Alternative values for the low memory to allow zero page dereferences to be clearer.
- ResourceFS with tracking of file registrations, to allow testing of components that need ResourceFS registrations (like Internet 7).
- Testing with Unicorn 2 now works, and when we move to it we'll be able to select which CPU we're using.
Theme: Classic API interfaces, Improved UI, FanController feedback, Jan Vibe archive
- Significant extensions to the SysRq interface, so that it is possible to display the system state in the UI. Some of the initial data tables were created here, like the graphics, modules and DAs.
Portable_ReadSensorwas added after testing code for the new FanController driver modules that Chris Johns was creating.
- WebColours module, so that it's easier to use my presentation tool.
- Lots of testing with the Jan Vibe archives to improve the graphics and VDU system to match the original - VDU operations, mode operations graphics, Draw, and some Font operations were fixed as part of this work.
- The sprite system supports reading a sprite from the screen, as part of the improvements for Jan Vibe.
- To make the desktop feel more responsive, we now issue the UpCalls for modified files.
- The filesystem can now have disjoint paths in the host filesystem, with paths being served from a different area of the disc if required. This was largely intended to allow us to have shared resources like the compiler or application resources in one place, but the working data in a different place on the host system. Trying to allow a more docker-like volume mounting system.
- The middle mouse button, which is hard to use on the laptop, is now able to be triggered through a meta key.
Theme: Improved UI, Internet 7 testing
- More data tables were added in WxWidgets, and the necessary functions to access their data, through SysRqs.
- The testing of the Internet 7 module continued, and to try to make it more clear when there were problems, new debug options were added to try to understand the ticker behaviour. New
*TickerStatscommands let us see more information about the ticker environment and hopefully tell when the system is being unnecessarily loaded.
- Some more of the module services were issued properly, to allow the old Select modules to be loaded.
- The TWIN module now offers a
*Editcommand to launch the host editor - either in the console or in the WxWidgets environment.
- WimpReportErrorBox is now provided as an implementation in WxWidgets, which means that our error box can appear in the host system, with standard error icons.
- To go with the WimpReportErrorBox we also have the
OS_Confirminterface which can provide a box in the host system.
Theme: Improved UI, Internet 7 testing, Interfacing with host hardware
- More filing system statistics, reporting the number of operations of each type on files within the system.
- TCP servers were added for the implementations of the KernelDebug and ParallelDeviceDriver. This makes it possible to connect to RISC OS Pyromaniac and get output through a socket.
- Part of the Internet 7 debugging needed to fake sparse dynamic areas, and this finally became a feature of the system. The area isn't really sparse, but it pretends to be, enough that clients can work.
- A WimpSpritePool module now handles the sprite pool operations for the Wimp. This provides simulations of the
Wimp_ReadSysInfocalls to allow us to test code that uses these.
Wimp_ReportErrorsystem uses the sprite pool operations to render the application sprites.
- The SystemBell can now use the UI bell, rather than the console bell.
- IIC had been hard-wired to provide simple registered handlers - only the PCF8583 was emulated to allow NVRAM operations - but now we use implementations, and have an IIC implementation for the MCP2221 USB device. This means that we can talk to real IIC devices. Lots of devices were tested through this interface, and the implementation and interfaces improved.
Theme: Interfacing with host hardware, Quick hacks
- GPIO module was created, which allows access to devices through implementations. Some of these were virtual, but a couple of the IIC and USB-based GPIO expanders were tested.
- With the introduction of real IIC and GPIO devices, much of this month was spent testing and trying out different devices.
- The IIC devices, and access to USB systems, made it possible to access alternative display systems like OLED displays. These displays were given a more abstract interface called a 'FrameDevice' which they could be connected through, and they only had to support partial frame updates in a regular manner.
- Testing with Paolo this month showed up missing interfaces in Territory, so these operations were expanded.
- Similarly, demos during the ROUGOL meeting showed problems with the block copy/move operations inverting, which were fixed.
- Experimental: SpellMod module created, with multiple implementations.
Theme: Interfacing with host hardware
- The OLED frame display was improved further with rotations and flipping, which was common to most of the graphics frame buffers.
- RTCV was finally implemented, so instead of being entirely internal, the RTC calls now go through the vector as they should. We fall back to the host system, but this was tested with the DS1307 IIC-based RTC device.
- With the RTCV, we can now write the time, and the system will keep time relative to what was written.
- GPIO system was extended with new implementations for the PCF8574, MCP23008 and MCP23017, allowing more ways to access GPIO than we had previously.
- Experimental: PWM driver implementation for the SN3218 and PCA9685.
- Experimental: Analog devices module for managing ADCs.
Theme: Interfacing with host hardware, Improved test coverage
- Over the prior months, the test coverage had been slowly reducing as the hardware-specific Python code was added. In this month, there was more focus on trying to improve the test coverage and make sure that the new features had some testing present. The goal was to increase this to above 70%.
- A few real hardware device implementations were added to allow us to control more things...
- The prior RTCV work meant that some of the other IIC-based RTCs could be made to work as well - the PCF8563, PCF8583 and DS3231 now have driver modules present.
- The CP2112 USB IIC/GPIO device had an implementation created, so both IIC and GPIO can be driven through it.
- The CH341 USB IIC/GPIO board had an implementation created for the IIC as that was easier.
- The Raspberry Pi IIC/GPIO gained support with implementations provided by the
- To allow the serial system to write to a real serial device, PySerial can be used as an implementation to talk to hardware devices.
- Resolver expanded to support Hosts files to make it easier to test certain behaviour. The implementation was made a lot more resilient.
- Experimental: Stub Euclid module started.
- Experimental: Separate out the PCF8574 and PCF8575 GPIO implementations.
Theme: Interfacing with host hardware, Improved UI
- With some access to hardware IIC interfaces implemented, it was handy to improve the internal systems to allow those IIC devices that could be used to be faked by the system. Like the PCF 8583 which provides the RTC + NVRAM, other devices can be emulated, just by providing an implementation that matches their datasheet.
- IIC internal device implementations were created for the AHT10, LM75, MCP9808, MAX30205 and MCP4725.
- The GPIO implementation for the CH341 interface was finally created.
- The WxWidgets UI now can show a console window so if Pyromaniac is launched as an application without a console output, it can still show some console information within the host environment.
- We now have the 'Killing the UtilityModule is foolish' error message back.
- As an experiment, the graphics output was given the option to create PDF files - and it worked on the first test.
- Experimental: EasySockets branch gained some tests and fixes for writing lines.
Theme: Improved UI
- The WxWidgets UI was improved to add more functionality to the user interface, to make it easier to find the information when used within the host environment.
- Data tables now have a menu option for saving, copying to the clipboard and refreshing.
- Memory views have been added to allow regions of the system memory to be displayed within the interface. Specifically, each module, dynamic area, and AMB can be viewed. A similar view is provided for the NVRAM memory.
- To go with the memory view changes, the Debugger is now able to show the display disassembly in colour.
- The dumping view and the disassembly interface are available through GitHub.
- The UI window can be resized and will scale appropriately, which also gives us the ability to make the interface full-screen.
- A special GPIO implementation allows the state of the GPIO pins to be displayed (and changed) in the WxWidgets UI through a dedicated window.
- Better integration with macOS, supporting clicks on the dock bringing the window to the front.
- An experimental PyromaniacWimpDebug module for reporting information about tasks and wimp messages was created. Not quite suitable for regular use though.
Theme: Improved UI, Internet 7 testing
- The WxWidgets memory view menus were expanded to include functions for searching, and some key shortcuts.
- The WxWidgets and GTK UI can paste from the clipboard to the keyboard buffer, with the associated SysRq commands.
- The WxWidgets UI can browse the files within the filesystem using an explorer window, and the associated SysRq commands to access the file system. The implementation of the explorer is published on GitHub.
- Also in the WxWidgets UI, we can open a Python shell in a window to examine the state of the system.
- Experimental: DCI4 driver tested more against Internet 7.
Theme: Git, Improved UI, Classic API interfaces
- More testing of parts of the system, and extra support in the pyro.py tool to allow variables to be set to non-UTF-8 values.
- Data tables in the UI for Tickers and timers.
- Some fixing and merging of the PyromaniacGit module which has been created 2 years earlier.
- TimerManager (and the
OS_ClaimDeviceVectorsystem) provides the ability to set up timer events, just like RISC OS Classic.
OS_PrettyPrintfinally supports custom dictionaries in the external interface.
- Experimental: VSync generated via IRQs.
Theme: Git, Improved UI
- Many more improvements to the PyromaniacGit tool for commands that had been missed, commit message editing, and the interface to the 'askpass' authentication.
- WxWidgets text window resizes more sensibly on Linux and Windows, defaulting to 80x20, largely to allow easier input for Git commit messages.
- RequestInput implementations allow the host system to provide a console or UI mechanism for inputting strings, intended for use with Git's authentication system.
- Significant improvements of the ANSI output processing, to convert the output from
*PyromaniacHostCommand, and git invocations. Many more ANSI/VT codes are understood from the VT52 and VT100 command set, as well as some later commands. Additionally, the
COLUMNSare configured in the invocations to make more reliable commands.
- Git credentials can be stored on the disc, to make it easier to use once you have authenticated.
- Resolver testing was much improved due to comments in the ROOL forums. RISC OS Pyromaniac was used to show how the Resolver in RISC OS 5 was broken.
- OwnerBanner is now provided which gives the text-based system banner.
- API documentation is much improved and documentation for PyromaniacGit is now present.
OS_GBPBenumeration opaque handles were made more configurable, after reminders from users about their manipulation.
Part 1: Introduction
An introduction to Pyromaniac.
Part 2: Changes by month
Summary of the changes broken down by month.
Part 3: Details (1)
In depth discussion about some quick hacks, Jan Vibe's graphical ditties, Git and others.
Part 4: Details (2)
In depth discussion about the user interface changes and testing.
Part 5: Details (3)
In depth discussion about the hardware interfaces.
Part 6: Conclusion
Some final words about the year.
Appendix: Summary of the changes
A quick summary of the changes in 2022.
Main Pyromaniac Site
Main pyromaniac site with resources, examples and other links.