Información sobre la NES

El espacio para revivir clásicos (y no tanto) mediante emuladores. Un lugar dedicado 100% a la emulación.
lord_chile
Que no soy bot!
Que no soy bot!
Mensajes: 9
Registrado: 03/11/06 17:35
Ubicación: Quilpué, Chile (South America)

Información sobre la NES

Mensaje por lord_chile » 16/11/06 18:24

¿Sabías que el nintendo (la primera consola que salió al mercado) usaba un procesador NMOS 6502?, le llamaron el "2A03". Este procesador "2A03 customizado" traía soporte para el set de instrucciones del procesador 6502. Sus registros eran de 8 bits y corría a 1.7 mhz app, aunque sus velocidades dependian de la version pal o la ntsc, siiiiii MHZ, era barato y industrias "Ricoh" lo produjo. Nintendo lo compró en masa y llegaron a ser el principal cliente de ricoh. El procesador No soportaba el "modo decimal" y internamente traía una PaPu (pseudo audio processing unit) para procesar sonido. El sonido era generado en tiempo real a través del código. Muchos creen que eran midis, pero no. Las capacidades de la papu eran muy buenas para producir muchos efectos, incorporaba 5 canales de audio (square wave 1, square wave 2, triangle, noise y dpcm (voces raw como racket attack)). El nintendo se programaba en assembler para el procesador 6502, alguna gente dice que los programadores oficiales usaban un pseudo kit C de casi 30 mil dolares... El 6502 fue un procesador usado en commodore 64, apple ii, atari. Las principales partes del nintendo como dije, la cpu nmos 6502, con papu integrada. Cerca de la cpu estaba la PPU (unidad procesadora gráfica, que se encargaba de renderear los gráficos, algunos estaban comprimidos otros no. El catridge de nintendo tenía principalmente 3 chips. 1.- El chip chr (donde se almacenan las pattern tables o tablas de patrones, gráficas de los catridge de nintendo).. y El chip prg donde teníamos la lógica de nuestro programa, usaban las nametables para crear los fondos ya que los gráficos que se forman por tiles y estos estaban todos desordenados en el chip chr. La paleta de colores en el chip prg (la nes tenía 4 bits para color, o sea 16 colores, pero podías lograr efectos con estos como hacerlos flashear, tonalidades y llegar con esto a 256 colores.. la resolucion de pantalla app 256x240 dependiendo de si es version PAL O NTSC. Y muchas cosas más. Actualmente hay una comunidad internacional de programadores amantes de esta consola (por lo tanto el foro está en inglés).. hay mucha documentación, es un assembler diferente y para escribir hola mundo a pantalla debes pasar siempre primero por la procesadora gráfica PPU. Existen compiladores creados por estos chicos del mundo amante nintendo, algunos se les ocurrió hacerlos tipo "C", pero nunca logran la performance que programando en assembler (rapidez, facil depuracion, etc). Hay compiladores para assembler nes, NesASM para novatos, ya que es limitado pero sirve para aprender a hacer tus demos.. Luego vino la SNES usando un procesador 65816 y la N64 usando un procesador R4300i si más no lo recuerdo..

El tercer chip dentro del cartucho de nes era el mapper.

La nintendo no podía mantener mas de cierta cantidad de informacion de rom en memoria, entonces cuando el juego era mas grande que 32 kbyte de chip prg y 8 kbyte de chip chr, se ocupaban los chips mappers para utilizar una tecnica de bankswitching, cargo el banco que uso en memoria y los que no uso los descargo (administro los bancos que se deben cargar a memoria y los que no)...

Como expliqué habia un limite que bordeaba los 32kb de prg y los 8 kb de chr. El conocido super mario bros, estaba justo en el limite!. Por esta razon, este catridge no usa mapper, entonces técnicamente le asignamos mapper 0 y a la board de super mario (tarjeta que contiene los chips) le llamamos board con NROM MAPPER (o sea board sin mapper).

Tip de la semana:

Cuando los tiles se usan para los personajes animados, se llaman sprites. Si se usan para el fondo, solo los llamamos tiles de background. La nintendo tenia una limitacion especial que era "no poder mantener mas de 8 sprites en una misma linea horizontal".

Se han dado cuenta que cuando hay muchos monitos en una misma linea, la nintendo tiende a hacer parpadear los monitos (aparecen y desaparecen muy rapidamente)??, incluso cuando los monos estan acostados (como street fighter) algunos juegos simplemente no muestran la parte de los pies del mono?...

Como superamos esa limitacion, por qué a algunos juegos no se les nota????. Esta tecnica especial fue usada en "The lemmings" y es la conocida "OAM, el cicleador de Sprite". Resulta que como la nes no podia mostrar mas de 8 sprites (cada sprite son 8x8 pixels) debiamos lograr este algoritmo:

En el caso de tener 14 sprites en una misma linea horizontal:

repita
1.- Mostrar los primeros 8 sprites (8 lemmings en este caso particular)..
2.- Los sprites 9-14 no se mostraran (estan invisibles).
3.- Los sprites 1-8 no se mostraran
(estan invisibles)
4.- Mostrar el segundo grupo de sprites
(9-14)
hasta cierta condicion

Y como no se nota que algunos se hacen invisibles?????, porque la tecnica la programas para que cada grupo de 8 sprites no se muestre por cada 1/2 de frame, cosa que se nota un parpadeo, pero tu cerebro ordena las imagenes de modo que se note que estan todos los monitos completos!! jejej .

Dicen que en la tv el sprite cycling (esta tecnica) se nota menos, y el parpadeo no es muy notorio.

PD: No hablo de cuando al mario lo lesionan y parpadea, ya que esa es otra tecnica.. Si jugaron lemmings y notaron el parpadeo con mas de 8 monos en linea horizontal, esa es la vieja tecnica algoritmica del sprite cycling.

By lord_chile (luisp510@hotmail.com)
SansaNES is borning... Author of SansaNES

Avatar de Usuario
Switchstance
Guardián del Aguila
Guardián del Aguila
Mensajes: 4549
Registrado: 02/10/06 2:05
Frase: Donde está Kurt1977???
Ubicación: Rio Gallegos
Contactar:

Mensaje por Switchstance » 16/11/06 18:47

Excelente Luis! Al fin uno de los mios!

Veamos, que tengo para aportar ;

El algoritmo es genial, esa técnica es muy conocida, de hecho el Mighty Final Fight de Capcom tambien lo utiliza y así como tantos juegos, pero no el TMNT por ejemplo que tiene desapariciones de miembros por todas partes.

También yo no creo que haya existido un compilador C para crear juegos de NES y si los hubo, creo que MENACE BEACH y otros más como RAID 2020 deben haber sido escritos con el mismo, ya que son insoportablemente lentos y horribles.
Lei por ahi que quizás hubiese existido un kit de BASIC pero sinceramente no lo creo. ASM creo que es la mejor opción para crear programas más complejos.

Avatar de Usuario
Faker
Check Point!
Check Point!
Mensajes: 11230
Registrado: 20/09/06 22:11
Frase: AGUANTE MARIO10
Ubicación: ONMF!
Contactar:

Mensaje por Faker » 17/11/06 0:08

La NES , una maravilla.
El Family Game , lo mas hermoso de todo el universo.

Avatar de Usuario
Switchstance
Guardián del Aguila
Guardián del Aguila
Mensajes: 4549
Registrado: 02/10/06 2:05
Frase: Donde está Kurt1977???
Ubicación: Rio Gallegos
Contactar:

Mensaje por Switchstance » 17/11/06 17:13

El procesador 6502 contiene 3 registros primarios que son muy importantes a la hora de trabajar con Assembler , los cuales son : A , X e Y. A es llamado al Acumulador y sirve para las operaciones matematicas que queramos emplear, aunque solo podremos sumar , restar y dividir los bits. X e Y son registros de indice, con los cuales podremos llamar a alguna direccion en particular.
Los que hemos estudiado matemáticas debemos estar un poco hartos de los X e Y. :P

Las direcciones como $1000 , son lugares o locaciones dentro del procesador o del Cart, estan generalmente asociadas a la RAM. Estas sirven para acceder a lugares fuera del CPU o dentro de el. Sirven para reconocer diferentes lugares dentro de la RAM del CPU o el CART. Imaginemos un mapa gigante, para identificar cada zona o lugar deberemos poner un nombre, como no tenemos sistema decimal no podemos decir 100 o 500 o 100000, sino que deberemos utilizar el modo hexadecimal como $0000 o $4001.
Realmente para mi, es casi lo mismo.
Cuando trabajamos con Assembler , cuando indicamos una direccion , le estamos pidiendo al CPU que nos dirija hacia ese lugar. (En la programacion de Assembler generalmente estamos escribiendo ordenes a un Hardware , en nuestro caso emulado por software.). Por ejemplo : El CPU envia hacia "afuera" un numero en la direccion del BUS (Adress BUS) para que lea o escriba valores a la RAM , a un chip , a un periferico , o lo que sea indique la direccion.

Basicamente el numero de cosas que podemos hacer con el CPU es limitado. Podemos leer un valor en una direccion determinada y poner ese valor en un registro A, X o Y.
Podemos tomar un valor de un registro y escribirlo en una direccion o almacenarlo, o guardarlo para después sumarlo, etc.

El 6502 tiene 3 tipos de interrupciones : IRQ/BRK , NMI y RESET.
Cada interruptor tiene un vector. Un vector es una direccion de 16-bit que especifica una locacion para “ir hacia” cuando un interruptor es presionado.
IRQ/BRK es pulsado bajo dos circunstancias , de ahí el nombre dividido: Cuando un Software IRQ es ejecutado (Instrucción BRK) o cuando un Hardware IRQ es ejecutado. (Por la linea IRQ).
RESET es pulsado para resetear. El rom esta cargado en la Memoria , y el 6502 salta hacia la direccion especificada en el vector RESET. Los registros no son modificados , y la memoria se limpia. Esto ocurre durante el reseteo. Se usa en casi todas las consolas.

NMI se entiende por Non-Maskable Interrupt (Interruptor no enmascarado) y es generado por cada refresco de pantalla y del CPU (llamado Vblank) , que sucede en intervalos dependiendo de que sistema estemos usando : Pal o Ntsc.
El NMI se actualiza 60 veces por segundo en las consolas NTSC , y 50 en PAL. La latencia del interruptor en el 6502 es de 7 ciclos eso quiere decir que tarda 7 ciclos en entrar o salir de un interruptor.
La mayoria de los interruptores deberian volver usando la instrucción RTI. Algunos juegos de NES no utilizan este metodo , como el Final Fantasy.
Los interruptores mencionados tienen sus Vectores en las siguientes direcciones :

$FFFA = NMI
$FFFC = RESET
$FFFE = IRQ/BRK


$FFFA = NMI
$FFFC = RESET
$FFFE = IRQ/BRK

Prioridades de los Interruptores

ALTA = RESET
NMI
BAJA = IRQ/BRK

Avatar de Usuario
Shinnok
Admin
Admin
Mensajes: 18780
Registrado: 20/09/06 20:54
Frase: Nothing, Nothing Can Prepare You !
Ubicación: Outworld
Contactar:

Mensaje por Shinnok » 17/11/06 19:14

disculpen que me meta pero esto no va en laparte esa de programación y eso ? si pifie disculpen eh ? :)

Avatar de Usuario
Tado
Golden Axe Player
Golden Axe Player
Mensajes: 997
Registrado: 03/11/06 23:36

Mensaje por Tado » 17/11/06 22:14

bueno creo que ya es tiempo de que me haga una biblia personal...

muy buen informe che...grax........

Avatar de Usuario
Switchstance
Guardián del Aguila
Guardián del Aguila
Mensajes: 4549
Registrado: 02/10/06 2:05
Frase: Donde está Kurt1977???
Ubicación: Rio Gallegos
Contactar:

Mensaje por Switchstance » 17/11/06 22:51

Tus deseos son ordenes, cuando FEDE monte el SITIO tengo un informe de alrededor 70 páginas sobre la NES que cubre programación, hardware, sonido, puertos, registros, ASM, etc etc, juegos, historia, etc.
:D

Avatar de Usuario
Faker
Check Point!
Check Point!
Mensajes: 11230
Registrado: 20/09/06 22:11
Frase: AGUANTE MARIO10
Ubicación: ONMF!
Contactar:

Mensaje por Faker » 17/11/06 22:57

Switchstance escribió:Tus deseos son ordenes, cuando FEDE monte el SITIO tengo un informe de alrededor 70 páginas sobre la NES que cubre programación, hardware, sonido, puertos, registros, ASM, etc etc, juegos, historia, etc.
:D

Espero con ansias ese informe! ^^ Tmb tenes roms ? jajaj :P

Avatar de Usuario
Switchstance
Guardián del Aguila
Guardián del Aguila
Mensajes: 4549
Registrado: 02/10/06 2:05
Frase: Donde está Kurt1977???
Ubicación: Rio Gallegos
Contactar:

Mensaje por Switchstance » 20/11/06 18:34

Shinnok escribió:disculpen que me meta pero esto no va en laparte esa de programación y eso ? si pifie disculpen eh ? :)
Programación? :shock:

Avatar de Usuario
Shinnok
Admin
Admin
Mensajes: 18780
Registrado: 20/09/06 20:54
Frase: Nothing, Nothing Can Prepare You !
Ubicación: Outworld
Contactar:

Mensaje por Shinnok » 20/11/06 20:56

jajajajajajajajajaajajaj q se yoooo esto es muy técnico y yo no entiendo una goma :cry:

Responder