[zxspectrum] Re: Microbasic

Luca Bisti wrote:
Dentro all'archivio c'è uno snapshot (pk-demo.z80) che dimostra il decompressore con la famigerata schermata di Rainbow Islands. Il tempo di 0.8s che ricordavo era relativo a una vecchia versione (0.95), nell'ultima ero riuscito ad arrivare a 0.48s a fronte di 246 bytes di codice (che non sono pochi). Riguardando molto velocemente il codice, tradotto bovinamente dal decompressore x86 del PKLITE e successivamente ottimizzato a mano, direi che il PKLITE implementava una qualche variante di LZ ma non saprei dire quale (non credo l'LZ77 modificato del deflate). Sicuramente si potrà ottimizzare ancora di piu', sia in termini di spazio che di velocita', soprattutto riscrivendo il codice sapendo cosa fa! :-D
Uhm... ho dato solo un'occhiata veloce al codice ma pare che abbia poco a che fare con l'inflate/deflate (a differenza del pkzip), non solo perche` manca la parte Huffman della compressione, ma anche la parte LZ sembra diversa.

Il vantaggio di usare solamente la compressione LZ in PKLITE e non Huffman e` che la decompressione e` particolarmente veloce. L'overload della decompressione nell'esecuzione di un programma compresso con PKLITE e` praticamente impercettibile in questa maniera.

A parte qualche piccola ottimizzazione che ho notato che puo` essere fatta (magari ce ne sono altre, ma dovrei metterci le mani sopra) il codice di Luca soffre del fatto che il PKLITE e` fatto per macchine a 16 bit. Si potrebbe riadattare la compressione per renderla piu` adatta agli 8 bit senza perdere niente nel livello di compressione ma velocizzando enormemente la decompressione.


Per quanto riguarda la mia implementazione, ho trovato alcuni appunti che avevo scritto. Era realmente una implementazione quasi completa dell'inflate (il mio "deflate", scritto in C++, non era 100% standard). Ne avevo scritte due versioni: una di 220 bytes, ma che richiedeva 24 secondi per decomprimere 1Kbyte o_O. Il secondo, di 262 bytes, va piu` veloce anche se gli appunti non dicono di quanto. La velocita` e` comunque non confrontabile con quella del codice di Luca.
Perdonate l'ingenuità del tutto, all'epoca non sapevo quasi niente di compressione...
Ne sapevi probabilmente piu` di me :-)


-p


Other related posts: