Tutorial de programacion para NES - Básico

Foro sobre la N.E.S. Aqui esta el verdadero mejunje donde podreis conversar.

Responder
Avatar de Usuario
Diskover
##El Jefe##
Mensajes: 488
Registrado: Lun, 27 Oct 2003, 20:59
Ubicación: Planeta Tierra
Contactar:

Re: Tutorial de programacion para NES - Básico

Mensaje por Diskover » Sab, 26 Nov 2011, 00:37

Mas avances:

- He conseguido reducir el código del contador de tiempo a algo mas lógico y con menos lineas:

Código: Seleccionar todo

//Antes de nada, he declarado dos variables: time2 y contador. El time2 me sirve para comprobar si ya ha pasado 1 segundo, y el contador me sirve para aumentar el número de tiles que corresponden al tiempo y que va del 1 al 0 pasando por todos los demas. Cuando llega a 0 se pone otra vez a mostrar desde el 1.

function tiempo() {
      //Animacion del tiempo
      lda time2 //Leo el valor de time2 que previamente incremento cada segundo en el programa principal
      cmp #60 //Comparo si ya vale 1 segundo. Si es así, paso al IF, si no dejo todo como está y salgo de la función tiempo.
      if(greater) { //Comienzo el IF
         lda metaSprites[2].firstTile // Leo el valor del metaSprite de tiempo y lo meto en "a"
                        Por defecto empieza en la #240 que es donde tengo guardado el gráfico del 1
                        y consecutivamente, los demás hasta el 0.
         switch(reg.a) { //Compruebo el valor de "a"
            case contador{ //En caso de que "a" valga lo mismo que "contador" (que vale al empezar #240)...
               inc contador //Incremento en 1 su valor...
               lda contador //Vuelvo a leer contador para ver cuanto vale ahora
               cmp #250 //Comparo que no valga todavía #250
               if (greater){ //Si vale #250 (que corresponde al gráfico del 0)...
                  lda #240 //Guardo en "a" el valor #240
                  sta contador //Y meto el valor de "a" en contador. Con esto reiniciamos la cuenta.
               }//Si no vale #250 quiere decir que ha aumentado su valor sin llegar ahí y mostrará el siguiente número (el 2, el 3, el 4, etc... hasta que llegue a 0 y vuelta a empezar)
            }
         }
         sta metaSprites[2].firstTile //Guardamos el valor de "a" que será igual al de "contador" para que muestre el gráfico que hemos dicho finalmente
         lda #0 //Ponemos "a" a 0
         sta time2 //Guardamos el valor de "a" en time2, con lo que ahora vale 0 y volvemos a empezar.
      }//Aquí finaliza el IF
   }


:-)
No dejes de visitar www.RetroNES.net la mejor pagina sobre la NES 8 bits de Nintendo, ¡Y en español!

Avatar de Usuario
Diskover
##El Jefe##
Mensajes: 488
Registrado: Lun, 27 Oct 2003, 20:59
Ubicación: Planeta Tierra
Contactar:

Re: Tutorial de programacion para NES - Básico

Mensaje por Diskover » Sab, 26 Nov 2011, 16:36

Arreglado el movimiento de Link. Ahora se mueve en todas las dirección, aunque cuando vas en diagonal, en algunos casos y dependiendo de como partías, la animación se queda parada.

Imagen Imagen

ROM: http://www.megaupload.com/?d=HKD97C2B
No dejes de visitar www.RetroNES.net la mejor pagina sobre la NES 8 bits de Nintendo, ¡Y en español!

Avatar de Usuario
Diskover
##El Jefe##
Mensajes: 488
Registrado: Lun, 27 Oct 2003, 20:59
Ubicación: Planeta Tierra
Contactar:

Re: Tutorial de programacion para NES - Básico

Mensaje por Diskover » Sab, 26 Nov 2011, 17:32

Bueno sewave, y sigo probando cosas.

Me he currado una pequeña rom que me carga titlepal y otra nueva que he llamado titlepal2, cada una con diferentes colores, y que cambian cada segundo de una a otra.

Ahora mi intención es que cambie también la pantalla pero aquí ya veo que se me escapa de las manos. El archivo romdata.as declara #incbin "./data/title.nam" y una serie de direcciones de memoria. Yo quería cargar tambien title.nam2 pero ya ni idea de como se haría. Todo esto para lo de intentar cambiar de pantalla, de una a otra :-)

¿alguna idea?
No dejes de visitar www.RetroNES.net la mejor pagina sobre la NES 8 bits de Nintendo, ¡Y en español!

Avatar de Usuario
sewave
Nintender@
Mensajes: 100
Registrado: Dom, 15 May 2005, 22:28
Contactar:

Re: Tutorial de programacion para NES - Básico

Mensaje por sewave » Sab, 26 Nov 2011, 18:19

Puedes hacerlo de la siguiente manera:

Código: Seleccionar todo

        lda #PALETTES.ALL
   sta _brightnessApply
        clearPalEffects()
   lda #5
   vid_waitFadeToBlack_a()
   vid_stop();
        nes_loadMemsrc(paleta2)
   vid_loadBackGrndPalette()
   vid_copyNametable0Vram(nam2)
        vid_start();
   lda #5
   vid_waitFadeToNormal_a()

De este modo hace transicion a negro, carga la nueva pantalla y transicion al color normal :)
Si no cambias de paleta puedes ahorrarte las 2 lineas que la copian.

Avatar de Usuario
Diskover
##El Jefe##
Mensajes: 488
Registrado: Lun, 27 Oct 2003, 20:59
Ubicación: Planeta Tierra
Contactar:

Re: Tutorial de programacion para NES - Básico

Mensaje por Diskover » Sab, 26 Nov 2011, 18:28

¿Pero como declaro nam2 en romdata?

El archivo romdata tiene declarada titledata y llama a litle.nam de esta manera:

Código: Seleccionar todo

titledata:
#incbin "./data/title.nam"
#rom.bank         BANK_SECOND_ENTRY
#rom.org         0xA000
#rom.bank         BANK_THIRD_ENTRY
#rom.org         0xC000
#rom.bank         BANK_LAST_ENTRY
#rom.org         0xE000


Pongamos que quiero añadir luego el titledata2 para que llame a title2.nam (que es como lo tengo llamado yo) ¿que direcciones de memoria y todo eso le doy? ¿y ademas también debo tener en cuenta title2.chr?
No dejes de visitar www.RetroNES.net la mejor pagina sobre la NES 8 bits de Nintendo, ¡Y en español!

Avatar de Usuario
sewave
Nintender@
Mensajes: 100
Registrado: Dom, 15 May 2005, 22:28
Contactar:

Re: Tutorial de programacion para NES - Básico

Mensaje por sewave » Sab, 26 Nov 2011, 18:32

Diskover escribió:¿Pero como declaro nam2 en romdata?

El archivo romdata tiene declarada titledata y llama a litle.nam de esta manera:

Código: Seleccionar todo

titledata:
#incbin "./data/title.nam"
#rom.bank         BANK_SECOND_ENTRY
#rom.org         0xA000
#rom.bank         BANK_THIRD_ENTRY
#rom.org         0xC000
#rom.bank         BANK_LAST_ENTRY
#rom.org         0xE000


Pongamos que quiero añadir luego el titledata2 para que llame a title2.nam (que es como lo tengo llamado yo) ¿que direcciones de memoria y todo eso le doy? ¿y ademas también debo tener en cuenta title2.chr?

Deberias usar el mismo tileset para los 2, sino hay que pasar a usar mappers.

Código: Seleccionar todo

titledata:
#incbin "./data/title.nam"
titledata2:
#incbin "./data/title.nam2"
#rom.bank         BANK_SECOND_ENTRY
#rom.org         0xA000
#rom.bank         BANK_THIRD_ENTRY
#rom.org         0xC000
#rom.bank         BANK_LAST_ENTRY
#rom.org         0xE000

Asi tendrias las 2 cargadas en el primer banco de memoria, puedes tener hasta 8 ya que es un banco de 8KB y ocupan 1KB cada una.

Avatar de Usuario
Diskover
##El Jefe##
Mensajes: 488
Registrado: Lun, 27 Oct 2003, 20:59
Ubicación: Planeta Tierra
Contactar:

Re: Tutorial de programacion para NES - Básico

Mensaje por Diskover » Sab, 26 Nov 2011, 18:43

Ok, parece que mas o menos funciona.

Mmm, si cargo dos pantallas, deberé compartir title.chr que es donde guardo los tiles ¿no? ¿no puedo tener varios .chr?

Por cierto clearPalEffects() no funciona. Casca error al montar la rom. No lo reconoce.
No dejes de visitar www.RetroNES.net la mejor pagina sobre la NES 8 bits de Nintendo, ¡Y en español!

Avatar de Usuario
sewave
Nintender@
Mensajes: 100
Registrado: Dom, 15 May 2005, 22:28
Contactar:

Re: Tutorial de programacion para NES - Básico

Mensaje por sewave » Sab, 26 Nov 2011, 18:51

mmm pues quiza tienes una version mas vieja del framework, bueno no es imprescindible el clearPalEffects.
Como te he dicho antes, para poder tener diferentes chr tendriamos que usar algun mapper.

Avatar de Usuario
Diskover
##El Jefe##
Mensajes: 488
Registrado: Lun, 27 Oct 2003, 20:59
Ubicación: Planeta Tierra
Contactar:

Re: Tutorial de programacion para NES - Básico

Mensaje por Diskover » Sab, 26 Nov 2011, 19:10

Como supongo que has ido actualizándolo y hace mucho que no cuelgas algún ejemplo nuevo (que de ahí sacaba las actualizaciones de tu framework :-) ) si, estará desactualizado.

¿Tienes algo nuevo entre manos?

Bueno, al menos he conseguido hacer esto. Dos pantallas que cambian cada segundo en un bucle infinito :-)

ROM: http://www.megaupload.com/?d=GL2UZS48
No dejes de visitar www.RetroNES.net la mejor pagina sobre la NES 8 bits de Nintendo, ¡Y en español!

Avatar de Usuario
Diskover
##El Jefe##
Mensajes: 488
Registrado: Lun, 27 Oct 2003, 20:59
Ubicación: Planeta Tierra
Contactar:

Re: Tutorial de programacion para NES - Básico

Mensaje por Diskover » Sab, 26 Nov 2011, 19:26

Ups, este es el enlace bueno:

http://www.megaupload.com/?d=QH238B4M
No dejes de visitar www.RetroNES.net la mejor pagina sobre la NES 8 bits de Nintendo, ¡Y en español!

Responder