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
sewave
Nintender@
Mensajes: 100
Registrado: Dom, 15 May 2005, 22:28
Contactar:

Re: Tutorial de programacion para NES - Básico

Mensaje por sewave » Mié, 30 Nov 2011, 16:07

Diskover escribió:Bueno sewave... estoy jugando con el scroll basándome en el ejemplo que pusiste la primera vez de todas donde el Select y el Start permitían mover la pantalla, pero no cambiarla, así que mi pregunta es ¿cuando muevo el scroll, como hago para que vaya cargando la siguiente pantalla?

Y aqui esta la cosa mas chunga de la NES y que aun no se como voy a hacer xD
Mi idea es hacer un editor de escenarios algun dia, pero aun tengo que terminar todo el tema de los objetos primero...
Yo que tu me entretendria haciendo unos buenos tilesets de fondos y personajes mientrastanto xD

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 » Mié, 30 Nov 2011, 19:41

Mmm, bueno, a ver, y las ¿colisiones?

Por ejemplo, para un cubo ¿?
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 » Mié, 30 Nov 2011, 20:14

Las colisiones vendran con el sistema de objetos, al menos las colisiones objeto-objeto, mas adelante, tengo que trabajarlo.
Pero la idea es bastante sencilla porque todo se reducira a comparar si los rectangulos de colision se solapan.

No quieres que explique primero los mappers mas importantes para asi ir entendiendo como se van a poder hacer cosas como los fondos animados, roms de mas de 32KB, etc?

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 » Mié, 30 Nov 2011, 20:47

Bueno, tu eres el maestro. Si quieres proceder a ello, adelante.
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 » Mié, 30 Nov 2011, 23:32

Mappers
La NES por si sola, sin el uso de los mappers o chips de apoyo de la mayoria de los cartuchos, no seria capaz de tener juegos de mas de 32KB de datos y 8KB de video, esta configuracion más simple es la que se denomina NROM.

En el framework voy a dar soporte a los principales mappers (concentran mas del 90% de los juegos) de la NES, estos son:
NROM, CNROM, UXROM, MMC1 y MMC3

El mapper NROM
Maximo: ROM: 32KB, CHRROM: 8KB
El "mapper" NROM o "no mapper" no lo comentare mas que lo que he dicho arriba, no tiene ninguna caracteristica extra.
Ademas el mirroring de las nametables esta fijo en la placa y no se puede cambiar desde el programa.
Juegos que lo utilizan:
Arkanoid, Balloon Fight, Battle City, Bomberman, Donkey Kong, Excitebike, Ice Climber, Kung-fu, Pac-Man, Super Mario Bros, etc


El mapper CNROM
Maximo: ROM: 32KB, CHRROM: 32KB
Este mapper permite tener mas de 1 "pagina" de graficos, en concreto 4. Podemos cambiar entre las 4 paginas con un simple comando del framework:

Código: Seleccionar todo

   lda #pageNum
   map_setCHR8KBank_a()

Y cambiaremos los graficos a la pagina pageNum.
Ademas el mirroring de las nametables esta fijo en la placa y no se puede cambiar desde el programa.
Juegos que usan este mapper: Adventure Island, City Connection, Dragon Quest, Goonies, Gradius, Paperboy, Solomon's Key, Twinbee, etc

El mapper UXROM
Maximo: ROM: 256KB, CHRROM: 0KB (8KB de CHRRAM para cargar los graficos)
En el caso del mapper UXROM ya no se usan graficos en CHRROM y hay que cargarlos en la CHRRAM antes de usarlos, este mapper no tiene mas que una pagina de graficos pero que podemos cargar a nuestro antojo los tiles que necesitemos (aunque es un proceso lento, mientras se esta jugando no se pueden cargar mas de 4-8 tiles por frame)
La ventaja de este mapper es que permite hacer bankswitching de las partes de la rom que vemos, la NES tiene 32KB de codigo visibles, que dividiremos en 2 bancos, el bajo, de $8000 a $BFFF y el alto, de $C000 a $FFFF.
Este mapper permite que en el banco bajo podamos hacer que la NES vea el trozo que nosotros queramos de nuestra ROM, por ejemplo si tenemos una ROM de 256KB, esto son 16 bancos de memoria, podemos decidir que banco se ve en $8000-$BFFF con la siguiente instrucción:

Código: Seleccionar todo

   ldx #0
   lda #pageNum
   map_setPRG16KBank_x_a()

En el banco alto siempre se ven los ultimos 16KB de nuestra ROM.
Ademas el mirroring de las nametables esta fijo en la placa y no se puede cambiar desde el programa.
Juegos que usan este mapper: 1943, Blades of Steel, Bomberman 2, Castlevania, Contra, Ducktales/2, Final Fantasy 2, Ghosts N' Goblins, Goonies 2, Mega Man, Metal Gear, Prince of Persia, Probotector, Rainbow Island, Renegade, Robowarrior, Rush N' Attack, Rygar, etc

Ahora preguntas y proxima edicion: MMC1 y MMC3

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 » Mié, 30 Nov 2011, 23:34

Por si te sirviese de algo, en este hilo de NESdev hablan sobre el tema de colisiones.

http://nesdev.parodius.com/bbs/viewtopi ... =4617#4617

Mañana te hago las preguntas ;-)
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 » Mié, 30 Nov 2011, 23:39

Diskover escribió:Por si te sirviese de algo, en este hilo de NESdev hablan sobre el tema de colisiones.

http://nesdev.parodius.com/bbs/viewtopi ... =4617#4617

Si, lo miro mucho ese foro, el tema es hacer todas estas cosas sin que se te vaya el tiempo de calculo que tienes xD

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 » Mié, 30 Nov 2011, 23:40

Jejjeej, acabo de leer lo de los mapper.

Mañana te haré preguntas. Me sorprende que SMB1 no lleve ninguno O_O
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 » Jue, 01 Dic 2011, 13:05

sewave escribió:El mapper CNROM
Maximo: ROM: 32KB, CHRROM: 32KB
Este mapper permite tener mas de 1 "pagina" de graficos, en concreto 4. Podemos cambiar entre las 4 paginas con un simple comando del framework:

Código: Seleccionar todo

   lda #pageNum
   map_setCHR8KBank_a()


Y cambiaremos los graficos a la pagina pageNum.
Ademas el mirroring de las nametables esta fijo en la placa y no se puede cambiar desde el programa.
Juegos que usan este mapper: Adventure Island, City Connection, Dragon Quest, Goonies, Gradius, Paperboy, Solomon's Key, Twinbee, etc


¿Como declararíamos esto en romdata? ¿Por que habrá que decirle en que bancos de memoria se almacena cada pagina, no?

Si antes con 8 Kb podiamos tener 8 pantallas diferentes, ahora supongo que podremos tener 32 ¿no?

Por cierto, lo que te comentaba ayer ¿como es posible que SMB1 no tenga ningun mapper? ¿Como monta la cantidad de pantallas que tienen si solo puede haber hasta 8?

El mapper UXROM
Maximo: ROM: 256KB, CHRROM: 0KB (8KB de CHRRAM para cargar los graficos)
En el caso del mapper UXROM ya no se usan graficos en CHRROM y hay que cargarlos en la CHRRAM antes de usarlos, este mapper no tiene mas que una pagina de graficos pero que podemos cargar a nuestro antojo los tiles que necesitemos (aunque es un proceso lento, mientras se esta jugando no se pueden cargar mas de 4-8 tiles por frame)
La ventaja de este mapper es que permite hacer bankswitching de las partes de la rom que vemos, la NES tiene 32KB de codigo visibles, que dividiremos en 2 bancos, el bajo, de $8000 a $BFFF y el alto, de $C000 a $FFFF.
Este mapper permite que en el banco bajo podamos hacer que la NES vea el trozo que nosotros queramos de nuestra ROM, por ejemplo si tenemos una ROM de 256KB, esto son 16 bancos de memoria, podemos decidir que banco se ve en $8000-$BFFF con la siguiente instrucción:

Código: Seleccionar todo

   ldx #0
   lda #pageNum
   map_setPRG16KBank_x_a()


En el banco alto siempre se ven los ultimos 16KB de nuestra ROM.
Ademas el mirroring de las nametables esta fijo en la placa y no se puede cambiar desde el programa.
Juegos que usan este mapper: 1943, Blades of Steel, Bomberman 2, Castlevania, Contra, Ducktales/2, Final Fantasy 2, Ghosts N' Goblins, Goonies 2, Mega Man, Metal Gear, Prince of Persia, Probotector, Rainbow Island, Renegade, Robowarrior, Rush N' Attack, Rygar, etc


Bueno, con este ya me pierdo.

¿Que es bankswitching?

Lo mejor es que pongas ejemplos ;-)
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 » Jue, 01 Dic 2011, 13:17

Diskover escribió:¿Como declararíamos esto en romdata? ¿Por que habrá que decirle en que bancos de memoria se almacena cada pagina, no?

Si antes con 8 Kb podiamos tener 8 pantallas diferentes, ahora supongo que podremos tener 32 ¿no?

Por cierto, lo que te comentaba ayer ¿como es posible que SMB1 no tenga ningun mapper? ¿Como monta la cantidad de pantallas que tienen si solo puede haber hasta 8?

No no, los 32KB son para los tiles, para graficos. Los datos de las pantallas van el la ROM normal. SMB1 puede tener tantas pantallas porque comprime los escenarios en un formato suyo propio, no las tiene descomprimidas como con el NESST, y esto es de lo mas dificil de hacer, tener un mapa comprimido que vas descomprimiendo poco a poco a medida que el usuario se mueve.

Bueno, con este ya me pierdo.

¿Que es bankswitching?

Lo mejor es que pongas ejemplos ;-)

Bankswitching es la habilidad para intercambiar los bancos de memoria.
Vamos a suponer que tu juego tiene 4 bancos de 16KB, 1,2,3,4
En la NES solo podemos ver 32KB a la vez, por lo tanto podriamos tener "cargados" por ejemplo:
3 y 4
Imaginemos que tenemos los datos de la musica en el banco 1, pues con este mapper podemos decirle, "cargame" el banco 1 donde esta el 3.
Y asi la NES veria: 1, 4 y podriamos llamar a la rutina que actualiza el sonido que leeria del banco 1 (en concreto leeria de las posiciones de memoria de la $8000 a la $BFFF que ahora estan mostrando el contenido del banco 1).

Responder