I puntatori hirom | ||
Capita spesso che mentre si è alle prese con una traduzione ci si accorga di non avere abbastanza spazio per poter inserire una parola o una frase. Per esempio prendiamo la parola "Level" che vorremo rendere in italiano "Livello". Si vede subito che se sulla ROM non ci sono due spazi liberi disponibili dopo "Level" non riusciremo mai a inserirci la parola "Livello". Questa è la tipica situazione in cui un hacking dei puntatori potrebbe risolvere il problema. Per prima cosa cerchiamo di capire che cosa sia un puntatore.
Senza perderci in tanti giri di parole il puntatore può assimilarsi al comando "Vai là".
Si tratta di una sequenza di byte corrispondenti a un indirizzo, il programma va a leggere
il testo nel punto indicato dal puntatore (nel nostro esempio Level). Item<FF>Equip<FF>Magic<FF> ... Come detto il puntatore serve a "puntare" (scusate il giro di parole) a un dato indirizzo
della nostra ROM, nel nostro caso a far leggere una determinata stringa di testo. Oggetti<FF>Equip<FF>Magia<FF> ... L'indirizzo di inizio delle seconde due parole è variato e il puntatore sta puntando ai
caratteri sbagliati. Facendo girare il gioco si potrebbe osservare che la parola Oggetti
venga correttamente visualizzata (in quanto il suo indirizzo iniziale non è variato), mentre
al posto di Equip verrebbe mostrato "ti". Il fenomeno si spiega perché la parola Oggetti
ha sconfinato, occupando l'indirizzo che prima era l'inizio di Equip. Quanto appena detto è molto generale ed applicabile a qualunque sistema, ora si vogliono analizzare in dettaglio i puntatori per SNES di tipo hirom. Bisogna innanzitutto spiegare
che cos'è l'header. In parole povere l'header non è altro che la parte iniziale di una ROM
e corrisponde ai primi 512 bytes (200 hex bytes). 8001008000000000AABB040000000000 00000000000000000000000000000000 00000000000000000000000000000000 00000000000000000000000000000000 00000000000000000000000000000000 00000000000000000000000000000000 00000000000000000000000000000000 00000000000000000000000000000000 00000000000000000000000000000000 00000000000000000000000000000000 00000000000000000000000000000000 00000000000000000000000000000000 00000000000000000000000000000000 00000000000000000000000000000000 00000000000000000000000000000000 00000000000000000000000000000000 00000000000000000000000000000000 00000000000000000000000000000000 00000000000000000000000000000000 00000000000000000000000000000000 00000000000000000000000000000000 00000000000000000000000000000000 00000000000000000000000000000000 00000000000000000000000000000000 00000000000000000000000000000000 00000000000000000000000000000000 00000000000000000000000000000000 00000000000000000000000000000000 00000000000000000000000000000000 00000000000000000000000000000000 00000000000000000000000000000000 00000000000000000000000000000000 Questo header in realtà non è parte della ROM, si tratta di dati aggiunti dai copiatori
usati per fare il dump e sono generalmente utilizzati solo da loro. E' però importante
tenerne conto anche nel rom hacking, perché la presenza dell'header influenza l'hacking
dei puntatori. Il primo passo per trovare i puntatori è quello di sapere l'inizio del blocco di testo e
quale il byte a cui corrisponde la fine di una stringa di testo. Non è detto che il primo
carattere di un dialogo sia la prima lettera, in quanto spesso il testo viene preceduto
da alcuni byte di controllo che regolano colore, posizione del testo, della finestra, etc.
Il passo successivo consiste nel leggere l'offset del primo carattere, cioé l'indirizzo dove comincia la
porzione di testo di cui vogliamo trovare il pointer. mickey |