[zxspectrum] Re: infinity: trovato punto chiave
- From: "Alessandro Poppi" <apoppi@xxxxxxxx>
- To: <zxspectrum@xxxxxxxxxxxxx>
- Date: Mon, 3 Apr 2006 10:32:55 +0200
On Monday, April 03, 2006 9:47 AM [GMT+1],
Paolo Ferraris <pieffe8@xxxxxxxxxxxxx> wrote:
ho capito come funziona il caricamento.
Mitico
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?
Senza il tap modificato il caricamento procede senza intoppi fino alla fine
dell'emissione dei suoni. La schermata viene caricata perfettamente. Il
border ha le sue righettine colorate anche durante il successivo, piu` lungo
blocco (quello del programma vero e proprio).
Contestualmente con la fine del suono, avviene il reset. Immagina di aver
messo un rele` microfonico davanti alle casse, che "preme" il bottone di
reset appena c'e' silenzio. :-)
3) con la modifica (salto non condizionato), vedi la schermata del
caricamento?
Con la modifica, il comportamento del badaloc diventa identico a quello di
realspec, compresa la giocabilita`. Dopo la fine del suono c'e' un breve
ritardo (circa un secondo, come su realspec) poi c'e' quella schermatina con
la scritta al centro e subito dopo il menu principale, dove premendo un
tasto la partita ha inizio. La sola cosa che manca sono i suoni dal chip AY.
http://www.cs.utexas.edu/users/otto/infinity.tap
(il file verra` cancellato fra pochi giorni)
Preso! Appena torno a casa, lo carico.
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.
Questo e` proprio cio` che mi lascia piu` perplesso: io non mi ero accorto
dell'altra chiamata seguita da RST0, quindi ho modificato solo la prima. Non
mi spiego il perche` del reset solo dopo la fine di tutto il caricamento.
Non ha senso, ma e` cio` che succede.
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.
La schermata e` assolutamente sempre stata caricata bene, in tutti i casi
(anche con la versione non modificata). Quando stamattina ho visto con il
debugger che veniva eseguita solo dopo il caricamento del blocco della
schermata, non ho piu` capito come funzioni la mia modifica. :-)
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.
Gia`. Questa e` la logica. Solo che il badaloc e` di altro avviso (quasi
quasi metto in linea un filmato :-) )
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.
Non dovrebbero esserlo perche` le uso anche io nella mia bootrom.
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.
Questo apre la strada alla possibilita` che l'effetto della modifica sia
stato casuale? I caricamenti corretti sono stati 3, ma in effetti non
bastano.
Mi pare che tu
avessi detto di non avere uno Spectrum originale per vedere se il gioco
carica su di
esso, vero?
Ne ho uno in cui non funziona piu` il banco di ram superiore, quindi e`
diventato un 16K. Ha anche dei problemi alla tastiera, ma quelli sarebbero
facilmente risolvibili.
Se montassi a ragno una ram statica da 32K pensi che risolverei?
Ciao e molte grazie!
Other related posts: