[zxspectrum] Re: Microbasic
- From: Paolo Ferraris <pieffe8@xxxxxxxxx>
- To: zxspectrum@xxxxxxxxxxxxx
- Date: Sat, 18 Jul 2009 14:06:56 -0700
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: