Code, maps, text and arbitrary bytes
v5.2 formats 0/2, combined v5.3/v5.4 and the v4.3 baseline, with matching RAM decrunchers.
Compress ordinary binary data, Screen 5–8 pictures, tiles, fonts and pattern streams. Compare the active CBS formats, choose RAM, RAM-tail, buffered VRAM or direct VRAM delivery, and download the matching Z80 source. Every candidate must decrunch byte-for-byte in the browser before it can win.
CBS v4.3 remains beside them as the trusted historical baseline.
The downloadable package uses the same compiled engine and parameters as this page. It handles continuous data, Screen 5–8 images, native BMP/PNG import, SC5–SC8 BSAVE files, CB5 decrunching, RAM-tail output, linear VRAM and one-image MSX test ROMs.
python cbs_cruncher.py game.bin
python cbs_cruncher.py game.bin --ram-tailpython cbs_cruncher.py picture.png --mode 7 --rom
python cbs_cruncher.py tiles.bin --linear-vram-screen 5 --romRequires Python 3.10+ and Node.js 22+. Pillow is needed only for BMP/PNG input. The website-only multi-image demonstration ROM remains intentionally separate from the CLI.
The browser no longer presents every abandoned experiment. These are the implemented paths that have survived compression, browser round-trip and generated-ROM testing.
v5.2 formats 0/2, combined v5.3/v5.4 and the v4.3 baseline, with matching RAM decrunchers.
Safe files receive destination 0x1 and relocate themselves with LDDR before forward expansion.
v5.3, v5.4 and line-aware v5.5 share paired payloads; change the destination without recompressing.
v5.3/v5.4 destination 0x2 follows physical Screen line width without forcing rectangle geometry.
One mapped Screen 5–8 decoder mixes buffered and direct images across ASCII8, ASCII16, ASCII16-X, Konami and Konami SCC banks.
Single images and ordered multi-screen mapper ROMs verify decompression, palettes and VDP delivery.
Cartridge ROM mapper reading now serves both buffered and direct VRAM. What remains is unpacking into selected MSX Memory Mapper segments, plus an optional hybrid row/chunk backend if a real game benefits from it.
A Motorola 68000 cruncher and tiny Z80 decruncher became a verified browser tool, a family of RAM/VRAM writers and a real MSX ROM builder.
The 68000 cruncher produces CBS v3. Its small Z80 decruncher originated on the ZX Spectrum and also works on MSX. A ROM-reading MSX version was later developed during the Romancia translation while the executable decoder still ran from RAM.
We restored v3 and v4.3, reproduced the Romancia result, replaced the unsafe four-byte overlap assumption with exact measurement, imported BMP/PNG pixels, and developed the v5.2 compact formats with a documented three-byte header and optimized Z80 RAM core.
ZX0's state flow, interlaced Elias coding, last offset on the stack, EX (SP),HL copying and impossible-offset EOS guided v5.3 and v5.4. CBS kept its own headers, offsets, adaptive-near choice and destination system.
CPU literals, HMMM matches and HMMV fills made direct Screen 5–8 output practical. Five cartridge mapper readers, palettes, E000h decoder relocation, F500h controller code and ordered multi-image ROMs followed.
v5.3/v5.4 gained one combined RAM decoder; v5.5 line offsets joined buffered and direct image routes; destination 0x2 added linear VRAM; destination 0x1 added measured RAM-tail relocation; the Python CLI gained matching outputs; and the website was divided into a focused compressor plus this complete integration guide.
The five cartridge-mapper builds gained a shared consecutive-bank reader and an optional mixed destination dispatcher. Direct-only lists now keep the smaller direct decoder; lists containing destination 3 automatically receive the combined RAM-stage/HMMC and direct-VRAM decoder. Machine ports, the initial Screen mode and an unchanged palette are initialized once before playback, while later setup runs only for a real mode or palette transition. The buffered uploader now waits for final HMMC completion before returning, and demo ROMs disable sprites to prevent artifacts while freeing VDP bandwidth.
A dedicated local WebMSX player replaced ROM-sized Base64 launch URLs. The browser now transfers complete cartridges directly between local tabs, preserving Japanese MSX2 NTSC, palette and mapper selection without uploading the ROM. The Python CLI was regenerated from the same engine, given reproducible packaging and tested across every continuous codec, buffered/direct images, linear VRAM, RAM-tail, BSAVE handling and all five mapped-ROM readers.
The multi-image builder replaced per-picture playback code with one shared loop and a compact RAM table containing Screen mode, VRAM page, mapper bank, packed address, palette and clear-command references. The HMMV clear now sends an eleven-byte VDP command block with OTIR, identical mode/black-colour blocks are reused, and a new public E009h decoder entry owns VDP-command waiting. A ten-image mixed ASCII16 player now occupies only 643 bytes at F500h, including its table, palettes and clear parameters.
The Help & format guide contains the byte layout, calling conventions, worked examples and remaining roadmap.