[zxspectrum] infinity: trovato punto chiave

  • From: "Alessandro" <apoppi@xxxxxxxx>
  • To: <zxspectrum@xxxxxxxxxxxxx>
  • Date: Sun, 2 Apr 2006 20:09:12 +0200

Il reset non e` frutto di un malfunzionamento accidentale, ma di un bel RST_0 deliberatamente piazzato in testa al programma.

Dopo un po` di sbattimento per capire come veniva caricato il loader, sono arrivato al punto in cui l'header da 262 bytes caricato come programma basic (il primo blocco del tzx) riloca se stesso in una zona di ram in alto (per la precisione all'indirizzo $F92B) e passa li` in esecuzione.

La prima cosa che fa e` chiamare una subroutine e poi, se il carry ritorna reset, esegue uno spettacoloso RST 0. Sostituito con un NOP e ricalcolato il checksum per permettere il caricamento (ho lavorato in formato .tap perche` lo conosco meglio) il gioco e` diventato perfettamente "compatibile" e sta girando in questo momento sul badaloc.

A questo punto, appena avro` tempo (non so perche` ma e` sempre ora di mangiare :-)) dovro` scoprire cosa fa quella subroutine, l'ipotesi iniziale di Paolo circa l'incompatibilita` con istruzioni non documentate e` ora piu` che probabile. Non so se sperare che avesse ragione (non risolvibile se non con una "compatibility-cartridge :-) con sopra uno Z80A) oppure no (cercare un qualche casino hardware).

Qui http://www.zxbada.bbk.org/Infinity_NO-RST0.zip e` presente lo stato attuale del "progetto", con il disassemblato dell'header (ho inserito i commenti dei punti coinvolti) nonche` il file .tap originale (che va in crash), un eseguibile con sorgente "no_rst0.exe" che genera un nuovo .tap (modified.tap) nonche` il modified.tap stesso, che funziona perfettamente.

Ciao!


Other related posts: