Posible proyecto : analizador de binarios de Atari

Para cualquier plataforma ATARI, computadores o consolas.
Avatar de Usuario
fcatrin
hard player
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

Mensaje por fcatrin »

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/
xt5
expert
expert
Mensajes: 512
Registrado: Mar Sep 18, 2007 1:16 am
Reputación: 0
Contactar:

Re: Posible proyecto : analizador de binarios de Atari

Mensaje por xt5 »

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
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.

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...
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.
la verdad creo la herramienta no la usarian mas de 4 pelagatos (hablando a nivel local) :(

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):

Imagen
Avatar de Usuario
fcatrin
hard player
hard player
Mensajes: 470
Registrado: Jue Abr 10, 2008 2:45 pm
Reputación: 5
Ubicación: Quilpué, Chile
Contactar:

Mensaje por fcatrin »

Gracias por la respuesta xt5!
me gustaria mas poder atachar un emulador en cualquier momento a un "dead listing", en vez de tener todo el atari corriendo...
A mi también, para asi poder mantener el código por fuera.
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
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.
conoces el IDA Pro
Usaba una versión vieja de el.

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
Avatar de Usuario
AsCrNet
hard player
hard player
Mensajes: 472
Registrado: Mar Nov 07, 2006 2:45 pm
Reputación: 0
Ubicación: PHO
Contactar:

Mensaje por AsCrNet »

XD me parece bien la idea po fcatrin, se podrian analizar muchos juego y sacar tecnicas de sonido y graficos a los juegos polacos , etc....

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

hay todo un mundo con una herramienta asi ]-)

saludos
Avatar de Usuario
fcatrin
hard player
hard player
Mensajes: 470
Registrado: Jue Abr 10, 2008 2:45 pm
Reputación: 5
Ubicación: Quilpué, Chile
Contactar:

Mensaje por fcatrin »

AsCrNet : es justamente lo que espero lograr, si es que es necesaria, aun estoy viendo
Avatar de Usuario
fcatrin
hard player
hard player
Mensajes: 470
Registrado: Jue Abr 10, 2008 2:45 pm
Reputación: 5
Ubicación: Quilpué, Chile
Contactar:

Mensaje por fcatrin »

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:

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.


>
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?
Avatar de Usuario
fcatrin
hard player
hard player
Mensajes: 470
Registrado: Jue Abr 10, 2008 2:45 pm
Reputación: 5
Ubicación: Quilpué, Chile
Contactar:

Mensaje por fcatrin »

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
Avatar de Usuario
fcatrin
hard player
hard player
Mensajes: 470
Registrado: Jue Abr 10, 2008 2:45 pm
Reputación: 5
Ubicación: Quilpué, Chile
Contactar:

Mensaje por fcatrin »

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  
bladehack
advantage
advantage
Mensajes: 197
Registrado: Vie Ene 11, 2008 1:55 pm
Reputación: 0

Mensaje por bladehack »

Wena fcatrin.
Gran pega te estay mandando.Por mi no cacho mucho en todo caso lo que estan haciendo pues no le pego tanto a la programacion.... ;-( . Pero de todas formas sigan no mas....
xt5
expert
expert
Mensajes: 512
Registrado: Mar Sep 18, 2007 1:16 am
Reputación: 0
Contactar:

Mensaje por xt5 »

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 :)
Avatar de Usuario
fcatrin
hard player
hard player
Mensajes: 470
Registrado: Jue Abr 10, 2008 2:45 pm
Reputación: 5
Ubicación: Quilpué, Chile
Contactar:

Mensaje por fcatrin »

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.
Avatar de Usuario
AsCrNet
hard player
hard player
Mensajes: 472
Registrado: Mar Nov 07, 2006 2:45 pm
Reputación: 0
Ubicación: PHO
Contactar:

Mensaje por AsCrNet »

fcatrin 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 eso era una idea planteada al lado :-D era hacer una base de datos para poder consultar el memory map y agregar ejemplos en basic o asm, y traducirlo. eso en terminos generales. y si no te cuesta mucho haz la BD nomas.
fcatrin escribió:pero queria contarles que ya estoy soportando la interpretación como Display Lists
si esta clarito el DL, XD
fcatrin escribió:Ahora ya tiene soporte para crear etiquetas y comentarios
XD x2


muy buen trabajo franco :-°
Avatar de Usuario
fcatrin
hard player
hard player
Mensajes: 470
Registrado: Jue Abr 10, 2008 2:45 pm
Reputación: 5
Ubicación: Quilpué, Chile
Contactar:

Mensaje por fcatrin »

Avatar de Usuario
AsCrNet
hard player
hard player
Mensajes: 472
Registrado: Mar Nov 07, 2006 2:45 pm
Reputación: 0
Ubicación: PHO
Contactar:

Mensaje por AsCrNet »

8-| de lujo franco :-° , no se podra ver el escenario o dibujo de un juego XD o por ultimo el set de caracteres que usa ? XD XD

saludos
Avatar de Usuario
fcatrin
hard player
hard player
Mensajes: 470
Registrado: Jue Abr 10, 2008 2:45 pm
Reputación: 5
Ubicación: Quilpué, Chile
Contactar:

Mensaje por fcatrin »

Escenarios: lo dudo.
Set de caracteres : SI

Pero falta mucho para llegar a eso aun. Cuando tenga una base estable, no me refiero a que no se caiga, sino a tener un diseño estable, yo creo que lo voy a subir para recibir aportes.
Responder
  • Similar Topics
    Respuestas
    Vistas
    Último mensaje