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!