
|
[zxspectrum] Re: infinity: trovato punto chiave
- From: Paolo Ferraris <pieffe8@xxxxxxxxxxxxx>
- To: zxspectrum@xxxxxxxxxxxxx
- Date: Mon, 03 Apr 2006 02:47:50 -0500
Allora,
ho capito come funziona il caricamento.
Prima di tutto ho qualche domanda fondamentale da farti:
1) senza modificare il TAP file, ti carica la schermata o si resetta prima?
2) Quando si resetta? Ci sono due headerless blocks. All'interno/fine di
quale blocco?
3) con la modifica (salto non condizionato), vedi la schermata del
caricamento?
4) Prova a vedere se riesci a caricare il gioco senza il loader custom:
http://www.cs.utexas.edu/users/otto/infinity.tap
(il file verra` cancellato fra pochi giorni)
Ora spiego come funziona il caricamento.
La prima CALL va alla routine di caricamento di un blocco headerless. La
figata di questa routine e` che
1) non richiede nessun indirizzo di partenza, o la lunghezza del blocco
- l'informazione stessa e` all'inizio del blocco, e
2) possono essere memorizzati piu` "sottoblocchi" in ogni blocco headerless.
Il primo blocco headerless consiste di due sottoblocchi: uno e` la
schermata compressa, caricata all'indirizzo 8000, e l'altro e` del
codice (comprendente il decompressore) caricato all'indirizzo f800 e di
lunghezza 012b. Notare che il salto condizionato in questione e`
all'indirizzo f8e0, in mezzo a questo codice.
Ovviamente non mi sono fermato, e sono andato avanti a leggere il codice
all'indirizzo f8e0 (0c7b sul tuo file). Esso decomprime la schermata con
la chiamata a f818, la mostra, e RICHIAMA LA ROUTINE DI CARICAMENTO:
come puoi vedere all'indirizzo 0cb4 nel tuo file, si ha di nuovo una
chiamata all'indirizzo f931, un salto condizionato ed un RST 0 nel caso
non venga fatto. Se il caricamento del secondo blocco headerless,
contenente il gioco compresso, ha successo allora il gioco viene
decompresso e lanciato.
Tornando al badaloc, se e` bastato modificare il primo salto
condizionato per caricare il gioco allora questo vuol dire che solo il
caricamento del primo blocco headerless e` fallito, mentre l'altro e`
riuscito. D'altra parte, anche quel caricamento fallito non puo` essere
fallito completamente, visto che quel blocco contiene anche il
decompressore e il codice per caricare il secondo blocco. Potrebbe
essere magari solo il checksum ad aver fallito.
Questa analisi dovrebbe essere corretta se, senza la tua modifica, il
gioco si resetta dopo il caricamento del primo blocco headerless e, con
la modifica, la schermata viene mostrata senza errori. In tal caso, la
presenza di due istruzioni non documentate
ld ixl,a e ld ixh,a
non dovrebbe essere la causa del problema, anche perche` sono usate
anche nel decompressore.
Sempre se la mia analisi e` corretta, forse ti converrebbe provare ad
usare un'altro player di file TZX o TAP. Magari quello che usi potrebbe
lasciare delle spurie alla fine di ogni blocco che il loader custom del
gioco potrebbe avere problemi a gestire. Mi pare che tu avessi detto di
non avere uno Spectrum originale per vedere se il gioco carica su di
esso, vero?
-p
Other related posts:[zxspectrum] infinity: trovato punto chiave [zxspectrum] Re: infinity: trovato punto chiave [zxspectrum] Re: infinity: trovato punto chiave [zxspectrum] Re: infinity: trovato punto chiave [zxspectrum] Re: infinity: trovato punto chiave [zxspectrum] Re: infinity: trovato punto chiave [zxspectrum] Re: infinity: trovato punto chiave [zxspectrum] Re: infinity: trovato punto chiave [zxspectrum] Re: infinity: trovato punto chiave
|

|

|
[ Home |
Signup |
Help |
Login |
Archives |
Lists
]
All trademarks and copyrights within the FreeLists archives are owned
by their respective owners. Everything else ©2008 Avenir Technologies, LLC.
|

|
|