Provo a spiegare, anche se e' piu' facile da fare che da dire.
Un programma compresso, sia sul c64 che su pc, deve avere per forza un entry point. Disassemblando e seguendo il flusso si arriva ad un punto in cui viene eseguita la jump all'entry point reale del programma decompresso. I prg compattati del c64, di solito, hanno la routine di decompressione che si copia in una zona di ram bassa, ad esempio $0100, e finiscono con un codice tipo
lda #$37
sta $01
cli
jmp $1000
non e' molto difficile a questo punto capire che il prg decompresso parte con una sys4096.
Con un c64 normale e' sufficiente patchare il codice sostituendo magari la
sequenza 85 01 con una D0 FE (sta $01 diventa una BNE *, un loop infinito a se stesso insomma) e a quel punto basta usare il monitor di una cartuccia tipo AR (o nel mio caso il monitor di CCS) e salvare la ram, magari prima settando la loc $01 a #$38, per far vedere tutta al ram anche sotto $A000-$BFFFf e $D000-$FFFF. Poi sta a te ripulire la memoria salvata da rimasugli e porcherie varie, magari confrontando il prg compresso con il decompresso, perche' spesso e volentieri rimangono parti anche del decompresso in memoria, dipende dal compattatore usato e se il file compresso e' stato o meno creato compattando un file che occupava tutta la ram o solo una parte.
Ogni compattatore e' diverso dagli altri, ognuno si faceva i propri e no, non c'e' mai stato niente di "pronto" tipo librerie sul c64, almeno non che io sappia. Il rapporto di compressione... non era nemmeno tenuto in considerazione o almeno non veniva mai citato, anche perche' varia da prg a prg. Si cercava solo di fare meno blocchi possibile.
Per quando riguarda la ram, il dubbio e' subito levato: il 6502/10 puo' indirizzare solo 64kb perche' ha un registro a 16bit per l'indirizzamento. 2^16=65536