Go to the FreeLists Home Page Home Signup Help Login
 



Browse zxspectrum: This Month's ArchiveMain Archive PageRelated postsPrevious by DateNext by Date

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