Para programar un "homebrew" Rockman (Megaman)

Saludos!

Me gustaría crear un ROM de Nes para ejecutar en un emulador (fceuxdsp.exe). Desearía que incorpore todas las características y que tenga la longitud del Rockman3 original (el Megaman del primer Nintendo).

Desafortunadamente no tengo experiencia en programación. En la página http://bobrost.com encontré información acerca del lenguaje nbasic que Rost desarrolló para crear ROMS; pero sugiere aprender un lenguaje primero.

Les agradecería mucho cualquier información para aprender nbasic de una forma más rápida o por lo menos una recomendación de qué lenguaje de programación me sería útil aprender para diseñar juegos como los de Rockman. No aspiro a más que crear juegos para emuladores NES y SNES.

Espero puedan ayudarme en mi búsqueda. Bienvenido cualquier otro consejo! =)


José R.
Según vi, unos romhackers habían hecho un programa para volcar la rom de NES y SNES a ASM (Ensamblador), pero este lenguaje de programación es de los más dificultosos que me he echado a la cara, porque es casi lenguaje de máquina D:
Gracias amigo, agradezco mucho el dato.

Después de muchas vueltas terminé en una página que me introdujo al lenguaje de máquina del procesador 6502 (el procesador que lleva la NES). Entendí el sistema hex y la mecánica de bits y bytes (de verdad, todo esto es increíble; parece ininteligible hasta que encuentras el tutorial más accesible para novatos).

He estado leyendo los modos de llamar a memoria (memory addressing) y todo parece tener sentido. Es sólo que no tengo como poner a prueba este conocimiento. Tengo ya un programa ensamblador y un ejemplo simple de un archivo NES. Contiene sólo un sprite con limitadas funciones y parece haber sido creado a partir de varios BAS (archivos de texto conteniendo programación en BASIC).

Lo que desafortunadamente no me queda claro es la relación entre archivos BAS, archivos ASM y el ROM en sí (archivos NES). Como los archivos BAS parecen referirse a distintas funciones en el ROM pensaba que el ensamblador "fusionaba" toda esta programación en un archivo NES. O es que quizás el lenguaje BASIC es otro camino para escribir ROMS que después se compilan?

Si conoces el nombre de este programa sería grandioso si me lo pudieses pasar para ver la arquitectura de los juegos. No me importa aprender lenguaje de máquina (no sé, le encontré un cierto encanto, je! Parece la llave maestra de las consolas ochenteras. =p).

Gracias de nuevo por responder. =)
No sé si te servirá para mucho, pero aquí tienes el enlace a un repositorio de romhacking que suelo visitar bastante, y las utilidades para NES pueden ser muy útiles:
http://www.romhacking.net/?category=&Pl ... tle=&desc=

Y después, buscando algo más por la página, por la zona de documentos, me he encontrado con mucha información sobre como "hackear" los juegos de NES (Incluido algún tutorial de ensamblador 6502 [risita] )
Aquí el link: http://www.romhacking.net/?category=&Pl ... tle=&desc=
Gracias. Que coincidencia, a fin de cuentas yo también terminé allí. Je!

Tengo la info del mapper MMC3 de Rockman3. Supongo que sólo queda jugar con el debugger. A ver qué sale.
(mensaje borrado)
Hasta donde yo entiendo, el compilador lo que hace es traducir el lenguaje fuente(en el idioma que compile)a ensamblador especifico de la cpu, siguiendo este razonamiento es solo cuestión de encontrar un compilador adecuado para el procesador de nes.La diferencia entre ensamblador y maquina es poco mas de los nemotecnicos(en maquina son ceros y unos), aunque si eres bueno en matematicas supongo que podrás implementar tus algoritmos en esamblador, pero desde luego complicado es, la opción del compilador me parece mas "trabajable".
Hasta donde yo entiendo, el compilador lo que hace es traducir el lenguaje fuente(en el idioma que compile)a ensamblador especifico de la cpu, siguiendo este razonamiento es solo cuestión de encontrar un compilador adecuado para el procesador de nes.La diferencia entre ensamblador y maquina es poco mas de los nemotecnicos(en maquina son ceros y unos), aunque si eres bueno en matematicas supongo que podrás implementar tus algoritmos en esamblador, pero desde luego complicado es, la opción del compilador me parece mas "trabajable".


Sin animo de desalentarte, si lo que quieres es programar un juego de 0, es netamente imposible programar un Megaman para NES en assembler con los conocimientos que parece que tienes.

Es mas diria lo mismo practicamente para un programador experto, porque hacer un juego es sensillamente demasiado.

Otro problema de la NES son las pocas herramientas para trabajar graficos, sonido..etc

Lo que desafortunadamente no me queda claro es la relación entre archivos BAS, archivos ASM y el ROM en sí (archivos NES). Como los archivos BAS parecen referirse a distintas funciones en el ROM pensaba que el ensamblador "fusionaba" toda esta programación en un archivo NES. O es que quizás el lenguaje BASIC es otro camino para escribir ROMS que después se compilan?


Supongo que habras visto el ejemplo del nbasic. Los .bas son los archivos de codigo Basic, luego con nbasic pasas a ASM, y con nesasm lo compilas en una rom

Si no tienes linux, te conviene instalar el cygwin o un linux virtual te sera mas facil compilar. Si no quieres usar linux, presta atencion a los archivos make y builds, y conviertelos a .bat
Yo estoy en ello desde hace unos meses, como lenguaje eleji el NESHLA
Es ensamblador de 6502 pero con algunas caracteristicas especiales como generacion automatica de etiquetas par apoder hacer bucles o estructuras de flujo sin necesidad de hacerlas a mano.
Tiene tambien soporte para funciones (sin parametros) y mucho mas, yo creo que es lo ideal.

Pero como no iba a empezar el juego desde 0, primero he optado por hacerme un "framework" para juegos en nes, con el soporte para varios mappers, interrupciones, prg bankswitching, chr bankswitching, metasprites con flip x-y, animaciones, paletas de colores, scrolling, lectura de pads/pistola (2-4p), colas para ejecutar comandos en la nmi o en las irq, y algunas cosillas mas, aunque esta a medio hacer ya tenia soporte para los mappers: MMC1-4, SUNSOFT69, BANDAI, UNROM, CNROM, CPROM, AXROM, BXROM...

A mitad de construccion del framework me topé con que sería muy util un programilla para hacer las animaciones de los objetos de los juegos, asi que he dejado el framework de lado para trabajar en un programa en java que me permita generar las animaciones, guardarlas en formato propio, exportarlas a formato del neshla o incluso a gif o apng para ponerlas en la web :)
Actualmente programar en ensamblador un juego completo es una total pérdida de tiempo. ASM se usa para programar rutinas especificas "embeidas" en C, que tiren bastante de procesador, para hacerlas mas rápidas. Y encima para la NES, que usaba un 6502 que ni hoy creo que se fabriquen ya.
Te recomendaría mejor que aprendieras ensamblador para ARM, PIC o Intel que es lo que se usa en la actualidad y no pierdas el tiempo con el de NES ya que aunque no lo parezca, difiere bastante el ensamblador que se usa en cada arquitectura

Si quieres programar para la NES, hazlo en un lenguaje de alto nivel y métele algunas rutinas en ASM si quieres, pero si no te quieres volver loco, no lo hagas en ASM desde 0.

Un saludo.
Programar en ensamblador es bastante laborioso, recuerdo que para hacer una chufa de ping pong me tire siglos xD

No tengo experiencia programando en el entorno que quieres, pero, ¿no se puede añadir código en C? porque si se puede usar C te ahorras mucho tiempo de trabajo, ya que un if que ocupa 2 lineas de codigo en C, son como 7 u 8 traducidas en ASM.

Suerte con el proyecto :)
Puyover escribió:Actualmente programar en ensamblador un juego completo es una total pérdida de tiempo. ASM se usa para programar rutinas especificas "embeidas" en C, que tiren bastante de procesador, para hacerlas mas rápidas. Y encima para la NES, que usaba un 6502 que ni hoy creo que se fabriquen ya.
Te recomendaría mejor que aprendieras ensamblador para ARM, PIC o Intel que es lo que se usa en la actualidad y no pierdas el tiempo con el de NES ya que aunque no lo parezca, difiere bastante el ensamblador que se usa en cada arquitectura

Si quieres programar para la NES, hazlo en un lenguaje de alto nivel y métele algunas rutinas en ASM si quieres, pero si no te quieres volver loco, no lo hagas en ASM desde 0.

Un saludo.

http://nocash.emubase.de/everynes.htm#c ... rsandflags
¿De verdad crees que un compilador de C puede hacer código decente para un procesador con tan pocos registros? Si el compilador que hay para la GB/GBC ya deja mucho que desear, y eso que el procesador es bastante mas cómodo de programar... Realmente, para la NES, yo diría que ensamblador... A no ser que sea un juego en plan 3 en raya o algo así, que realmente da igual la velocidad del código...

Yo para el juego que estoy haciendo para la GB uso C y ensamblador, y realmente lo paso mal para optimizar el código... Una simple multiplicación causada por acceder a un array de structs ya le fastidia muchísimo al procesador, pues imagínate si eso es en un bucle... La mayoría de funciones en las que busco cierta velocidad, no queda mas remedio que hacerlas en ensamblador. Y te hablo de la GB, repito, que su procesador es bastante mejor que el de la NES.
ANTONIOND escribió:
Puyover escribió:Actualmente programar en ensamblador un juego completo es una total pérdida de tiempo. ASM se usa para programar rutinas especificas "embeidas" en C, que tiren bastante de procesador, para hacerlas mas rápidas. Y encima para la NES, que usaba un 6502 que ni hoy creo que se fabriquen ya.
Te recomendaría mejor que aprendieras ensamblador para ARM, PIC o Intel que es lo que se usa en la actualidad y no pierdas el tiempo con el de NES ya que aunque no lo parezca, difiere bastante el ensamblador que se usa en cada arquitectura

Si quieres programar para la NES, hazlo en un lenguaje de alto nivel y métele algunas rutinas en ASM si quieres, pero si no te quieres volver loco, no lo hagas en ASM desde 0.

Un saludo.

http://nocash.emubase.de/everynes.htm#c ... rsandflags
¿De verdad crees que un compilador de C puede hacer código decente para un procesador con tan pocos registros? Si el compilador que hay para la GB/GBC ya deja mucho que desear, y eso que el procesador es bastante mas cómodo de programar... Realmente, para la NES, yo diría que ensamblador... A no ser que sea un juego en plan 3 en raya o algo así, que realmente da igual la velocidad del código...

Yo para el juego que estoy haciendo para la GB uso C y ensamblador, y realmente lo paso mal para optimizar el código... Una simple multiplicación causada por acceder a un array de structs ya le fastidia muchísimo al procesador, pues imagínate si eso es en un bucle... La mayoría de funciones en las que busco cierta velocidad, no queda mas remedio que hacerlas en ensamblador. Y te hablo de la GB, repito, que su procesador es bastante mejor que el de la NES.

C por supuesto que no, ahí ya estamos hablando de un nivel de abstracción elevado.

Se hicieron varios juegos en nbasic en su día, que es el lenguaje del que habla el autor. El autor de dicho lenguaje lo califica como un lenguaje de alto nivel, pero sinceramente lo veo como una abstracción "un poco" mas alta de ensamblador (permite acceder a los registros directamente, a la pila, etc), por lo que la eficiencia del código generado es bastante fiel a hacer un juego íntegro en ASM (a parte de la inserción de instrucciones en ensamblador en el código).

Lo que quiero decir con esto es que no hace falta tirar de ensamblador para hacer un juego totalmente funcional para la NES.
Yo ya he puesto mi opcion, neshla, que es como un ensamblador mejorado, con algunas cosas para facilitar la programacion.
14 respuestas