Dirección de ejecución de un cartucho. Como?

Par Tolvatar

Paladin (1005)

Portrait de Tolvatar

15-05-2016, 18:33

Hola.
Me gustaria saber como se puede averiguar la dirección de ejecución de un cartucho.
En los últimos días he aprendido a dumpear cartuchos y me llama la curiosidad como se puede encontrar esa dirección.
El inicio y el fin es fácil, solo hay que volcar toda la rom del slot con el saverom.com y luego verlo con un editor hexadecimal.
Pero la de ejecución no tengo ni idea.
Supongo que habrá que tener conocimientos de programación pero igual se puede encontrar buscando alguna cadena en particular o algo así. Sería posible?

Otra cosilla. Es posible que los cartuchos mas antiguos de 8kbs tengan roms de 16kb y el programa esté dos veces en el cartucho? Lo digo porque al volcarlo siempre me saca un fichero de 16kbs con dicha rom duplicada.

Lo que hace el aburrimiento, verdad?
A ver si alguien puede ayudarme.
Gracias.

!login ou Inscrivez-vous pour poster

Par pitpan

Prophet (3152)

Portrait de pitpan

15-05-2016, 23:39

En el caso más sencillo, la cabecera de una ROM contiene lo siguiente:

byte 0: 'A'
byte 1: 'B'
bytes 2 y 3: dirección de ejecución (byte bajo primero, byte alto segundo)

La cabecera puede ser más compleja y tener más chicha, pero con esto te sirve para ir investigando: la mayoría de cartuchos de juegos funcionan así.

Par Miguel_Noe

Champion (465)

Portrait de Miguel_Noe

16-05-2016, 00:48

Par Tolvatar

Paladin (1005)

Portrait de Tolvatar

16-05-2016, 11:17

@pitpan.

Hola.
Por lo que he visto la cabecera de un binario es:
Byte 1: FE
Byte 2 y 3: dirección de inicio
Byte 4 y 5: dirección final
Byte 6 y 7: dirección de ejecución

La de inicio y final las conozco, pero la de ejecución no.
Puedo mirar en otros binarios ya volcados pero me gustaría averiguar como detectarla por mí mismo y no tener que estar rebuscando en el trabajo de otros.
Lo que pretendo es hacerme unos discos con las roms y poder ejecutarlas desde el disco. Se que es un metodo antiguo y superado hoy en día, pero esa era mi idea.

@Miguel_Noe.

Una lectura interesante con respecto a la segunda parte de las roms duplicadas en memoria.
Gracias por el enlace.
Un saludo.

Par Tolvatar

Paladin (1005)

Portrait de Tolvatar

16-05-2016, 11:40

Aunque ahora que lo pienso, igual no es posible ejecutar un fichero rom simplemente poniéndole una cabecera y haciendo un bload"fichero",r
Quizá mi idea es una tontería, no se

Par pitpan

Prophet (3152)

Portrait de pitpan

16-05-2016, 21:20

Sin usar un cargador específico, solo podrás ejecutar una ROM que esté en la página 2.

Si la ROM empieza con ABxy y está en &h8000, podrías simplemente añadirle la cabecera BIN de la que hablas:

FE,00,80,FF,BF,x,y... + volcado de la ROM

Pero empiezo a sospechar que estás tratando de reinventar la rueda...

Par Tolvatar

Paladin (1005)

Portrait de Tolvatar

16-05-2016, 23:54

Reinventar la rueda?

Solo intento ejecutar los archivos desde un disquete sin tener que recurrir a loadrom.com ni a ninguna aplicacion similar.
Y de paso aprender algo.
No hay razones oscuras ni conspiraciones ocultas.
No entiendo el comentario.

Par Tolvatar

Paladin (1005)

Portrait de Tolvatar

16-05-2016, 23:58

Y por cierto, con estas tonterias que estoy haciendo he encontradl un mensaje del programador en el hydlide en el que habla de su coche y su bici y pide regalos para su cumple.
Supongo que este mensaje seria conocido desde hace 30 años pero yo lo he vusto hoy.

Par pitpan

Prophet (3152)

Portrait de pitpan

17-05-2016, 12:11

A lo que me refiero es que efectivamente ya hay muchas herramientas para hacer lo que pretendes.

Si quieres una versión fácil, puedes incluso generar las cabeceras oportunas desde asMSX con el siguiente código (de nuevo, solo válido para ROMs que se ejecuten en la página 2).

.page 2
.basic
.start 7D75h
.incbin "fichero.rom"

Esto te generá un bonito BIN que podrás cargar con BLOAD desde disco.

Y si te va la marcha, puedes añadir la directiva .CAS o .WAV para que te genere, por el mismo precio, un fichero .CAS para cargar y probar en emuladores, o un fichero .WAV para cargar tal cual en un MSX real a través del puerto de cassette.

Lo bonito es la pista extra: la dirección 7D75h ejecuta la ROM que encuentre. Funciona de coña excepto en algunos ordenadores con firmware interno, como el malvadísimo Sony HB-75P. Pero tiene la ventaja de que funciona incluso con ROMs "diferentes" con programas en BASIC, mixtas (BASIC + código máquina) o incluso extensiones de BASIC.

Que lo disfrutes Wink

Par darrimar

Supporter (12)

Portrait de darrimar

18-05-2016, 00:01

PRINT PEEK(&HFCBF)+256*PEEK(&HFCC0) ó algo parecido (me vino a la mente como un flash!) daba la dirección de inicio. El bloque se ejecutaba con un DEFUSR=&Hloquedevuelveelprintanterior y después A=USR(0). Creo recordar que lo que escribo era tal cual....

Par jrcp_kun

Paragon (1410)

Portrait de jrcp_kun

18-05-2016, 21:39

la direccion de ejecucion viene siempre creo que despues del 41 42, El A B del principio