[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: