Posible proyecto : analizador de binarios de Atari
- fcatrin
- hard player
- Mensajes: 470
- Registrado: Jue Abr 10, 2008 2:45 pm
- Reputación: 5
- Ubicación: Quilpué, Chile
- Contactar:
Posible proyecto : analizador de binarios de Atari
Hola!
Por ahi vi que estaban resucitando mi cargador CAIN y para ayudar en un problema con unos juegos que no cargaban me tuve que hacer una pequeña aplicación que me permitiera ver la estructura del binario de atari en PC.
El esfuerzo fue bien poco, me tomó como media hora mas o menos. Lo unico que hace es cargar el binario y luego permite hacer un dump hexadecimal de lo que debería haber quedado en memoria al final de la carga.
Creo que con un más de esfuerzo se podría transformar en una herramienta bastante útil y potente, por ejemplo que permitiera lo siguiente:
1. Desensamblar
2. Mostrar Display Lists
3. Mostrar gráficos
4. Aplicar modificaciones y volver a escribir el binario
Creo que una aplicación de ese tipo podría ayudar a:
1. aprender viendo como programaban esos juegos
2. hacer parches para vidas infinitas o similar
3. hacer parches para cualquier otra cosa
Incluso estaba pensando en desensamblar algunos juegos miticos y documentar el código en forma colaborativa para recuperar parte del código fuente y que quede para la posteridad.
Mi duda es si este esfuerzo es o no en vano. Yo me daría por satisfecho aunque fuera el único usuario de esta herramienta. Pero mi duda es si ya existe algo asi. Si ya existe entonces mi esfuerzo sería inutil y mejor uso lo que ya existe.
Pienso en algo asi :
1. El usuario abre un binario y puede ver la estructura general
2. el usuario examina la memoria y le pide al visualizador que le muestre ese segmento como assembler, como display list, como texto, etc.
3. el usuario toma el texto en assembler y le agrega algun comentario en base a lo que va entendiendo, luego esto se graba como si fuera código fuente.
Para los curiosos, deje el dumper ratón que hice y un ejemplo de uso en esta dirección:
http://www.tuxpan.com/fcatrin/xexdump/
Por ahi vi que estaban resucitando mi cargador CAIN y para ayudar en un problema con unos juegos que no cargaban me tuve que hacer una pequeña aplicación que me permitiera ver la estructura del binario de atari en PC.
El esfuerzo fue bien poco, me tomó como media hora mas o menos. Lo unico que hace es cargar el binario y luego permite hacer un dump hexadecimal de lo que debería haber quedado en memoria al final de la carga.
Creo que con un más de esfuerzo se podría transformar en una herramienta bastante útil y potente, por ejemplo que permitiera lo siguiente:
1. Desensamblar
2. Mostrar Display Lists
3. Mostrar gráficos
4. Aplicar modificaciones y volver a escribir el binario
Creo que una aplicación de ese tipo podría ayudar a:
1. aprender viendo como programaban esos juegos
2. hacer parches para vidas infinitas o similar
3. hacer parches para cualquier otra cosa
Incluso estaba pensando en desensamblar algunos juegos miticos y documentar el código en forma colaborativa para recuperar parte del código fuente y que quede para la posteridad.
Mi duda es si este esfuerzo es o no en vano. Yo me daría por satisfecho aunque fuera el único usuario de esta herramienta. Pero mi duda es si ya existe algo asi. Si ya existe entonces mi esfuerzo sería inutil y mejor uso lo que ya existe.
Pienso en algo asi :
1. El usuario abre un binario y puede ver la estructura general
2. el usuario examina la memoria y le pide al visualizador que le muestre ese segmento como assembler, como display list, como texto, etc.
3. el usuario toma el texto en assembler y le agrega algun comentario en base a lo que va entendiendo, luego esto se graba como si fuera código fuente.
Para los curiosos, deje el dumper ratón que hice y un ejemplo de uso en esta dirección:
http://www.tuxpan.com/fcatrin/xexdump/
Re: Posible proyecto : analizador de binarios de Atari
Lo mas util sería implemtarle algo de emulacion basica, solo del 6502, nada de los perifericos de atari. En este momento el Atari800Win tiene desensamblador y debugger, es medio basico, pero la depuracion paso a paso sirve un monton.fcatrin escribió: Creo que con un más de esfuerzo se podría transformar en una herramienta bastante útil y potente, por ejemplo que permitiera lo siguiente:
1. Desensamblar
2. Mostrar Display Lists
3. Mostrar gráficos
4. Aplicar modificaciones y volver a escribir el binario
La emulacion completa (Atari800Win) es buena, pero no mucho para el analisis de codigo, a mi me gustaria mas poder atachar un emulador en cualquier momento a un "dead listing", en vez de tener todo el atari corriendo...
la verdad creo la herramienta no la usarian mas de 4 pelagatos (hablando a nivel local)fcatrin escribió: Mi duda es si este esfuerzo es o no en vano. Yo me daría por satisfecho aunque fuera el único usuario de esta herramienta.

me imagino que existen muchas herramientas asi, que puedan cargar una imagen, dumpear ATASCII, asemblar, desasemblar y parchar, en lo personal no he buscado, pero me imagino que sera cosa de preguntar en atariage.com
conoces el IDA Pro (el desensamblador interactivo mas groso que existe hasta ahora :) )?
yo trabajo con el de hace años y como dentro de los procesadores que soporta tiene el 6502, hace algunos meses hice un cargador de XEX, aqui esta el binario y el source de mi cargador (esta compilado para IDA 5.2) http://www.ingenieria-inversa.cl/retro/crap/ida-xex.rar
Ida te maneja los label, referencias cruzadas, etc de manera muy profesional, incluso puedes parchar el codigo y te parcha el XEX automaticamente.
y aqui una imagen de una de las formas que tiene para ver el flujo del codigo (es del test.xex de que venia con tu cargador):

- fcatrin
- hard player
- Mensajes: 470
- Registrado: Jue Abr 10, 2008 2:45 pm
- Reputación: 5
- Ubicación: Quilpué, Chile
- Contactar:
Gracias por la respuesta xt5!
http://www.tuxpan.com/fcatrin/es/commen ... d=20040709
Es excelente. Usaba una versión para DOS, no había visto el soporte multiprocesador. Voy a revisarlo bien
Gracias por el dato!
BTW: hace un rato atras agregué un desensamblador rudimentario
A mi también, para asi poder mantener el código por fuera.me gustaria mas poder atachar un emulador en cualquier momento a un "dead listing", en vez de tener todo el atari corriendo...
Lo más cercano que encontré es una que se llama http://www.atarimax.com/dis6502/index.html Pero es sólo para windows, yo quiero tener algo para usar en cualquier lugar.me imagino que existen muchas herramientas asi, que puedan cargar una imagen, dumpear ATASCII, asemblar, desasemblar y parchar, en lo personal no he buscado, pero me imagino que sera cosa de preguntar en atariage.com
Usaba una versión vieja de el.conoces el IDA Pro
http://www.tuxpan.com/fcatrin/es/commen ... d=20040709
Es excelente. Usaba una versión para DOS, no había visto el soporte multiprocesador. Voy a revisarlo bien
Gracias por el dato!
BTW: hace un rato atras agregué un desensamblador rudimentario
Código: Seleccionar todo
>b
Block : 2020-203A. Length: 27
Block : 5400-544C. Length: 77
Block : 02E2-02E3. Length: 2
Exec: 5400
Block : 5000-53FF. Length: 1024
Block : 8000-BBFF. Length: 15360
Block : 02E2-02E3. Length: 2
Exec: 5410
>u
start>5410
5410 A9 00 LDA #$00
5412 85 08 STA $08
5414 8D 44 02 STA $0244
5417 A9 27 LDA #$27
5419 85 02 STA $02
541B 85 0A STA $0A
541D 85 0C STA $0C
541F A9 54 LDA #$54
5421 85 03 STA $03
5423 85 0B STA $0B
5425 85 0D STA $0D
5427 A2 00 LDX #$00
5429 8E 2F 02 STX $022F
542C 8E 00 D4 STX $D400
542F BD 00 50 LDA $5000,X
5432 9D 00 BC STA $BC00,X
- AsCrNet
- hard player
- Mensajes: 472
- Registrado: Mar Nov 07, 2006 2:45 pm
- Reputación: 0
- Ubicación: PHO
- Contactar:

tambien se podrian modificar juegos, y hacer version de juegos por ejemplo Montezuma's Revenge con final, o pasar de PAL a NTSC

hay todo un mundo con una herramienta asi
![Malvado ]-)](./images/smilies/malvado.gif)
saludos
- fcatrin
- hard player
- Mensajes: 470
- Registrado: Jue Abr 10, 2008 2:45 pm
- Reputación: 5
- Ubicación: Quilpué, Chile
- Contactar:
He seguido avanzando con este mini-retroproyecto. Ahora el programita puede manejar el memory map del atari y dar ayuda. Aun lo tengo operando en modo interactivo por consola, porque creo que la parte mas importante es que funcione antes de la interfaz que será mas que nada maquillaje.
Aqui va un ejemplo de como esta operando hoy:
Como pueden ver, ahora muestro las etiquetas cuando son direcciones conocidas y tambièn puedo mostrar el significado de las etiquetas.
Cuando hice eso me recordó que había por ahi una idea de generar una especie de base de datos con el memory map, y ya que mi programa lo puede leer y entender (con pocas modificaciones) podria generar esa base de datos, pero no recuerdo exactamente lo que querían hacer y no encontré el post... quizas fue en el foro vecino?
Aqui va un ejemplo de como esta operando hoy:
Código: Seleccionar todo
q: quit d:dump b:blocks n:name u:disasm
>u
start>5410
5410 A9 00 LDA #$00
5412 85 08 STA WARMST
5414 8D 44 02 STA COLDST
5417 A9 27 LDA #$27
5419 85 02 STA CASINI
541B 85 0A STA DOSVEC
541D 85 0C STA DOSINI
541F A9 54 LDA #$54
5421 85 03 STA CASINI+1
5423 85 0B STA DOSVEC+1
5425 85 0D STA DOSINI+1
5427 A2 00 LDX #$00
5429 8E 2F 02 STX SDMCTL
542C 8E 00 D4 STX DMACTL
542F BD 00 50 LDA $5000,X
5432 9D 00 BC STA $BC00,X
more>n
name>DOSVEC
Start vector for disk (or non-cartridge) software. This is the
address BASIC jumps to when you call up DOS. Can be set by
user to point to your own routine, but RESET will return DOSVEC
to the original address. To prevent this, POKE 5446 with the LSB
and 5450 with the MSB of your vector address and re-save DOS
using the WRITE DOS FILES option in the menu. Locations 10
and 11 are usually loaded with 159 and 23 ($9F and $17),
respectively. This allows the DUPSYS section of DOS to be
loaded when called. It is initially set to blackboard mode vector
(58481; $E471--called by typing "BYE" or "B." from BASIC); it
will also vector to the cassette run address if no DOS vector is
loaded in. If you create an AUTORUN.SYS file that doesn't end
with an RTS instruction, you should set BOOT? to one and 580
($244) to zero.
>
Cuando hice eso me recordó que había por ahi una idea de generar una especie de base de datos con el memory map, y ya que mi programa lo puede leer y entender (con pocas modificaciones) podria generar esa base de datos, pero no recuerdo exactamente lo que querían hacer y no encontré el post... quizas fue en el foro vecino?
- fcatrin
- hard player
- Mensajes: 470
- Registrado: Jue Abr 10, 2008 2:45 pm
- Reputación: 5
- Ubicación: Quilpué, Chile
- Contactar:
Se que le interesa a pocos pelagatos, pero queria contarles que ya estoy soportando la interpretación como Display Lists:
Código: Seleccionar todo
>dl
start>8031
8031 70 8 Blank lines
8032 70 8 Blank lines
8033 50 6 Blank lines
8034 44 E0 37 Text Mode 0 (8 scan lines) Load Memory Scan at 37E0
8037 04 Text Mode 0 (8 scan lines)
8038 04 Text Mode 0 (8 scan lines)
8039 04 Text Mode 0 (8 scan lines)
803A 84 Text Mode 0 (8 scan lines) Display List Interrupt (DLI)
803B 04 Text Mode 0 (8 scan lines)
803C 04 Text Mode 0 (8 scan lines)
803D 04 Text Mode 0 (8 scan lines)
803E 04 Text Mode 0 (8 scan lines)
803F 04 Text Mode 0 (8 scan lines)
8040 84 Text Mode 0 (8 scan lines) Display List Interrupt (DLI)
8041 04 Text Mode 0 (8 scan lines)
8042 04 Text Mode 0 (8 scan lines)
more>
8043 04 Text Mode 0 (8 scan lines)
8044 04 Text Mode 0 (8 scan lines)
8045 04 Text Mode 0 (8 scan lines)
8046 04 Text Mode 0 (8 scan lines)
8047 84 Text Mode 0 (8 scan lines) Display List Interrupt (DLI)
8048 04 Text Mode 0 (8 scan lines)
8049 04 Text Mode 0 (8 scan lines)
804A 04 Text Mode 0 (8 scan lines)
804B 04 Text Mode 0 (8 scan lines)
804C 84 Text Mode 0 (8 scan lines) Display List Interrupt (DLI)
804D 04 Text Mode 0 (8 scan lines)
804E 04 Text Mode 0 (8 scan lines)
804F 41 31 80 JMP 8031
- fcatrin
- hard player
- Mensajes: 470
- Registrado: Jue Abr 10, 2008 2:45 pm
- Reputación: 5
- Ubicación: Quilpué, Chile
- Contactar:
Ya queda poco para comenzar a trabajar en la interfaz gràfica. Ahora ya tiene soporte para crear etiquetas y comentarios:
Código: Seleccionar todo
>l
addr>5427
label >START
>a
start>START
START:
5427 A2 00 LDX #$00
5429 8E 2F 02 STX SDMCTL
542C 8E 00 D4 STX DMACTL
LOOP:
542F BD 00 50 LDA main_screen,X ; inicializa 4 paginas con 0
5432 9D 00 BC STA $BC00,X
5435 BD 00 51 LDA sec_screen,X
5438 9D 00 BD STA $BD00,X
543B BD 00 52 LDA $5200,X
543E 9D 00 BE STA $BE00,X
5441 BD 00 53 LDA $5300,X
5444 9D 00 BF STA $BF00,X
5447 E8 INX
5448 D0 E5 BNE LOOP
544A 4C 00 80 JMP MAINSTART
; Aqui no hay nada mas
; el codigo principal sigue en MAINSTART
544D 00 BRK
544E 00 BRK
Cada vez toma mas y mas forma :-° gran trabajo fcatrin!!
Lo de la GUI yo creo que es una de las cosas que menos importan.
Aparte de la emulacion otra ayuda importante para el analisis de codigo -en mi opinion- es el uso de reconocimento de librerias contra una base de datps (como en el caso de FLIRT), pero por lo que lei de quien porto Donkey Kong a Atari el desarrollo era muy desordenado y por lo menos en Atari no tenian librerias y cada uno se las arreglaba como podia... Aunque por otro lado si miras el source de D.K. veras que lo que usa mucho (y tambien se prodrian identificar contra una base de datos) son las macros.
Bueno, esperamos que sigas como vas :)
Lo de la GUI yo creo que es una de las cosas que menos importan.
Aparte de la emulacion otra ayuda importante para el analisis de codigo -en mi opinion- es el uso de reconocimento de librerias contra una base de datps (como en el caso de FLIRT), pero por lo que lei de quien porto Donkey Kong a Atari el desarrollo era muy desordenado y por lo menos en Atari no tenian librerias y cada uno se las arreglaba como podia... Aunque por otro lado si miras el source de D.K. veras que lo que usa mucho (y tambien se prodrian identificar contra una base de datos) son las macros.
Bueno, esperamos que sigas como vas :)
- fcatrin
- hard player
- Mensajes: 470
- Registrado: Jue Abr 10, 2008 2:45 pm
- Reputación: 5
- Ubicación: Quilpué, Chile
- Contactar:
Tremendo articulo que me enviaste! esas historias son muy distintas a como uno las imagina! Muchas gracias!
Estuve mirando el otro enlace y claro, lo que hacen es reconocer funciones de bibliotecas estándares que siempre quedan mapeadas en alguna parte del .exe en el caso de ejecutables de PC. En el caso del Atari al menos a primera vista no creo que existan casos asi, pero tambien puede ser por ignorancia porque no he visto aplicaciones completas, casi siempre miraba lo que andaba buscando y cuando lo encontraba me detenía ahi.
Yo creo que a medida que vayamos revisando código nos vamos a encontrar con algunas funciones conocidas entre juegos de un mismo fabricante, asi que igual hay que tener en consideración esta idea.
Para el monitor, no tengo muy claro como implementarlo aun, considerando que para simular un trozo de código se necesita tener el valor de los registros, y hay mucha interacción con el hardware aparte del procesador. Al menos por ahora no le voy a dar prioridad.
Hoy comencé a trabajar en la interfaz de usuario después de almuerzo, aun no me muevo con soltura porque no recuerdo bien como funcionaba la API que estoy usando (SWT). Pero voy a hacer mi mejor esfuerzo.
Estuve mirando el otro enlace y claro, lo que hacen es reconocer funciones de bibliotecas estándares que siempre quedan mapeadas en alguna parte del .exe en el caso de ejecutables de PC. En el caso del Atari al menos a primera vista no creo que existan casos asi, pero tambien puede ser por ignorancia porque no he visto aplicaciones completas, casi siempre miraba lo que andaba buscando y cuando lo encontraba me detenía ahi.
Yo creo que a medida que vayamos revisando código nos vamos a encontrar con algunas funciones conocidas entre juegos de un mismo fabricante, asi que igual hay que tener en consideración esta idea.
Para el monitor, no tengo muy claro como implementarlo aun, considerando que para simular un trozo de código se necesita tener el valor de los registros, y hay mucha interacción con el hardware aparte del procesador. Al menos por ahora no le voy a dar prioridad.
Hoy comencé a trabajar en la interfaz de usuario después de almuerzo, aun no me muevo con soltura porque no recuerdo bien como funcionaba la API que estoy usando (SWT). Pero voy a hacer mi mejor esfuerzo.
- AsCrNet
- hard player
- Mensajes: 472
- Registrado: Mar Nov 07, 2006 2:45 pm
- Reputación: 0
- Ubicación: PHO
- Contactar:
si eso era una idea planteada al ladofcatrin escribió:Cuando hice eso me recordó que había por ahi una idea de generar una especie de base de datos con el memory map, y ya que mi programa lo puede leer y entender (con pocas modificaciones) podria generar esa base de datos, pero no recuerdo exactamente lo que querían hacer y no encontré el post... quizas fue en el foro vecino?

si esta clarito el DL,fcatrin escribió:pero queria contarles que ya estoy soportando la interpretación como Display Lists

fcatrin escribió:Ahora ya tiene soporte para crear etiquetas y comentarios

muy buen trabajo franco :-°
-
- Similar Topics
- Respuestas
- Vistas
- Último mensaje
-
- 0 Respuestas
- 28110 Vistas
-
Último mensaje por Poltergeist