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

Foro dedicado a la programación en todo tipo de sistemas clásicos.
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 » 22 Nov 2018, 01:59

¡Ya lo tengo! Tras mucho leer y estudiarrrr:

Código: Seleccionar todo

PPI+2000 = IN0. Puerto de entrada para inputs de los controles
PPI+2002 = IN1. Puerto de entrada para inputs de los controles
PPI+2004 = IN2. Puerto de entrada para inputs de los controles

PPI+1000 = OUT0. Puerto de salida para enviar comandos al Z80 sonoro (conectado al sonido AY-3-8910)
PPI+1002 = OUT1. Puerto de salida para lanzar una interrupción al Z80 sonoro


Así que como RST18 mete datos de 8 bits (comandos) en una pila LILO, y $07AC saca el primer dato de esa pila y lo envía al OUT0, sisnifica que todo este montaje tié que ver con la música y/o los efestos de sonido.

Ea.
Si algo funciona... ¡¡NO LO TOQUES!! ¡¡NI DE COÑA!!

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 » 23 Nov 2018, 00:45

Bueno, hoy vamos con la rutina de inicialización, en la dirección $02A3, que es a donde se salta tras realizarse el boot de la dirección $0000:

Código: Seleccionar todo

Initialize: 
02A3: AF             XOR     A               
02A4: 32 08 B8       LD      (IRQENABLE),A   ; Deshabilita las interrupciones
02A7: 32 05 88       LD      ($8805),A       ; ???
02AA: 32 10 B8       LD      (FLIPX),A       ; Deshabilita el giro horizontal de la imagen
02AD: 32 0C B8       LD      (FLIPY),A       ; Deshabilita el giro vertical de la imagen
02B0: 21 00 80       LD      HL,$8000        ; Borra la memoria RAM ($8000 a $87FF)
02B3: 11 01 80       LD      DE,$8001       
02B6: 01 FF 07       LD      BC,$07FF       
02B9: 75             LD      (HL),L         
02BA: ED B0          LDIR                   
02BC: 21 00 B0       LD      HL,$B000        ; Borra la memoria de objetos, sprites y atributos ($B000 a $B0FF)
02BF: 01 00 00       LD      BC,$0000       
02C2: 71             LD      (HL),C         
02C3: 2C             INC     L               
02C4: 10 FC          DJNZ    $2C2           
02C6: 3A 02 E0       LD      A, (IN1);Captura el estado del puerto #1
02C9: 16 2E          LD      D,$2E           ; Prepara la dirección $2E00
02CB: E6 03          AND     $03             ; Los 2 últimos bits del puerto 1 es el número de vidas por crédito
02CD: 5F             LD      E,A             ; Ese número de vidas se almacena en $2E00 a $2E03
02CE: 1A             LD      A,(DE)          ; Captura el número de vidas
02CF: 32 E4 83       LD      ($83E4),A       ; Lo almacena en su variable ($83E4 numLifes: DB 0)
02D2: 3A 04 E0       LD      A,(IN2);Captura el estado del puerto #2
02D5: 67             LD      H,A             
02D6: CB 5C          BIT     3,H             
02D8: 28 05          JR      Z,$2DF          ; Si el mueble es de tipo UPRIGHT, salta a $2DF


Código: Seleccionar todo

2E00: 03 05 07 FF   DB 3, 5, 7, 255



Con este simple trozo hemos descubierto cómo tener vidas infinitas en el Frogger, jiji, ya que vemos que en ($83E4) se almacena el número de vidas. Por tanto sólo hay que evitar decrementar su valor.
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