Desentrañando los misterios del Frogger (¡¡croac!!)

Foro dedicado a la programación en todo tipo de sistemas clásicos.
Avatar de Usuario
gamer80
Atari 1040 STf
Atari 1040 STf
Mensajes: 781
Registrado: 31 Oct 2011, 19:34
Ubicación: ESPARTA
Gracias dadas: 20 veces
Gracias recibidas: 34 veces
Contactar:

Re: Desentrañando los misterios del Frogger (¡¡croac!!)

Mensajepor gamer80 » 12 Nov 2018, 15:00

En esa época era la protección que había, y la resina epoxi, eso si que era ](*,) . luego vino el chip Kabuki y demás monadas :lol:
"Hazlo o no lo hagas, pero no lo intentes" -Maestro Yoda-

Avatar de Usuario
Bubu
Atari 1040 STf
Atari 1040 STf
Mensajes: 886
Registrado: 04 Abr 2018, 23:10
Sistema Favorito: Spectrum 16Kb/48Kb
primer_sistema: Spectrum 16Kb/48Kb
consola_favorita: Atari 2600
Primera consola: Nintendo GameBoy
Gracias dadas: 20 veces
Gracias recibidas: 60 veces

Re: Desentrañando los misterios del Frogger (¡¡croac!!)

Mensajepor Bubu » 12 Nov 2018, 17:43

explorer escribió:El propio MAME, entrando en modo depuración, te puede sacar el desensamblado de la ROM y grabarlo a disco.


He entrado a MAME en modo debug con el frogger, y se ve esto:

frogger.png
frogger.png (243.45 KiB) Visto 8546 veces


Pero nu veo opción alguna pa grabar a disco el desensamblado. ¿Andandará?

Por cierto, obsérvese que sin haber ejecutado aún ni una sola línea de código, la pantalla aparece llena de ceros, y ya aparece la mitad superior con fondo azul (el río) y la mitad inferior con fondo negro (la carretera). El asunto de los ceros lo puedo explicar porque la RAM está llena de ceros (o del complemetario 0xFF) y eso hace que el chip de vídeo pinte ceros. Pero lo de que una mitad esté de azul y otra de negro, no le encuentro explicación. Sólo se me ocurre que sea cosa del chip de vídeo, porque desde luego la ROM no es.
Si algo funciona... ¡¡NO LO TOQUES!! ¡¡NI DE COÑA!!

Avatar de Usuario
explorer
MSX Turbo R
MSX Turbo R
Mensajes: 398
Registrado: 11 May 2014, 17:10
Sistema Favorito: Atari ST
primer_sistema: Atari 800XL/600XL
consola_favorita: Atari 2600
Primera consola: Atari 2600
Ubicación: Valladolid, España
Gracias dadas: 2 veces
Gracias recibidas: 138 veces
Contactar:

Re: Desentrañando los misterios del Frogger (¡¡croac!!)

Mensajepor explorer » 12 Nov 2018, 21:45

En la caja de texto de abajo, ves que está parpadeando el cursor.

Si ahí escribes help te dará un resumen de la ayuda. Y con help memory ayuda más específica sobre el volcado de la memoria. En concreto, el que necesitas es el comando dasm

dasm archivo, dirección, longitud[, códigos de operación[, cpu]]

Escribe help dasm para más detalle.

En el caso del Frogger... hay dos procesadores z80. Veo que uno de ellos es el principal, mientras que el otro se encarga del sonido (vete al menú Debug, opción New Dasm Window. En la parte derecha, arriba, verás el selector de CPU).

Avatar de Usuario
Bubu
Atari 1040 STf
Atari 1040 STf
Mensajes: 886
Registrado: 04 Abr 2018, 23:10
Sistema Favorito: Spectrum 16Kb/48Kb
primer_sistema: Spectrum 16Kb/48Kb
consola_favorita: Atari 2600
Primera consola: Nintendo GameBoy
Gracias dadas: 20 veces
Gracias recibidas: 60 veces

Re: Desentrañando los misterios del Frogger (¡¡croac!!)

Mensajepor Bubu » 14 Nov 2018, 10:56

OK, ya lo tengo, muchas gracias, explorer:


Código: Seleccionar todo

0000: 3A 00 40      ld   a,($4000)
0003: FE 55         cp   $55
0005: CA 01 40      jp   z,$4001
0008: 3A 00 88      ld   a,($8800)
000B: 31 00 88      ld   sp,$8800
000E: C3 A3 02      jp   $02A3
0011: FF            rst  $38
0012: FF            rst  $38
0013: FF            rst  $38
0014: FF            rst  $38
0015: FF            rst  $38
0016: FF            rst  $38
0017: FF            rst  $38
0018: 4F            ld   c,a
0019: 3A FE 83      ld   a,($83FE)
001C: B7            or   a
001D: C8            ret  z
001E: E5            push hl
001F: 21 00 83      ld   hl,$8300
0022: 34            inc  (hl)
0023: 7E            ld   a,(hl)
0024: 6F            ld   l,a
0025: 71            ld   (hl),c
0026: E1            pop  hl
0027: C9            ret
etc


Por curiosidad he buscado las instrucciones "IM", "DI", y "EI", y no aparece ni una. ¿Sisnifica esto que no utiliza interrupciones enmascarables? He visto que en la dirección 0x0066 hay chicha, por lo que parece que usa interrupción NMI:

Código: Seleccionar todo

0066: F5            push af
0067: E5            push hl
0068: D5            push de
0069: C5            push bc
006A: DD E5         push ix
006C: FD E5         push iy
006E: 3A 00 88      ld   a,($8800)
0071: AF            xor  a
0072: 32 08 B8      ld   ($B808),a
0075: CD F0 2C      call $2CF0
etc
Si algo funciona... ¡¡NO LO TOQUES!! ¡¡NI DE COÑA!!

Avatar de Usuario
explorer
MSX Turbo R
MSX Turbo R
Mensajes: 398
Registrado: 11 May 2014, 17:10
Sistema Favorito: Atari ST
primer_sistema: Atari 800XL/600XL
consola_favorita: Atari 2600
Primera consola: Atari 2600
Ubicación: Valladolid, España
Gracias dadas: 2 veces
Gracias recibidas: 138 veces
Contactar:

Re: Desentrañando los misterios del Frogger (¡¡croac!!)

Mensajepor explorer » 14 Nov 2018, 14:44

El Frogger está basado en el hardware del juego Galaxian.

Debes estudiar el código fuente galaxian.cpp del MAME de la descripción de esta placa. Ahí encontrarás mapa de memoria, descripción de las interrupciones, comunicación entre la CPU principal y la de sonido, etc.

Es muy fácil: busca por el código por la secuencia "frog".

Por otra parte, he visto que alguien comenzó el desensamblado del Frogger, pero se cansó enseguida. Al menos, sacó el código hasta la dirección $2FCF.

Avatar de Usuario
Bubu
Atari 1040 STf
Atari 1040 STf
Mensajes: 886
Registrado: 04 Abr 2018, 23:10
Sistema Favorito: Spectrum 16Kb/48Kb
primer_sistema: Spectrum 16Kb/48Kb
consola_favorita: Atari 2600
Primera consola: Nintendo GameBoy
Gracias dadas: 20 veces
Gracias recibidas: 60 veces

Re: Desentrañando los misterios del Frogger (¡¡croac!!)

Mensajepor Bubu » 14 Nov 2018, 19:28

Según acabo de ver el galaxian.cpp lleva dentro la misma información que el frogger.c que enlacé, al menos en eso coincide el tema, jiji.
Aquí está el mapa de memoria:

Código: Seleccionar todo

map(0x0000, 0x3fff).rom();
   map(0x8000, 0x87ff).ram();
   map(0x8800, 0x8800).mirror(0x07ff).r("watchdog", FUNC(watchdog_timer_device::reset_r));
   map(0xa800, 0xabff).mirror(0x0400).ram().w(FUNC(galaxian_state::galaxian_videoram_w)).share("videoram");
   map(0xb000, 0xb0ff).mirror(0x0700).ram().w(FUNC(galaxian_state::galaxian_objram_w)).share("spriteram");
   map(0xb808, 0xb808).mirror(0x07e3).w(FUNC(galaxian_state::irq_enable_w));
   map(0xb80c, 0xb80c).mirror(0x07e3).w(FUNC(galaxian_state::galaxian_flip_screen_y_w));
   map(0xb810, 0xb810).mirror(0x07e3).w(FUNC(galaxian_state::galaxian_flip_screen_x_w));
   map(0xb818, 0xb818).mirror(0x07e3).w(FUNC(galaxian_state::coin_count_0_w)); /* IOPC7 */
   map(0xb81c, 0xb81c).mirror(0x07e3).w(FUNC(galaxian_state::coin_count_1_w)); /* POUT1 */
   map(0xc000, 0xffff).rw(FUNC(galaxian_state::frogger_ppi8255_r), FUNC(galaxian_state::frogger_ppi8255_w));
   


Y aquí el de los puertos:

Código: Seleccionar todo

   PORT_START("IN0")
   PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_JOYSTICK_UP ) PORT_4WAY PORT_COCKTAIL
   PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_UNKNOWN ) /* 1P shoot2 - unused */
   PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_SERVICE1 )
   PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_UNKNOWN ) /* 1P shoot1 - unused */
   PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_JOYSTICK_RIGHT ) PORT_4WAY
   PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_JOYSTICK_LEFT ) PORT_4WAY
   PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_COIN2 )
   PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_COIN1 )

   PORT_START("IN1")
   PORT_DIPNAME( 0x03, 0x00, DEF_STR( Lives ) )
   PORT_DIPSETTING(    0x00, "3" )
   PORT_DIPSETTING(    0x01, "5" )
   PORT_DIPSETTING(    0x02, "7" )
   PORT_DIPSETTING(    0x03, "256 (Cheat)")
   PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_UNKNOWN ) /* 2P shoot2 - unused */
   PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_UNKNOWN ) /* 2P shoot1 - unused */
   PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_JOYSTICK_RIGHT ) PORT_4WAY PORT_COCKTAIL
   PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_JOYSTICK_LEFT ) PORT_4WAY PORT_COCKTAIL
   PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_START2 )
   PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_START1 )

   PORT_START("IN2")
   PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_JOYSTICK_DOWN ) PORT_4WAY PORT_COCKTAIL
   PORT_DIPNAME( 0x06, 0x00, DEF_STR( Coinage ) )
   PORT_DIPSETTING(    0x02, "A 2/1 B 2/1 C 2/1" )
   PORT_DIPSETTING(    0x04, "A 2/1 B 1/3 C 2/1" )
   PORT_DIPSETTING(    0x00, "A 1/1 B 1/1 C 1/1" )
   PORT_DIPSETTING(    0x06, "A 1/1 B 1/6 C 1/1" )
   PORT_DIPNAME( 0x08, 0x00, DEF_STR( Cabinet ) )
   PORT_DIPSETTING(    0x00, DEF_STR( Upright ) )
   PORT_DIPSETTING(    0x08, DEF_STR( Cocktail ) )
   PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_JOYSTICK_UP ) PORT_4WAY
   PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_UNUSED )
   PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_JOYSTICK_DOWN ) PORT_4WAY
   PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_UNUSED )

   PORT_START("IN3")   /* need for some PPI accesses */
   PORT_BIT( 0xff, 0x00, IPT_UNUSED )
   
Si algo funciona... ¡¡NO LO TOQUES!! ¡¡NI DE COÑA!!

Avatar de Usuario
explorer
MSX Turbo R
MSX Turbo R
Mensajes: 398
Registrado: 11 May 2014, 17:10
Sistema Favorito: Atari ST
primer_sistema: Atari 800XL/600XL
consola_favorita: Atari 2600
Primera consola: Atari 2600
Ubicación: Valladolid, España
Gracias dadas: 2 veces
Gracias recibidas: 138 veces
Contactar:

Re: Desentrañando los misterios del Frogger (¡¡croac!!)

Mensajepor explorer » 14 Nov 2018, 23:44

Está a partir de la línea 1496.

Avatar de Usuario
Bubu
Atari 1040 STf
Atari 1040 STf
Mensajes: 886
Registrado: 04 Abr 2018, 23:10
Sistema Favorito: Spectrum 16Kb/48Kb
primer_sistema: Spectrum 16Kb/48Kb
consola_favorita: Atari 2600
Primera consola: Nintendo GameBoy
Gracias dadas: 20 veces
Gracias recibidas: 60 veces

Re: Desentrañando los misterios del Frogger (¡¡croac!!)

Mensajepor Bubu » 15 Nov 2018, 00:32

¿El qué está a partir de la línea 1496?
Si algo funciona... ¡¡NO LO TOQUES!! ¡¡NI DE COÑA!!

Avatar de Usuario
Kyp
Commodore 128
Commodore 128
Mensajes: 80
Registrado: 31 Dic 2013, 12:42
Sistema Favorito: Commodore Amiga
primer_sistema: Spectrum 16Kb/48Kb
consola_favorita: Vectrex
Primera consola: Vectrex
Gracias dadas: 10 veces
Gracias recibidas: 10 veces

Re: Desentrañando los misterios del Frogger (¡¡croac!!)

Mensajepor Kyp » 20 Nov 2018, 13:31

explorer escribió:Bueno, de hecho, es casi lo mejor: algunas ROM tienen medidas para evitar la copia. Muchas de esas medidas consisten en intercambiar líneas del bus de datos.

Aunque puede parecer una sistema de protección, y a veces lo es, la razón más habitual para cambiar de orden las líneas de los buses de datos o direcciones es para facilitar el diseño de la placa. Generalmente no coincide el orden de los pines en los diferentes chips y complica mucho el enrutado de las pistas así que se cambia el orden en la placa lo que obliga a cambiar de sitio los bits en las memorias para que al final la CPU lea los datos correctamente.

Avatar de Usuario
Bubu
Atari 1040 STf
Atari 1040 STf
Mensajes: 886
Registrado: 04 Abr 2018, 23:10
Sistema Favorito: Spectrum 16Kb/48Kb
primer_sistema: Spectrum 16Kb/48Kb
consola_favorita: Atari 2600
Primera consola: Nintendo GameBoy
Gracias dadas: 20 veces
Gracias recibidas: 60 veces

Re: Desentrañando los misterios del Frogger (¡¡croac!!)

Mensajepor Bubu » 21 Nov 2018, 01:15

Hay algo que me intriga, si esta placa usa unos cuantos puertos para comunicación con los botones p.ej., ¿cómo es que no tiene INs ni OUTs? ¿Usa zonas de la memoria RAM y por tanto se leen con LD? ¿Y quién se encarga de registrarlos en la RAM?
Si algo funciona... ¡¡NO LO TOQUES!! ¡¡NI DE COÑA!!


Volver a “Programación”

¿Quién está conectado?

Usuarios navegando por este Foro: No hay usuarios registrados visitando el Foro y 8 invitados