Home RISC OS
News News
Befunge Befunge
Doom Doom
Inform Inform
Quake Quake
RISC OS RISC OS
   - BeagleBoard
   - Code
   - Games
   - Utilities
   - Miscellaneous

Misc Misc
Links Links
Contact Contact

QTM (Q The Music)

V1.49 (13/05/2023): qtmv1-49.zip (332,918 bytes). Suitable for all known RISC OS versions (including Arthur!)

QTM is one of the oldest and fastest Tracker music players available for RISC OS. QTM was originally developed by Steve Harrison (aka Phoenix) of Quantum, but development stopped in 2001 with the release of v1.40. In 2006 I started work on making the module 32bit compatible, but it wouldn't be until 2012 that I'd finally get round to finishing it, resulting in the release of v1.41, with Steve's blessing. New versions since then have mostly been Steve's work.

Above you'll find a download link for the latest version of QTM. Below are downloads for the previous versions, back to v1.40 (Steve Harrison's last solo release).

Abridged changes from v1.45 to v1.49:

  • Many bug fixes and optimisations
  • Improved support for obscure ProTracker features
  • QTM_SoundControl R2 bit2 now controls whether the QTM sound system remains on after Pause/Stop/Clear
  • QTM_Stereo default preset to new 'wide' stereo, gives a fuller sound!
  • QTM_SongStatus bit 4 added, to help checking if a song has reached the end and stopped or looped
  • Music interrupts enabled, use carefully :)

The beta version of 1.49 is also available (V1.49beta, 19/03/2023): qtmv1-49b.zip (319,249 bytes)


V1.45 (02/01/2014): qtmv1-45.zip (259,165 bytes). Suitable for all known RISC OS versions (including Arthur!)

Changes from v1.43 to v1.45:

  • Improvements:
    • FastTracker 8 channel support added!
    • FastTracker 6 channel support added! (the first QTM 6 channel music support)
    • Octalyser 6 and 8 channel detection added (similar format to FastTracker)
    • Added full 6-octave support incl. fine tuning, arpeggio and pitch slides
    • Additional partial support for extra low 7th/8th octaves (for converter use)
    • PlaySample SWIs updated to allow notes 1-72 (6-octaves)
    • StarTrekker 8 channel music now converted to FastTracker on loading
    • RPCEmu detection and patch to run QTM at 48uS improving the emulated sound
    • *QTMTransparent added to control Transparent Sound System (TSS)
    • TSS enabled by default on RISC OS 5
    • QTM now allows 4 channel music to play on channel 5-8 (see QTM_SoundControl)
    • New SWIs QTM_ReadChannelData and QTM_ReadNoteWord added
    • SWI QTM_PlaySample/PlayRawSample 'auto channel detection' vastly improved
    • Music files with no samples (eg. mod.Zilch) are now allowed
    • QTM's 8 bit 'fake' DMA buffer kept at 208 bytes/channel whatever DMA size
    • QTM's song time calculator, QTM_ReadPlayingTime, can now return centiseconds
    • QTMDisplay, a full featured tracker display, is included with this release
  • Bug fixes:
    • Huge bug fix for 6/8-channel music, repeating effects (slides, arpeggio, etc.) were only checked on channels 1-4, so did not play correctly on channels 5-8, now fixed.
    • Fixed bug: QTM reselected 4 channel output after loading a 4 channel music module, even when QTM_SoundControl had been used to set 8 channel output.
    • Fixed bug which caused QTM's play routine to update the current channel's DMA pitch, on every note, even blank notes. This stopped sound effects samples playing correctly on the same channels as music (even blank music channels)
    • QTM v1.45 copes correctly with Raspberry Pi's RISC OS sound system having a fixed DMA buffer of 256 bytes (previous Acorn machines defaulted to 208 bytes). QTM now detects whether RISC OS has selected QTM's requested DMA size (208 bytes) and if not, QTM's DMA calculations use the actual DMA size selected, not assuming 208 bytes. This means samples don't annoyingly 'pop' or 'click' at random...and it sounds so much better! Great result :)
    • Fixed bug which caused crash on initialising the TransparentSoundSystem under RO5 on the Beagleboard, as QTM's copy of the RISC OS sound handler was not set correctly until after QTM DMA handler initialised. Wasn't a problem on older systems, but crashed Beagleboard due to a DMA call after initialisation.
    • Fixed bug in QTM DMA, VU bar & fake DMA buffer code - there was no check for blank address pointer, so if all other data valid but address=0, DMA would take place from address 0 (and did not abort!), however VUbar and fake DMA code did abort... Now fixed!


V1.43 (17/06/2013): qtmv1-43.zip (209,514 bytes). Suitable for all known RISC OS versions (including Arthur!)

Changes from v1.42 to v1.43:

  • Improvements:
    • !QTMmini, !MiniVUBars and 'exelrelax1' music provided in release archive
    • Added source CRC validation, now anyone can re-assemeble release module
    • Removed loud 'pop' each time QTM loaded new tracks on Raspberry Pi.
    • 'F-00' now stops song playing but retains QTM as sound DMA handler. Use *QTMPause/Stop/Clear (or SWIs) to release the QTM sound system.
    • Corrected function names FNmcr and FNmrc in source (no effect on module)
    • On the 26th anniversary of the first Achimedes Operating System "Arthur 0.30", QTM is now compatible with Arthur! Previous versions did run, but resulted in a long stream of 'abort' errors while music played. Only a minor tweak was needed (removing PSR flag restore on IRQ return) and now QTM runs smoothly on Arthur OS.
  • Bug fixes:
    • Fixed effect 'F-00' (stop song) from crashing 32-bit systems.
    • Fixed 'no song loaded' bug if QTM was sound handler before player started
    • ARM detection code rewritten to avoid clashing with a bug in FPEmulator v4.12-4.31 that stopped QTM loading on ARM2/ARM250 if FPEmulator present


V1.42 (20/04/2013): qtmv1-42.zip (160,583 bytes). Suitable for RISC OS 2+.

Changes from v1.41 to v.142:

  • Fixes a bug in the 32bit compatible handling of SWI "QTM_SoundControl"
  • Fixes 'unknown SWI' compilation problems on pre-RISC OS 3.6 computers
  • Adds support to compile QTM with different DMA sound buffer lengths
  • Fixes a bug in SWIs QTM_Pause/QTM_Stop which could cause a crash on 32bit machines
  • Fixes an unaligned load in SWI QTM_Info that was causing issues on ARMv6/v7


V1.41 (26/04/2012): qtmv1-41.zip (159,921 bytes). Suitable for RISC OS 2+.

Changes from v1.40 to v1.41:

  • Updated code base to be 26/32bit neutral
    • On 26bit systems, SWIs will continue to preserve flags as before
    • On 32bit systems, flags will be corrupted
    • Addition of extra module header entries means that user mode entry points have now been moved from QTMaddr+40 to QTMaddr+52
  • Fixed a couple of unaligned loads/stores that were causing issues on ARMv6/v7
  • Added a RISC OS 4 style service call table to ensure efficient performance on RISC OS 4+
  • Added new method of determining sound system sample rate on machines with 16bit sound.
    • Now it just reads the sample rate via Sound_SampleRate instead of attempting to calculate it manually, or relying on the potentially inaccurate uS sample period.
  • Bugs fixed from older versions
    • Fixed SWI QTM_Pos returning a bad error pointer if R1 was out of range


V1.40 (18/04/2001): qtmv1-40.zip (156,941 bytes). Suitable for 26bit machines only, RISC OS 2+.



Page last modified 15/05/2023