• LZPACK - 48K CP/M-80 (8080 and Z80) executable compressor in ANSI C89

    From Jeffrey H. Johnson@johnsonjh.dev@gmail.com to comp.os.cpm on Fri May 29 13:29:38 2026
    From Newsgroup: comp.os.cpm

    Available from https://github.com/johnsonjh/lzpack

    It runs on 48K CP/M-80, CP/M-86, MS-DOS, ELKS, UNIX, and many other
    platforms (inckuding modern macOS, Linux, Windows, or BSD systems).

    Since there was no good open source compressor like UPX for CP/M-80,
    I created this one. Algorithmically compatible with PopCom and can
    decompress its files, but always gets better ratios when compressing
    as it has optimized decompression stubs and better compression code.

    It supports directly running on as well as creating files for both
    8080 and Z80 systems. When run directly on CP/M-80 it fully supports
    exact file sizes using the LRBC (Last Record Byte Count) offered by
    CP/M-Plus / CP/M-3.0 (as well as on DOS-PLUS or CP/M-Plus 8086) which
    can help squeeze some bytes not including the last records tail.

    An "extra compression" mode is available when run on larger systems
    (needs more than 160K, so won't work on CP/M) allowing for better
    compression, while still being unpackable with the same stubs and
    without any performance penalty.

    Building all the binaries (CP/M-80, CP/M-86, ELKS, DOS, Windows, etc.)
    from source code requires a lot of tools to be installed, so I provide pre-compiled binaries for all the supported non-UNIX systems.

    I should also mention you can use it as a general archiver to compress
    and decompress single files (just like squeeze, or gzip on modern
    systems). There are probably better archivers that get better ratios
    because they don't need to worry about fast transparent decompression
    of executables. If this usage becomes popular somehow, I could add an
    option that doesn't write the decompression stub out which would save
    a few hundred bytes per file.

    All source is fully available including the decompression stubs and
    the cross-assembler I wrote (which is good enough to build the stubs)
    so anyone interested can build a native binary for their platform
    completely from sources without needing any 8080/Z80 cross-assembler
    installed, just a C89 compiler.

    I hope to add more documentation and release a version 1.0 soon.

    Any feedback is more than welcome!
    --
    Jeffrey H. Johnson
    johnsonjh.dev@gmail.com
    --- Synchronet 3.22a-Linux NewsLink 1.2
  • From Jeffrey H. Johnson@johnsonjh.dev@gmail.com to comp.os.cpm on Wed Jun 17 20:17:01 2026
    From Newsgroup: comp.os.cpm

    LZPACK 1.0 has been released at https://github.com/johnsonjh/lzpack

    The original announcement is still mostly relevant, but current
    details will always be in the README file at the link above.

    On 2026-05-29, Jeffrey H. Johnson <johnsonjh.dev@gmail.com> wrote:
    Available from https://github.com/johnsonjh/lzpack

    It runs on 48K CP/M-80, CP/M-86, MS-DOS, ELKS, UNIX, and many other
    platforms (inckuding modern macOS, Linux, Windows, or BSD systems).

    It supports directly running on as well as creating files for both
    8080 and Z80 systems. When run directly on CP/M-80 it fully supports
    exact file sizes using the LRBC (Last Record Byte Count) offered by
    CP/M-Plus / CP/M-3.0 (as well as on DOS-PLUS or CP/M-Plus 8086) which
    can help squeeze some bytes not including the last records tail.

    Building all the binaries (CP/M-80, CP/M-86, ELKS, DOS, Windows, etc.)
    from source code requires a lot of tools to be installed, so I provide pre-compiled binaries for all the supported non-UNIX systems.

    All source is fully available including the decompression stubs and
    the cross-assembler I wrote (which is good enough to build the stubs)
    so anyone interested can build a native binary for their platform
    completely from sources without needing any 8080/Z80 cross-assembler installed, just a C89 compiler.
    --
    Jeffrey H. Johnson
    johnsonjh.dev@gmail.com
    --- Synchronet 3.22a-Linux NewsLink 1.2