Example files
During the course of development, I produced a number of examples of the tool in use. Some of these are provided here. They are at varying stages of the development of Pyromaniac, although the version number and release date appear on some which may help to identify when they are from.
2020 examples
Building the RISC OS Kernel on macOS
(Asciinema)
- determine what is being built from CI
- setup up the environment variables for this build
- download and extract the tools needed for the build (from Artifactory)
- run the
riscos-amu
build - archive the results
- upload the archive to Artifactory (when requested)
Running BASIC on macOS
(Asciinema)
Running BASIC with modules
(Asciinema)
ANSIText coloured output
(Asciinema)
Freeway works
(Asciinema)
There's a gap in the recording which wasn't intentional - I didn't really need to pause for the module to work.
Snake in a console window
(Asciinema)
OS_GBPB through sed
(Asciinema)
TWIN called from BASIC
(Asciinema)
TWIN
' is a BASIC command which invokes the TWIN module to edit the BASIC program. Pyromaniac has
its own implementation of TWIN which is incredibly simple - it just invokes a host command on the file, and then
waits for it to return.You'll find the source to the TWIN module in the example code on this page.
CLI aliases
(Asciinema)
Tracing execution
(Asciinema)
LDM
instead of LDMIA
, LSR
instead of MOV ..., LSR
.
These are Capstone's disassembly features.
Lots of modules
(Asciinema)
Early example of JFPatch
(Asciinema)
Network connections
(Asciinema)
ifconfig
tool was modified slightly to add support for reading
the information about the IPv6 addresses - and to use SIOCGIFCONF
better. The test command has some
hard-coded IPv4 and IPv6 addresses in it which it will communicate with - at present there is not Resolver support
for IPv6 addresses.
RAMFS and low-vector watches
(Asciinema)
Faking Git
(Asciinema)
*PyromaniacHostCommand ...
') but it looks
like you're running git on RISC OS. Kinda. The git command is using the terminal control sequences, which the
PyromaniacHostCommand implementation turns into the relevant VDU control codes on RISC OS to change colours.
The VDU implementation is ANSIText, which then converts those VDU control codes back to the correct terminal
control sequences. Thus, the colour that was output by the host git command changes the RISC OS state, and is then
output in the right way for the terminal to have colour.
The later PyromaniacGit module provides similar operation but is even more integrated to hide the host system.
ErrorCancel module
(Asciinema)
CObey crash
(Asciinema)
Drawfile rendering
(Video)
BootMenu
(Video)
Wimp experiment
(Full size image)
Demonstrates that the windows can be created, although you can't do anything with them and it is only CreateWindow/OpenWindow that work right now. Alphabet is honoured in the text strings, though.
MacOS application
(Video)
Demonstrates the VDU23 characters, and uses INKEY$() to input characters with a delay. Also shows a vertical off-by one error in the rendering in places.
Font_Paint, showing UTF-8
(Full size image)
Font_Paint, with macOS fonts
(Video)
This was run on macOS, so all the macOS fonts, and extra ones that I have installed, are shown here. Some fonts are not very useful, and just appear as boxes.
Rendering with the classic Draw module
(Full size image)
When the Draw module renders its shapes, it uses the horizontal line routine. This call only takes a pair of x-coordinates and a y-coordinate and draws a line between them. When used with the SVG renderer, however, we can see h-line in operation.
The large horizontal lines are an artifact of the Pyromaniac rendering - Draw produces very large x-coordinates when a shape goes off the screen. So much so that when Pyromaniac processed it, they became negative, which caused that ugly line.
Running on Windows
(Full size image)
Font rendering with Pyromaniac
(Full size image)
Font rendering with classic FontManager
(Full size image)
JPEG_PlotTransformed
(Full size image)
Classic Wimp with Pyromaniac fonts
(Full size image)
Classic Hourglass
(Video)
The hourglass is very large because that's the size of the desktop pointer on my machine. You may notice that the active point isn't set correctly in this video; the setting wasn't working in WxWidgets when I recorded this.
BBC Game Explode
(Video)
Demonstrates the use of VDU 23 programmed characters again, and keyboard input using INKEY() negative numbers. Italic text achieved by reading the character definitions, shifting bits and reprogramming.
First tune through WaveSynth
(Audio)
The sound isn't quite right; there's an annoying clicking in it, which is caused by the sample buffer not having a length which is a multiple of 4. I didn't realise that this was a requirement at the time, but I was very pleased that the first time I tried playing a tune it came out recognisably, and in the right pitch. The repeated note at the end would have been a sustain on the BBC, but doesn't have that effect on RISC OS.
The current version of the experimental branch plays this smoothly without glitches.
This was actually the second time I'd tried to play the tune - the first time was horribly distorted. I'd got the mu-law-to-linear conversion wrong - the values for 16bit sound are -32768 to 32767, but I was mapping to -65536 to 65535, which meant that they clipped and distorted really badly.
Application: On macOS
(Full size image)
Application: On Windows (via Wine, on macOS)
(Full size image)
This has the interesting result that RISC OS interfaces are implemented in Python, which runs on a Python compiled for Windows, but which uses interfaces implemented for macOS.
Application: On Linux (via VNC to a local docker image, on macOS)
(Full size image)
This is as convoluted as the Windows example, because this is running on macOS. macOS implements Docker by running a Virtual Machine to run the Linux OS underneath. So actually we have RISC OS implemented in Python, executing in a container on Linux, which has been virtualised on a macOS machine to make it look like a native command line tool.
2021 examples
WindowManager runs with Iconbar
(Full size image)
A simple BASIC application runs and creates an icon on the iconbar. The text in the icon is meant to be 'Test' but the FontManager is not stripping the control codes and therefore is including some squares where they appear. It's also visible outside the icon's bounds, showing how the graphics window isn't enforced yet.
Just getting a BASIC application to start as the only application was a challenge. The WindowManager happily takes away all its memory, leaving the system in a very bad state. A small update to the WindowManager code was necessary to not destroy the application that was running.
Filer window opens, unsorted
(Full size image)
The Filer has managed to read the entire directory but hasn't sorted the resulting files, so they're in a random order.
This is because the OSSWIs module which provides
OS_HeapSort
isn't loaded.
Although the window furniture has been drawn, the font that's being used is still the Homerton equivalent. So instead of using the WIMPSymbol characters, we have some odd characters in place of the back, toggle size and scroll buttons.
Filer window opens, sorted
(Full size image)
Merely loading the OSSWIs module was all that was needed to get the window sorted properly. The FontManager has also been updated to strip the control codes. This at least makes the text more readable, and the window furniture less noisy - although it's still wrong.
MessageTrans_MakeMenus works
(Full size image)
The implementation of MessageTrans_MakeMenus
meant
that some of the desktop applications could begin to work. Here,
Pinboard's menu is clearly working and icons hare shaded
appropriately. The submenu icons don't appear because they would
be sprites, which aren't implemented yet.
It's also possible to see the extra test on the iconbar - the icons that are created now truncate at the edge of the icon. This means that the graphics window is used when they're drawn.
TaskManager runs and can show custom acknowledgements
(Full size image)
TaskManager has started, and although it's not visible on the Iconbar because sprites aren't supported, the window redraws properly and the acknowledgements window is working. Pyromaniac itself responds to the service request for the acknowledgement information alongside the response from TaskManager.
In the TaskManager itself it's possible to see that the areas for the Font cache and the RAM disc are greyed out, because the dynamic areas don't exist on this system. Similarly the 'Applications (free)' is greyed out because there is no free pool.
Sprites begin working in the desktop
(Full size image)
This was one of the earliest sprite renderings that started working. Most of the sprites are using the standard palette for the mode they were defined in, rather than their own palettes. This is why the furniture icons appear in reds, greens and yellows - they're defined in a 16 colour mode which has primary colours in its default palette. The sprite should be using a more greyscale palette.
It's also possible to see that the sprite mask isn't supported yet. The areas that should be masked in the Filer icons have random colours showing through.
Sprites are now using the correct palette
(Full size image)
The pixel translation tables are now being used properly with the sprite's own palette being used correctly.
Also visible is the TaskManager menu, which has a square where the 'shift' up arrow should be. Without the ability to switch to a different font, it isn't rendered properly. The RISC OS Select text in the information window is also just using the regular font. The control characters that would select a bigger, bold font, are just being stripped - they're not honoured yet.
Sprite masks are working, and alpha sprites
(Full size image)
The Filer icons are masked, and they can be seen to not have any rogue colours showing through. The same is true for the !Draw application on the desktop. The submenu icon and the tick icon are both alpha channel sprites, with their edges blending to the background they are on.
The shadow under the pencil really should have been turned into an alpho channel mask at like 50% or something to make it look better on the Pinboard, but that wasnever done in the Select times.
The top menu icon is where the pointer is over. Floating over a menu item should highlight it, but the redraw doesn't work properly at the moment - it's meant to use EOR plotting, but that isn't supported.
Using the desktop video (January 2021)
(Video)
The video is recorded through the built in Cairo frame recording system. This is approximately the speed it therefore ran at. There is a lot of debug going on in the background which is slowing down the operations.
That said, Pinboard's background redraws quickly, and the TaskManager is reasonable in its redraw. All the actions are being triggered by key presses. The test application has a poll idle handler which checks for keys held down and starts different actions based on that.
The Filer, for example, has its window opened by a key press, as there are no iconbar filers to click on. The start of the Pinboard and TaskManager was also triggered by a key press at the start of the video.
Changing the Filer display mode to 'small icons' shows up a problem with the font rendering in the window. There are actually multiple bugs. The highlighted icon sets some flags that the Filer doesn't like which prevent it rendering the following text properly, and in any case the background for that text isn't rendered at all. When deselected, it looks ok.
Various other interfaces are exposed here - the
OS_ConvertFixedFileSize
SWI produced
the file sizes, the OS_FSControl
SWI
calls to convert the filetype to a name is used
for the regular files in the directory. And the
OS_ConvertStandardDateAndTime
calls
show the dates.
The demo goes all the way through to the shutdown banner and then turns the machine off, at which point the video obviously stops.
Comparison of Font_Paint with RISC OS Classic
(Full size image)
Getting a working control code parse was tricky. The fonts were always going to be slightly different, but getting the effects produced to do the same thing as Classic was quite important. Here we can see the same test program run on both RPCEmu running RISCOS Classic, and Pyromaniac using its native font system.
The only significant difference is how far the fonts are justified which is entirely down to the different metrics used by the native sans serif font compared to the Homerton font.
FontManager's correct control code parser
(Full size image)
The re-written parser can now handle everything you throw at it, including the underlined text with inter-character spacing.
RailPro runs with correct colours
(Full size image)
Many of the early tests of RailPro had problems with the background colours and some of the text colour selection was very poor. Here, though the colours have come out right and the game is looking pretty much how you would expect. It's even been playable enough that I've got 2 trains into their platforms.
*ScreenSave very nearly works
(Full size image)
RPCEmu is on the left, showing a previously saved screen in !Paint. Pyromaniac is on the right, showing what it should look like. There are also lines of sprite rendering debug output shown in the top right.
Although it's only possible to save the screen from Pyromaniac when there is a bitmap buffer to be able to save from, that will commonly be the case. However, it is still necessary to convert from the 24bit colour used by Cairo to the format used by the RISC OS mode. In this example the upper rows of sprites have failed the save properly.
The reason they didn't save the top two rows of cogs properly is in how they were plotted. The lower 2 example rows plot the cogs with regular plot operations, but the upper two use 50% transparency. Because that means that the colours Cairo has used in the frame buffer from that blend aren't exactly those in the palette, the colour number has been set to 0 - black. This was easily fixed by searching for the closest colour when saving.
Floating keyboard LEDs window
(Video)
I wanted to make sure that the keyboard LED state was being passed around properly - mostly just for consistency. A simple window in WxWidgets can show the state of these icons with a little light. This means passing it through the RISC OS KeyV status notifications, and then picking it up to display in the interface.
This video shows the caps lock key being pressed and the light coming on. It then shows what happens when you press the scroll lock key - it flashes up the brightness control on macOS! But Caps lock works, and the debug shows the keys being pressed and the status updated.
The three LEDs are Caps Lock, Scroll Lock and Num Lock. However in WxWidgets on macOS only the Caps Lock is triggerable.
As an aside you can also see the text cursor flashing in this example.
Filling the screen with tiled cogs
(Full size image)
The tiled sprite plotting means only doing a single plot call which then fills the graphics window with the sprite. It might be a little hard to see, but in the bottom left there are two red squares. These show the top right and bottom left corners of the place where the single plot was placed.
Desktop background sprite now tiles
(Full size image)
The primary reason for creating the tiled plotting sprite call
was so that the WindowManager could more efficiently fill the
background. This had originated in the work that was done by
John Kortink on ViewFinder. He has patched the tiled plotting
for the WindowManager to make rendering much faster. As it
shouldn't be necessary to patch the system to trap the operation,
the new OS_SpriteOp
call for tiling was added.
Desktop tiling, but in a 16 million colour mode
Using the desktop video (July 2021)
(Video)
This video demonstrates entering and using the desktop from boot. Unlike the earlier video, there is no BASIC application to load modules and start operations. Instead we're using the proper Desktop module and tasks are starting in the normal way.
The desktop is started with a *Desktop -file
command to run some predefined commands to set up some
system variables and configure Pinboard. The usual desktop
banner appears relatively quickly. The banner itself is a
Squash'd sprite which is decompressed to be drawn. This
uses the Pyromaniac Squash module to decompress much faster
than it would with the ARM version.
Clock and a Filer window are shown. The clock is coming out wrongly - the hands don't look right. I'm not sure what's up with them, but it's almost certainly related to one of the graphics operations being wrong. It's not been high on my list to fix just yet. The hands also leave trails because the inversion system doesn't work in this version.
As before, TaskManager shows the system is working, and we can see the Select text in the information window is now correctly sized. Menus still don't invert their selections properly when you float over them though.
Shutdown still works, but the final shutdown banner has a sprite in it.
Breakdown of the tests (July 2021)
(Full size image)
To ensure that I have visibility of the areas which are exercised by the tests, each test file has markers which show what they are intended to tests. These markers are useful for manually checking what the tests are, but largely they're so that my tool can build this chart.
The chart groups the tests into the different test classes and types, and shows the system and the component within the system which is exercised. In theory it should be easy to spot any areas that have no testing because they aren't even listed.
In practice however, spotting that something isn't in a list is hard. And similarly, trying to categorise what's actually being tested in a given case isn't always easy. For example, there's no 'Networking' system listed, because the tests that exercise it are listed under 'Extension modules'. That's probably a bad categorisation because 'Extension modules' isn't a part of the system (except in the sense of 'can we use them, and that's under 'modules').
Pyromaniac hourglass with a percentage and bar
(Video)
The video shows the hourglass percentage works with the built in module. This has caused the hourglass itself to be a little smaller because the standard pointer implementation does not allow pointers larger than 32 pixels.
The text is actually a little small for real use - it only works well for me because the pointer is configured larger on the host system.
FontManager menus for the standard fonts
(Full size image)
The Font menus created by FontManager are created by the same interface that enumerates fonts. The manner in which it is created is a little awkward as there are two sets of buffers - one for the menu data and one for the indirected string data. These are constructed separately.
The Classic FontManager actually creates a larger block than it needs to. It sets aside space for the submenus on fonts that only have one top level item, and never removes it. This results in some menus requiring more space than they need to. The Pyromaniac FontManager doesn't do this, so the space will be smaller. Nobody will care because the difference will be pretty minor.
FontManager menus for all the host fonts
(Full size image)
The large list of fonts on my macOS system are converted to RISC OS names. Sometimes that means they look nice and other times they're not quite so friendly.
Here we can see that the Optima font has pretty sensible names, but the Novarese font above it has variants that aren't given as nice names.
FontManager menus work in !Draw
(Full size image)
The !Draw application can use the Font menus that have been
created. Font_DecodeMenu
works as well, allowing
the Novarese Italic font to be selected here. The ticks aren't
being displayed properly on the menu at this point, and the
font is not being sized properly by !Draw.
Draw rotates text
Plot actions partially work in menus
(Full size image)
The plot actions only work for the EOR and inversion operations, but they're not the same as on RISC OS Classic because the colours in the paletted modes don't invert the same way due to the actual display being 24 bit. It's good enough for these menus.
Edit with fonts in colour
Draw colour selection
Paint loads sprite files
Maestro loads and renders tunes
(Full size image)
Maestro takes a noticeable time to load files because it reads
individual bytes using OS_BGet
, which makes it
much slower than if it had read data through a buffer. But
once running, it's pretty responsive.
Maestro plays 'It's a long way to Tipperary'
(Video)
Maestro's playback scrolls with the music, so that it keeps time with what's being played. Because the redraw itself takes time this can mean that it could fall behind if the redraw took longer than a bar. But for this, and many other files, it plays just fine.
Desktop rendered as an SVG
(Full size image)
Using an SVG as the rendering system isn't the most practical of systems, but it's surprisingly effective here. The SVG it produces will never be especially efficient as sprites will be repeated and lines will be drawn as individual paths. But the result is still a vector - zoom in and your fonts are still font-y.
The Great Escape (image)
(Full size image)
David Thomas' reverse engineered version of The Great Escape runs well on RISC OS Classic. Here it's running on RISC OS Pyromaniac. It's a little slow in places, but generally it seems pretty reasonable. It is rather impressive to me that it works this well. I did have to implement the TimerMod module so that it would run at all, but it's really nice to see a game running.
The Great Escape (video)
(Video)
The video starts from the machine booting. We open the release of The Great Escape and run it. It starts up really easily and you can set the keys. In the video I demonstrate that I can walk outside relatively easily, and then demonstrate that I don't know what I'm doing and get caught by the guards.
Using the menu, we can go to full screen, which works just fine. And then return to the desktop.
Using the desktop video (October 2021)
(Video)
This video shows the state of the desktop. It demonstrates Edit running and being used to input text. It shows Draw rendering a complex DrawFile - slowly because Draw uses FP operations for its transformations.
We have MineHunt showing that a desktop game with lots of sprites works. The Great Escape runs and it is briefly shown being played. Fireworkz is started up, and loads fine. Trying to create a document gives an error - there's something up in the handling of the heap, but it's non-fatal here.
Once the document is opened in Fireworkz, some text is entered. The redraw of the fonts appears to be overlaid - probably because of the anti-aliasing being a blended effect, which it isn't expecting. The caret also redraws a little wrongly - something about the plot actions must be wrong.
There are a couple of extra redraws of the ruler and buttons that seem odd, but they are probably related more to the application than to RISC OS Pyromaniac. The italic font and size selection works just fine.
Finally we shut down - and the heap error turns up again.
ColourTrans HSV conversion works
(Full size image)
The ColourTrans HSV conversion SWIs are used by Pinboard to allow the rainbow effect on the backdrop. Usually you wouldn't use it with quite this brightness - it's a little garish.
Display manager shows the built in graphics modes
(Full size image)
On RISC OS Classic the modes that are available are provided by the ScreenModes module, using a simple service. It's not the best interface but it works well enough. RISC OS Pyromaniac can provide results through this service which are taken from the numbered screen modes.
As there are no (practical) hardware restrictions in place on the system, there's no need to worry about the amount of 'memory' used by the modes, or their bandwidth requirements. In any case the memory is never RISC OS memory.
RISC OS Pyromaniac also supports reporting a single display device through the multi-display interface. Display Manager can show this as well, although it's not visible here.
Full system demo video (2021)
(Video)
The 2021 presentation to ROUGOL included a system demonstation. The presentation overran and I had to cut part of the demo out. The full presentation of that demonstation has been recorded and can be viewed separately here.
Documentation: Comparison of documentation styles
Download
PDF showing the different styles of manuals that Acorn produced over the years, and similar styles generated by the PRM-in-XML transformation process. This gallery is itself created through PRM-in-XML.
Download
Zip archive of the source and generated HTML for the comparison gallery.
Documentation: Example PRM-in-XML document
Download
PDF generated from parts of the PRM-in-XML project, for a sample of the parts of the networking system.
Documentation: Example PRM-in-XML document (RISC OS 2 style)
Download
PDF generated from parts of the PRM-in-XML project, for a sample of the parts of the networking system. This time, using the RISC OS 2 style variant.
2022 examples
Jan Vibe's Diamond Tree
(Video)
My recordings of the Jan Vibe archive were quite pretty. Their testing produced a lot of fixes for the VDU and graphics system. This diamond tree is one of my favourite pictures.
(Full size image)
Although RISC OS Pyromaniac can display the results as bitmaps, it can also save as vector images. This image was part way through the rendering of the tree, but saved as a vector art SVG instead of a bitmap.
Integration with the macOS Finder
(Video)
The macOS finder offers the option to extend the menus with 'quick actions'. These are automation jobs which can process files by running programs. In this case, the BBC BASIC program is being run inside Pyromaniac from just a menu selection.
Unicorn 2 works
(Video)
The improved Unicorn engine that was produced by their developers initially had a lot of problems with processor mode changes. As this happens a lot in RISC OS, this was a big deal. With a lot of back and forth, it now works with RISC OS Pyromaniac, well enough that the desktop applications run.
Information about the running system
(Full size image)
Being able to see the running state of the system is very useful in a diagnostic tool. One of the first of the data tables that the WxWidgets UI can display was the modules information window, which lists all the modules we can have present and their details.
(Full size image)
There are now many different types of information that are accessible through the 'View' menu in the WxWidgets UI. These allow you to see how the system is functioning whilst it runs.
(Full size image)
The AMBs (application memory blocks) data table here shows that we can include unicode characters to indicate the state of the information being represeneted too.
Interactivity in the UI
(Full size image)
Although OS_Confirm isn't used often, it is nice to have it appear as a native dialogue box, rather than purely being isolated to the RISC OS display. It makes the system more like an integrated application.
(Video)
The Wimp_ReportError dialogue is also able to be presented as a separate external dialogue, rather than being isolated to the RISC OS display window. The video shows both the confirmation and error box being used, alongside RPCEmu showing the same dialogue box.
(Video)
The Twin module offers a '*Edit' command, which can edit files using a configurable editor. In the WxWidgets UI, that cane be a host dialogue which lets the file be modified before returning it to the system.
(Video)
Although RISC OS doesn't itself have a direct interface for getting input from the user, except through OS_ReadLine, this is needed for the operations performed by the Git tool to authenticate the user. An integration to allow this interaction means that it is more like a regular application when you need to log in.
Examining the system memory
(Full size image)
In addition to the data tables mentioned above, the WxWidgets UI allows you to see the contents of memory in modules and dynamic areas. These views can break down the data as bytes, half-words, words, or by disassembly.
(Video)
The video shows how to see the contents of a module and dynamic area through the menus. It then shows the view on to the NVRAM, and demonstrates the help in the status bar which shows what the NVRAM data means.
(Full size image)
The dissasembly format in RISC OS Pyromaniac is styled to look similar to how the disassembly looked in !Zap - which is where I came from on RISC OS. Comparing the two side by side shows that they really are quite similar.
Coloured disassembly at the command line
(Full size image)
With the implementation of the coloured output in the UI, it seemed like a nice extension to allow the command line disassembly to use this colouring as well. The *MemoryI command can display the colour if you set a system variable.
FS explorer in WxWidgets
(Video)
The FS explorer in WxWidgets is intended to make it easier to examine the content of the filesystem from the host system. The explorer has a lot of the facilities you would expect of the RISC OS Filer, but is implemented purely through calls to the system request system.
The video shows browsing for files, the memory dump and text displays of their contents, and the different types of display that can be shown in the Explorer.
(Video)
Although the file contents cannot be modified, new directories can be created, and files deleted from the interface.
(Full size image)
Placing the Filer and FS explorer alongside one another shows some of the differences and similarities. Although they won't be the same in terms of the applications, as we don't handle the !Sprites files, the style of the window and menus is very close.
Resizing the UI
(Video)
The video demonstrates the way that the WxWidgets UI window can be resized. The configuration here retains the aspect ratio of the display, and works in different modes just like you might expect.
(Full size image)
With the ability to scale the display arbitrarily, it is now possible to run RISC OS Pyromaniac in full screen. This makes the system seem a lot more 'real', although it is still just another application on the system.
(Full size image)
Obviously when run full screen, the ZX Spectrum game The Great Escape looks odd on a macBook.
(Full size image)
Although the reszing of the UI didn't directly make it possible to have large modes, it did fix a number of minor issues with using them. This image shows a 2200x2600 mode using EX0 EY0, spanning across multiple monitors to make it look more impressive than it is.
In reality you can have any size of mode you care for in RISC OS Pyromaniac, so this isn't actually that special. But it does look fun.
GTK and WxWidgets comparison
(Full size image)
Although the WxWidgets UI is more functional than the GTK version, they still look very similar - and now they support changing the border colour which is obviouly very important.
Old UtilityModule behaviour
(Full size image)
On older versions of RISC OS it was possible to trigger an error message if you tried to kill the UtilityModule. Later versions of the system caused this message to not be visible, but it still has a bit of nostalgia. The option to report this message is present in RISC OS Pyromaniac, although it doesn't really have much effect as the UtilityModule only provides the *GOS command.
Statistics on interfaces
(Full size image)
Being able to see what files were accessed by the system is very useful for debugging what's going wrong with a program. Having statistics to show how many accesses were performed can also help with the performance of the system. When the FS statistics are enabled it is a lot easier to see what's going when the system exits.
(Full size image)
The ticker system also has statistics available to it, together with a mechanism for listing the currently active ticker handlers.
OvationPro in the desktop
(Video)
David Pilling released OvationPro for free, so I tried it out to see if there were things that needed fixing. Surprisingly, it worked without much fixing.
Desktop rendered as a PDF
Download
Just as it is possible to render to a SVG using the Cairo system, it is also possible to render to a PDF. Whilst SVG isn't great as a rendering medium for an operating system, a PDF is even more strange.
'Simple' IIC and GPIO devices
(Video)
Long ago, I created a small LCD display for AMPlayer, so I was interested in driving a simple display from Pyromaniac. It required writing a more functional IIC module, and writing a small amount of code, but it's still quite easy to do.
(Video)
Addressable RGB lights are common these days, and being able to drive them isn't hard. However, if you have to first write the GPIO interface to drive them, then the driver, then the program, it takes a little longer. Fortunately, the BASIC code to control the Blinkt lights here is pretty simple.
(Video)
7-segment displays are really old hat. But they can be driven through the GPIO interface relatively easily.
(Full size image)
The matrix driven here is actually using another 7-segment display controller, but instead of being aligned as digits, the segments are just regular LEDs in a matrix, so you can produce pretty patterns.
(Full size image)
The controller for the 8x8 matrix can actually handle multiple matrixes, by chaining them together. The code has to be slightly different, but it's not too much more complex.
(Video)
Being able to see the GPIO as it changes is sometimes useful. Probably not that often, but still it's an extra option. The WxWidgets implementation for GPIO lets you see the pins as they change, and update the inputs by clicking them.
Graphics implementation using an OLED display
(Full size image)
The SSD1306 OLED display is a little I²C display which has a resolution of 128x64. A graphics implementation in RISC OS Pyromaniac means you can use it as a regular display. If the mode you select is much bigger than the display, it will just truncate the output, but otherwise it works just fine. This image is one of the first that was created by the graphics implementation.
(Video)
The flashing cursor makes the display look a lot more like a regular display. It's quite responsive when using interactively.
(Video)
A little BASIC program that draws a clock shows how well it works - there's a shimmer because the refresh of the camera and the display are slightly off.
(Video)
The display driver can flip and invert the contents of the display before sending the data to the device, which means that it can be used in portrait as well as landscape. It may not be quite so useful like that, but you can, which is the point.
(Full size image)
I left two devices connected to the I²C bus by accident. By a happy coincidence, they didn't interfere with one another and I ended up with the same image on both displays!
Graphics implementation using Turing Screen
(Video)
The 'Turing Smart Screen' is a serial based display. It's not amazingly fast, but it works quite well for displaying text. To make the rear facing light work, the graphics border colour is used to control the colour.
Graphics implementation using a 21x7 LED display
(Video)
I bought the 'Dream Cheeky' LED message board so that I could use it as a notice about system events at work. It wasn't very useful as it is so small, but it was fun to play with at the time. Digging it out to use with Pyromaniac, it is even more obvious how unuseful it is. But it does work as a graphics implementations.
Graphics implementation using the console
(Video)
The 'ansi' console frame device is a graphics implementation that uses the console output to show the graphics display, with one pixel being represented by one character. This meants you need to scale the font down a lot, but it does work.
ADC experiments
(Video)
The MCP2221 that I use for my I²C and GPIO tests also supports an ADC. My experimental ADC module lets me use this with ADVAL. Here you see a very simple program showing that the analogue from a little thumbstick works as expected.
(Video)
The PCF8591 is an I²C device which supports ADC. This is it in use with a little example program.
PWM devices
(Video)
The FanHAT for the Raspberry Pi is a PCA9685 I²C device that allows the fan's speed to be controlled programatically. Driving it from Pyromaniac with BASIC is pretty easy. It also has a OLED display which RISC OS Pyromaniac supports as well.
(Video)
The PiGlow is a Raspberry Pi focused device with 18 coloured LEDs in a spiral. It's really bright! It can be drived by a little bit of BASIC code in RISC OS Pyromaniac.