This is a screen compressor that I use for the game screens stored on disks. It generates a self-extract compressed screen code, using a compression scheme which is identical to that used by Hewson Consultants on their compressed game loading screens (those using a virtual “tape-counter” during tape loading, like Impossaball, Nebulus, Zynaps, etc.).
I developed the compression code by reverse engineering the (de)compression method found on those game screens. Although the resulting code is not as small as other screen compression schemes generally availabe, I liked more the Hewson’s approach:
the screen attributes are loaded last and fast after a total blank, so the screen becomes sudden visible in a clean fashion
it sets also the border colour, an useful feature when the screen loads from disk (but less important or even useless when the screen loads from tape, because of the colour stripes used by the afterwards game loading routines – at least when using a standard-like tape loading)
it does not depend on any pixel or attributte value of the actual screen; other compression schemes first scan the entire screen for a non-existent value (usually a single byte) in order to be used as a compression marker, with the real possibility that a non-existent value does not exist within a particular screen
the scheme is used (well, it was used...) by one of the most reputable software company from the ZX Spectrum scene :)
The .zip archive below contains the +3 version as the running program, but tape handling is also possible along with the disk. The archive includes a disk image file, the individual program files and the compressor source code in GENP3 format. Run the program by loading the COMPSCRN.BAS file.
Can’t remember :) The first attempts on implementing this screen compression scheme dates back to 198x, on my 48K clone at that time, tape only, no printer for code listing and no desire for documentation. Current version is polished for +3 usage; chances are the versioning might refer to the +3 BASIC part of the program, rather than to the code part of it.