[zxspectrum] Re: Perche` non turbo con decompressore Huffman?

  • From: Stefano Bodrato <stefano_bodrato@xxxxxxxxxxx>
  • To: "zxspectrum@xxxxxxxxxxxxx" <zxspectrum@xxxxxxxxxxxxx>
  • Date: Mon, 18 Feb 2013 10:05:41 +0100


>> probabilmente è per via del fatto che il loader con decodifica Huffman è 
>> stato già fatto anni fa (...)

>Non mi ricordavo della codifica Machester inversa: molto interessante 
>visto che permette di accorciare la lunghezza degli "1" come gli "0" 
>(quindi permettendo un risparmio di circa il 33% del tempo) (..)
 
Ragazzi, mi sto divertendo un sacco a leggere i vostri post, e sto imparando 
altrettanto !
Dunque, escluso a priori il problema di pretendere che lo Spectrum si occupi 
anche del SAVE mi pare di capire che il vero scontro sia tra le tecniche che 
"tirano il collo" alla velocità audio (ultracargas) e quelle che utilizzano una 
compressione sofisticata.
Misurando a spanne mi pare di capire che il turbo 'RLE', l'ultracargas e il 
turbo 'LZ' grossomodo si equivalgano (siamo nel delta tra 45 secondi e il 
minuto), e ormai conta di più accorciare la durata del segnale 'pilot' e le 
pause tra i blocchi di tutto il resto.
Senz'altro ultracargas ha il grosso limite di dipendere da sorgenti audio 
HIFI.. (è un vero problema al giorno d'oggi ?).
 
Per ora, visto che 'appmake' stava diventando fin troppo articolato, lascerò le 
cose come stanno, in fondo non è venuto male, no ?
http://www.z88dk.org/wiki/doku.php?id=platform:zx#the_appmake_tool
Nella sezione Extras è spiegato come turbizzare i programmi 'alieni', passando 
i due blocchi binari di screen e programma e la locazione x ORG.
Alla peggio rinunciando al turbo si può generare un wav solo leggermente 
accellerato partendo dai file 'tap'.
 
 
Altre idee sparse:
 
Per Huffman si potrebbe utilizzare un metodo diverso, ad esempio inserire dei 
bit 'a vuoto', che servirebbero solo per ricalibrare le temporizzazioni 
successive.
 
Il turbo per ZX81 "Musamy" assomigliava moltissimo al loader dello spectrum, ma 
passava una serie si impulsi sync che servivano per spiegare al loader a quale 
velocità erano stati salvati i dati.. in questo modo il 'save' poteva essere 
impostato alla velocità preferita dall'utente (che quindi poteva a piacere 
tirare al massimo il proprio hifi o utilizzare un formato compatibile con il 
vecchio "geloso" a bobine).
 
Dovessi rimettere mano al mio turbo penserei solo a un'opzione per tirare le 
frequenze ai livelli di Ultracargas, e al peggio di aggiungere una qualche 
logica LZ semplificata (ad esempio aggiungendo una sequenza di 2 bit, che 
ripeta gli ultimi 2 byte).. insomma sempre e solo atomi con tempi ben 
delineati.  Già così il mio loader si sgancia dal loop principale quando riceve 
un 'escape' e passa a una subroutine con conteggio dei tempi ricalibrato su 
misura.  Ho usato un metodo empirico: una volta individuati sperimentalmente i 
due valori limite ho impostato il valore medio tra i due, che presumibilmente è 
quello che permette la maggior tolleranza.
 
Altra idea che mi frulla per il capo: passare periodicamente nel wav un segnale 
riconoscibile dal loader che gli permetta di agguingere un byte in una 
locazione pre-impostata sullo schermo e visualizzare una progress-bar, in zona 
pixel o attributi.   Essendo precalcolata potrebbe abbastanza accurata.  
Scommetterei che ridurrebbe la percezione del tempo trascorso più di molti 
miglioramenti concreti  :P
 
 
>Avete mai investigato una codifica "Huffman" non binaria ma a 4 segnali? 
>Due di questi sarebbero i due della Manchester inversa "normale", ed gli 
>altri due a lunghezza doppia. Secondo una mia analisi strettamente non 
>scientifica :-) si potrebbe ridurre il caricamento del 30%.

A naso direi che andare oltre alle 3 'frequenze' sia controproducente, ma si 
può sempre abbinare al 'terzo bit' uno (o più) dei 3 bit possibili per ottenere 
5 opzioni (o più).
.. ma forse non ho capito cosa intendi ?
 

> La combinazione LZ+Huffman mi pare molto interessante, anche se secondo me 
> pone grossi vincoli alle massime frequenze utilizzabili, vista la quantità di 
> codice necessaria.
Concordo, però come dicevo sopra in parte si potrebbe compensare con dei bit di 
stop, nagari trasmessi con una certa calma.
 
 
                                          

Other related posts: