Arm/thumb Gba....

Aperto da mentz, Febbraio 07, 2005, 12:39:13

Discussione precedente - Discussione successiva

mentz

Dall'analisi e dallo studio che sto facendo escono fuori le magagne...
Sopratutto quelle di chi fa i giochi...

Perché per copiare una decina di font di testo mappato, bisogna fare un ciclo di 188 righe di codice ??

Forse perché è un "porting" fatto a C. d. C.

Io la stessa cosa riesco a farla in una decina di righe...
Anche perché i font da prendere per essere copiati stanno poco sopra...

La modifiche a livello di codice sono quasi infelici, perché hanno avuto la brillante idea di fare quasi tutto il gioco in thumb il che significa si, maggior velocità, ma essendo una modalità a 16 bit invece che 32 dell'arm, comporta un limite nelle capacità di BRANCH (ossia salto di blocchi) dovendo gestire tutto con 16 bit...

(infatti la mia idea era di fare un'istruzione arm che riscrivesse in due mosse la grafica mappata in quel punto...Il codice funziona, ma dovendolo fare in thumb, non è possibile fare salti fino a fine rom o giù di lì...)

La cosa interessante dal punto di vista hacking è che il gioco in questione "Super Ghost 'n' Ghouls", le modiche della grafica mappata vanno fatte nella sezione di memoria 0x02000000. Il gioco inoltre carica del codice nella sezione 0x03000000, che dovrebbe essere la memoria della cartuccia e lo esegue ogni tanto...

la cosa peggiore è che il gioco , nel caso uno venisse ammazzato, ricarica tutto il gioco invece di avvalersi di tutto ciò che aveva già caricato... (che perdita di tempo...)...

L'unica soluzione che mi resta è prendermi questi grossi cicli e metterli su un file che poi mi compilo così cerco di vedere dove posso intervenire...

yuumeikai

Credo che ti sia già risposto da solo e/o sappia la soluzione.

Perché naturalmente scrivendo tutto in thumb la velocità di esecuzione aumenta parecchio, cosa che non avverrebe se si utilizzasse un livello superiore di programmazione.

|GeO|

No, il punto è arm vs thumb, non tanto linguaggi di alto livello vs asm...

mentz

A quanto pare va di moda caricare del codice nella memoria ed eseguirlo...(0x02000000 e 0x03000000)

per esempio l'intro di MODE7 carica le immagini nella memoria 0x02000000 e poi parecchio codice che eseguie direttamente da lì...
Poi non sono riuscito a capire in che punto ripassa alla rom...
ma credo che l'istruzione sia "BX r0" in cui r0 ha l'indirizzo dell'inizio della rom (ossia dopo l'header...)
Però è tutto fatto in ARM....