AutoVIDC 2.14
Posted: Mon Mar 02, 2026
This is a bug-fix / major overhaul of AutoVIDC, that improves the VIDC clock detection and makes the Module ROM capable.
Description
AutoVIDC automatically controls VIDC Enhancers. It selects alternative clock speeds for the VIDC chip during mode changes, enabling higher screen resolutions and alternative refresh rates on modern monitors. It supports various enhancer types (Aux I/O, Watford Electronics Super Enhancer, Acorn native) and works on RISC OS 2/3.00/3.1x.
Changes since 2.11
Description
AutoVIDC automatically controls VIDC Enhancers. It selects alternative clock speeds for the VIDC chip during mode changes, enabling higher screen resolutions and alternative refresh rates on modern monitors. It supports various enhancer types (Aux I/O, Watford Electronics Super Enhancer, Acorn native) and works on RISC OS 2/3.00/3.1x.
Changes since 2.11
- changed all SWI to be X versions
- changed all LDR/STR ..,[Rx] to [Rx,#0], to avoid post-indexing
- _useWEVIDCEnhancer was setting Watford Enhancers to a non-existant clock, when selecting 25.175MHz
- changed code that exits with an error to use an error exit function
- changed help and syntax text to follow RISC OS conventions
- changed the SWI jump table to use the normal convention
- optimized _useAuxVIDCEnhancer
- reordered code to remove auto-expansion
- various code optimizations
- Removed all TEMP/LOCK compiler directives
- made vars and modeLists relative to R12
- simplified the OS version detection
- switched the DMA count code to hang off the SSBC IRQ hardware vector, instead of using a Sound Channel Handler
- intermixed some local strings into the code, and aligned all other strings to avoid auto-expansion
- getClockSpeedInkHz was corrupting R0, causing *AutoVIDCStatus to trigger an abort after calling AutoVIDC_SetClockSWI for the current VIDC clock speed when the Enhancer type is "Acorn VIDC Enhancer"
- now ROM capable. Moved vars and modeLists out of the Module
- changed LatBShadow Page Zero references to be relative to 0, to avoid auto-expansion
- moved duplicated IIC related code into functions
- changed the machine detection from using the RAM speed, to checking the I/O chip type to allow AutoVIDC to work on overclocked machines
- the Service handler no longer disables IRQ/FIQ
- moved various flags into a bitwise flag variable
- AutoVIDC_SetClockSWI no longer disables FIQ
- removed the Service_ModeChange issued at the end of the Module init, it now determines which clock was active when it was loaded and sets it back, avoiding the need for it
- changed the Monitor/Mode detection to cover RO2 thru RO3.11
- It no longer tries to guess the machine/OS capabilities. It now tries changing the clock using Watford, Native OS, AuxIO in that order and uses the first that can actually change the clock...setting it's internal variables accordingly
- rewritten the Watford Super VIDC Enhancer code
- VIDC clocks are now timed twice, with the lowest timing determining the clock speed. Best accuracy is now +-5kHz at 24MHz and +-30kHz at 60MHz
- changed AutoVIDC_SetClock SWI with R0=-1 to return clock 0 if it's running on RO2 (the OS doesn't track the VIDC clock speed)
- Module is no longer 32bit compliant - AutoVIDC requires a VIDC1, which is only fitted to 26bit machine
- added a check for Arculator as it doesn't fully implement I2C
- added a check for Red Squirrel as it doesn't implement IOC timers correctly