[zxspectrum] Esperimenti di ultra-mega-loader :-)

  • From: Paolo Ferraris <pieffe8@xxxxxxxxx>
  • To: zxspectrum@xxxxxxxxxxxxx
  • Date: Sat, 02 Mar 2013 23:10:29 -0800

Ciao a tutti,
come sembra essere un trend di questa lista :-) sto implementando un mio loader. E` ancora in fase preliminare, ma essendo un estensione del lavoro di Stefano Donati (non averne a male, lo faccio solo per rispondere ad una domanda che ho posto in lista ma che non ha avuto risposta :-) preferisco dire quali sono i risultati iniziali.

Dato che il resto del messaggio sara` molto tecnico, lo divido in tre parti a seconda di quanto volete saperne.

In 2 frasi: sto cercando di vedere se si possono ulteriormente ridurre i tempi di caricamento del 30% rispetto al loader di Stefano. Per esempio Manic Miner si dovrebbe caricare in 16 secondi.

Piu` in dettaglio: ho ripreso l'idea di Stefano Donati di fondere il Manchester encoding nel loader di DigiSynth, che implementa decodifica huffman al volo. Le differenze sostanziali sono 1) 11025 campioni al secondo invece che 12000, per supportare la velocita` CD, e 2) Due bit sono letti alla volta. I due valori aggiuntivi sono memorizzati con segnali lunghi il doppio rispetto a quelli normali. Cioe`, se A rappresenta il fronte alto e B il fronte basso del segnale, i 4 valori sono memorizzati come segue

00 = AB
01 = BA
10 = AABB
11 = BBAA

Come media quindi un bit richiede il 25% del tempo in meno.
3) L'albero di huffman e` bilanciato per usare i 4 valori a seconda della loro lunghezza, ottenendo un risparmio ancora maggiore (circa 30%).


Parte piu` tecnica, per i "pazzi" come me. :-)
L'ostacolo maggiore nell'implementazione di un loader del genere e` riuscire a leggere ed elaborare 2 bit in solo un 1/11025simo di secondo (317 T-states). La risposta non e` banale, visto che Stefano ha avuto bisogno di un 1/12000simo di secondo (quasi 292 T-states) per un solo bit. Ovviamente non so quanto abbia spinto il codice, ma la differenza e` solo 25 T-states...

Ho scritto un po' di codice e dopo averlo "strizzato" e snellito per bene ho ottenuto risultati iniziali incoraggianti. L'algoritmo di lettura dei due bit puo' terminare tra gli 88 ed i 126 T-states dopo il fronte di sincronizzazione. Dopo la lettura, il percorso di codice piu` lungo prima della lettura successiva sembra richiedere 125 T-states. Il totale peggiore e` quindi 251 T-states. Rimangono quindi 56 T-states, che spero siano un cuscinetto sufficiente per gli eventuali cicli persi per la contesa e per la distorsione del segnale. Per la cronaca, il cuscinetto ideale credo che sia 61 T-states.

Ma ci vorra` del tempo prima di poterlo provare: il compressore e loader sono quasi finiti, ma devo capire come generare il WAV (che includa anche il blocco BASIC).

Poi dovro` vedere se realspectrum gira su windows 7 64 bit :-) per poterlo caricare.
Non ho uno spectrum reale con me. Magari passo il wave in lista. :-)

-p


Other related posts: