Página 4 de 4

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

Publicado: 22 Nov 2018, 01:59
por Bubu
¡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.

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

Publicado: 23 Nov 2018, 00:45
por Bubu
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.