Full source and example code is in here: https://github.com/martinpiper/C64Public/tree/master/DictionaryCompression A variant of literal/copy compression (LZMPiE) that uses an extra common dictionary (hence LZMPiED) calculated from multiple input files, to reduce overall compressed data size. The build for this tool is also a good demonstration on how to unit test 6502 code along with java code. Command line parameters: [input files] Example usage: java -jar target\DictionaryCompression-1.0-SNAPSHOT-jar-with-dependencies.jar 1024 target/compressed 2 TestData/Mule.prg TestData/MeanStreak.prg TestData/Lobster.prg TestData/Dinosaur_Disco.prg "TestData/Turrican remixed.prg" TestData/Nintendo.prg TestData/WizballGuitar.prg Which equals 11,745 bytes Compare this with the result of using LZMPi to compress each file individually: ..\bin\LZMPi.exe -c TestData/Mule.prg target/compressed_Mule.prg.cmp2 ..\bin\LZMPi.exe -c TestData/MeanStreak.prg target/compressed_MeanStreak.prg.cmp2 ..\bin\LZMPi.exe -c TestData/Lobster.prg target/compressed_Lobster.prg.cmp2 ..\bin\LZMPi.exe -c TestData/Dinosaur_Disco.prg target/compressed_Dinosaur_Disco.prg.cmp2 ..\bin\LZMPi.exe -c "TestData/Turrican remixed.prg" "target/compressed_Turrican remixed.prg.cmp2" ..\bin\LZMPi.exe -c TestData/Nintendo.prg target/compressed_Nintendo.prg.cmp2 ..\bin\LZMPi.exe -c TestData/WizballGuitar.prg target/compressed_WizballGuitar.prg.cmp2 dir target\*.cmp2 Which equals 13,088 bytes The dictionary compression is 1,343 bytes smaller. === Demo === To assemble the demo, first run the command line about in "Example usage" to produce the compressed output files. 6502 asm source to decompression is in: asm\DictionaryDecompression.a Demo source (ACME format) is in: asm\Demo.a It can be assembled using: BuildIt.bat Assembled demo prg file is in: target\Demo.prg The dictionary is at $c000 so if you're using a memory viewer it shows when it is read. The compressed data is much lower in memory at around $a50. The decompression address is $8000