Releases: TomHarte/CLK
2026-04-21
On the Thomson machines:
- there is now some support for LEP and SAP files;
- Memo5 images with the extension ROM are now recognised and appropriately routed; and
- an attempt at emulation of the MO6 and Prodest 128 is now present, though I don't yet trust it enough for it to be a trusted target for software. You'll have to select it yourself.
On the Master System:
- save RAM is now present, though unretained; and
- a substantial issue in the display of fixed right-hand columns has been corrected.
Together these fix all issues with the recent Road Fighter release.
2026-04-07
Continuing to iterate on the MO5, this release:
- adds support for disk drives and the .FD file format, and cartridges via the M5 file format;
- corrects the memory map error that was causing an incorrect border colour at launch; and
- fixes a timing error with 6809 LEAx instructions.
2026-04-04
Primarily this release introduces a first swing at emulation of the Thomson MO5. Between it being this emulator's first 6809-based machine and my poor comprehension of French it will likely take longer than usual to work up to broad compatibility.
It also reintroduces use of the Oric's composite ROM for video generation where supplied, increasing the accuracy of composite colours.
2026-02-23
This release:
- uses a history of recent frames to detect when machines are producing interlaced output; and
- switches its frame-blending model in that case to avoid any visible up/down motion.
As with diagonal scans this isn't more accurate in the prima facie sense: real CRTs don't blend frames. No parts of successive interlaced fields are visible at the same time. They just paint one field half a line lower than the other, and alternate rapidly.
But it's arguably more accurate in the practical sense, especially when adapting 50Hz video to a non-50Hz display; a simple bob inevitably introduces some degree of visible stutter that appears as wiggle. Joining pairs of fields potentially creates aliasing during motion — the famous comb effect — but definitely avoids the wiggling.
Key points:
- this is all in reference to real interlaced video. Not those demos that alternate frames within a progressive scan and call themselves interlaced, such as a few on the ZX Spectrum. Those don't produce interlaced video; and
- the functionality is built into the simulated CRT, being purely a function of the generated video signal. There is absolutely no around-the-back-hackery such as specific machines somehow magicking the fact that they're producing interlaced video into the CRT. Either they're timing their vertical syncs to produce an alternating offset relative to the horizontal syncs or they're not. Just like a real TV.
2026-02-20
This release:
- addresses some but not all of the regressions in output under macOS and Metal that can cause corrupted displays. Diagnosis continues as to other issues;
- resolves an issue where systems that produce entire frames with no PCM-clocked content whatsoever — in practice most likely to be the Amstrad CPC and BBC Micro during loading transitions — would retain a static frame of output under both Metal and OpenGL;
- bundles the Amstrad CPC, ZX Spectrum, ZX80 and ZX81 ROM images into the executable for all targets per @stevexyz's work on obtaining permission for the ZX80 and ZX81 ROMs, and my reading of Amstrad's historical comments on the others;
- implements provisional read support for MOOF-format floppy disks; and
- forces the emulator's characteristic slender-diagonal scan lines into strict horizontals.
On the last point: on a real CRT you get very shallow diagonals. Within the emulator you get the same. CRTs treat horizontal and vertical timing as disjoint, which makes things like interlacing and progressive each 'just work'. It's not about being modal, it's a result of the general model.
But philosophically, the diagonals create aliasing and aliasing is by definition a misrepresentation of the underlying signal. CRTs definitely don't do an essentially-horizontal line with one or two stair steps along them. So are exact horizontals actually less accurate? Another way to frame it is two potential forms of output, neither of which looks exactly like the original, and one of which has distracting artefacts.
I've left the door open e.g. to do diagonals on very high DPI displays but forced horizontals everywhere else, and may vacillate.
2026-02-10
This release improves composite decoding on the Mac, and significantly improves the entire video pipeline on OpenGL targets:
- to give it the same quality of composite decoding as on the Mac;
- to reduce aliasing in all video modes; and
- better to fit the emulated machine to whatever window shape you select.
It also better unifies this emulator's use of the two APIs to try to avoid one falling far behind the other again in the future.
2026-01-06
This release continues to iterate on improving the Qt build:
- it now uses OpenGL ES rather than OpenGL, which is better matched to Wayland, the Raspberry Pi, etc;
- issues with retention of UI selections are resolved;
- updated Snapcraft packaging better integrates that version with KDE Neon; and
- the recent 'dynamic crop' option has been added to the UI.
For SDL:
- OpenGL ES 3 is now preferred, with OpenGL 3.2 as an automatic fallback.
On the Mac, minimal changes:
- the non-functional 'File->Revert to Saved...' is now disabled, having previously either done nothing or crashed the application.
For those building for themselves:
- CMake can now make the Qt target, in addition to the SDL one;
- however, this project's traditional QMake target survives as Qt Creator's support for opening projects from CMake didn't function when tested.
As a result of both the build and Qt improvements, Snapcraft releases have resumed. Due to the OpenGL changes they are also now likely to work on a wider range of Linux targets.
2025-12-12
This release:
- substantially improves fast loading of tapes on the Commodore Plus 4;
- improves the internal naming of options that became slightly opaque when exposed on the SDL command line — e.g. 'quickload' becomes 'accelerate-media-loading';
- corrects transitory framing errors when starting the ZX Spectrum; and
- moves from Qt 5 to Qt 6, correcting an OpenGL-related crash on the way.
2025-11-26
This release iterates on the Enterprise's optional newfound access to your local filing system; in particular it:
- avoids a potential crash or wrong file contents if the Enterprise attempts to save content stored in a ROM; and
- on macOS it avoids a potential hang when seeking user permission to reach outside of its sandbox, and tries to avoid asking for permission to create new files when it already has permission.
2025-11-24
This:
- adds support for host filesystem access from the Enterprise, allowing use of software distributed as .COM or .BAS;
- allows the C-1540 and 1541 to write to disk images and makes D64 files no longer read-only; and
- experiments with emulation of the BeebSID expansion on the BBC Micro (though noting that most of the SID compilation tune discs are broken to varying degrees with the 1770 DFS).


