[Tutorial]Programacion Snes - Introducción al Hardware

Buenas noches usuarios de este subforo , actualmente estoy aprendiendo a programar en ensamblador para Super Nintendo , me encontraba yo pasando a limpio unos apuntes caseros sobre este tema cuando me he dicho , ¿por que no utilizar estos apuntes y la información de las wikis para elaborar una serie de tutoriales de programación para Super Nintendo en Español? , así que me he puesto manos a la obra y he terminado de adaptar/traducir el primer capitulo del que si el tiempo me lo permite sera un tutorial sobre como programar para nuestra consola favorita , los tutoriales están hechos con la intención de ser lo mas sencillos posibles , seria recomendable que tuvierais nociones básicas
de programación pero creo que incluso una persona que no los tenga podrá seguir estos tutoriales. No esperéis algo como el tutorial de programación básico para megadrive , el ensamblador es algo mas complicado y laborioso y por lo tanto primero tendremos que aprender una serie de cosas antes siquiera de escribir nuestro primer programa. Antes de comenzar el tutorial quiero añadir dos cosas mas , una, yo estoy aprendiendo según escribo/traduzco estos tutoriales , aunque mis conocimientos ya son algo mas avanzados(que no mucho tampoco [carcajad] )así que tomaos esto con paciencia como una serie de fasciculados , cada X tiempo una entrega nueva y así hasta que consigamos hacer algo potable , realmente me gustaría hacer esto ultimo pero creo que en este año mi tiempo va a ser mas bien escaso así que puede que no acabe todos estos tutoriales pero lo intentare , si alguna vez abandono el proyecto definitivamente os lo comunicare no os preocupéis. Ahora la Segunda cosa estos tutoriales los medio traduzco , los medio redacto de esta wiki:
http://wiki.superfamicom.org/snes/show/HomePage
que por cierto es excelente si controláis de ingles no dudéis en pasarlo aunque mi objetivo es que los tutoriales sean mas sencillos aun.
concretamente este primer capitulo y los siguientes tienen su origen en este tutorial:
http://wiki.superfamicom.org/snes/show/ASM+Tutorial+Part+1
El autor del cual es Iceguy’s a quien le mando mi mas sincero agradecimiento por su trabajo , puedes colgar estos tutoriales siempre que cites el link de este hilo de eol como fuente y menciones a los autores ( en este caso traductor/adaptador Kappa64 y autor original Iceguy's) y informad-me de cualquier error en el texto de cualquier tipo para que pueda corregirlo , espero os sirva de ayuda.

Bueno después de semejante ladrillo empecemos por el principio:


Introducción al Hardware de Super Nintendo


Esto es un resumen de los componentes básicos de Super Nintendo , no pretende ni mucho menos explicarla en profundidad , si no mas bien dar una idea básica de los componentes del hardware , para empezar a programar. Si veis cualquier error por favor decídmelo.

CPU( WLA65c816)

La CPU de la Super Nintendo es un procesador WLA65c816. La CPU es la unidad de proceso central de la Super Nintendo , la cual se encarga de coordinar el funcionamiento de todos los componentes del hardware , además de las operaciones matemáticas , manipulación de la memoria , etc..

PPU's

Las PPU o Picture Processing Unit , son la parte del hardware que se encarga de “dibujar” las imágenes en pantalla y realizar efectos , como rotaciones , escalado , etc.. , la Super Nintendo cuenta con dos PPU.

--PPU1:

Generalmente se usa para dibujar los fondos de pantalla (backgrounds) y los sprites , también para rotaciones y escalar imágenes.

--PPU2:

Esta PPU se suele encargar de effectos especiales como mosaicos , ventanas , fades , etc..

Memorias RAM:

--WRAM

La WRAM es la RAM principal del sistema Tiene una capacidad de 128Kbytes(128x8 Kbits).

--VRAM

La VRAM es utilizada para almacenar los tiles (fondos y sprites) y paletas que posteriormente la PPU1 utilizara para dibujar en la
pantalla . Tiene una capacidad de 64Kbytes(64 x 8 kbits).

APU

APU no se refiere al famoso personaje de los Simpson( XD ) , si no a Audio Processing Unit(Unidad de proceso de Audio) . La APU se compone de varios chips y procesadores que se encargan de el sonido(Musica y Efectos Sonoros).

--SPC700(Sound CPU)

El SPC700 , se considera la CPU encargada del sonido , es una procesador con sus propios registros y su propio lenguaje ensamblador , se encarga de controlar todas las funciones de sonido de la Super Nintendo.

--S-DSP(Sound DSP)

El S-DSP cuenta con 8 canales PCM (Pulse Code Modulated) capaces de reproducir PCM en estero ,16bits y 32khz , un generador de ruido y puede realizar entre otros muchos efectos , panning y eco.

--RAM de Audio:

Es la RAM que se encarga de almacenar todos los datos referentes al sonido. La RAM tiene una capacidad de 64Kbytes , es compartida por el SPC700 y el DSP.


Esquema hardware Super Nintendo


Imagen





Aprendiendo ensamblador de WLA65c816(SNES)



Capitulo 0: Preparar el entorno de desarrollo



Primero de todo debemos de preparar el conjunto de herramientas que nos permitirán trabajar , según necesitemos mas herramientas para editar gráficos/audio y demás las iré introduciendo en sus respectivos capítulos pero por ahora solo utilizaremos la herramienta esencial que todo programador necesita , el compilador . El compilador es el programa que se encargara de convertir nuestro código fuente en un archivo binario que la maquina pueda entender y ejecutar , existen varios compiladores disponibles para trabajar con Super Nintendo como SNASM, TRASM, X816 , etc pero nosotros vamos a utilizar el WLA DX.

Paso 1.-Descargando el compilador

Podéis descargar el compilador desde este link: :

http://www.mediafire.com/?4hqa2adbcwvuhy4

Vienen incluidas tanto la versión para GNU/Linux como para Windows ya compiladas , el código fuente también esta incluido por lo que si utilizas Mac Os X seguramente puedas compilarlo , o puedas emularlo con Wine.

Paso 2.-Instalación

GNU/Linux

1.-Descomprime el archivo y entra en la carpeta WLA_DX->Gnu-Linux ->WLA_DX_BIN selecciona el archivo wla-65816 y dale permisos de ejecución (click derecho propiedades->Permisos y selecciona la casilla de “Permitir ejecutar el archivo como un programa “) repite el mismo proceso con el archivo wlalink.

2.-Copia todos los archivos , excepto los scritps (archivos con extensión .sh) en la carpeta del sistema /usr/bin(para ello necesitaras que permisos de super usuario).

*Si no consigues copiar los archivos en /usr/bin o no quieres ensuciar la instalación de tu sistema siempre puedes copiar los archivos wla-65816 y wlalink , dentro de la carpeta de tu programa.

Windows

1.-Descomprime el archivo y entra en la carpeta WLA_DX->Windows->wla_dx_9.2->binaries
copia todos los binarios dentro de C:\Windows\System32\

Paso 3.-Compilando

GNU/Linux

Para compilar un programa simplemente copia el script "make.sh" que encontraras en WLA_DX->Gnu-Linux ->WLA_DX_BIN dentro de la carpeta donde se encuentre el código de tu programa , a continuación ejecuta la terminal , utiliza "cd" para entrar en la carpeta donde esta el código de tu programa , seguidamente escribe "./make.sh" seguido del nombre del código fuente de tu programa( omitiendo la extensión).

*Si has optado por no copiar los binarios en /usr/bin tendrás que seguir el mismo proceso pero copiando los archivos “wla-65816” y “wlalink” dentro de la carpeta donde se encuentra el código de tu programa y utilizar este script en vez del que viene en el archivo comprimido:
http://www.mediafire.com/?lyspw3uwbwe6ntz

*Recuerda dar permisos de ejecución click derecho propiedades->Permisos y selecciona la casilla de “Permitir ejecutar el archivo como un programa “ a todos los binarios y scripts que vamos a utilizar

Windows

Copia *wla.bat en el directorio donde se encuentra el código de tu programa.
*wla.bat: http://www.mediafire.com/?59nc6t1d027fnw2

Ejecuta CMD y utiliza “cd” para acceder a la carpeta donde se encuentra tu código o busca el ejecutable de CMD(“CMD.EXE”) con el buscador de Windows y copialo en la carpeta donde se encuentra tu código y ejecutalo , después simplemente escribe en el CMD “wla” seguido del nombre del código de tu programa (omitiendo la extension).


Paso 4.-Probando a compilar una demo

Para asegurarnos de que esto a funcionado , vamos a compilar el siguiente archivo:
http://www.mediafire.com/?7pfklxa51sxxffv
*No es mas que la demo hecho por bazz’s(wiki.superfamicom.org) con un sprite diferente.

GNU/Linux

1.-Descomprimimos el archivo

2.-Copiamos el archivo make.sh (si has optado por la otra manera copia tambien los binarios de wla) , le damos permisos de ejecución a todo , y abrimos la terminal.

3.-Entramos en la carpeta con "cd":
cd "ruta de la carpeta"

4.-Compilamos escribiendo "./make.sh" seguido del nombre del codigo fuente del programa , en este caso:
./make.sh sprite


nos debería devolver algo así:
Free space at $0247-$7fb1.
Free space at $7fb6-$7fbf.
Free space at $7fe0-$7fe3.
Free space at $7ff0-$7ff3.
Free space at $8820-$3ffff.
Bank 00 has 32125 bytes (98.04%) free.
Bank 01 has 30688 bytes (93.65%) free.
Bank 02 has 32768 bytes (100.0%) free.
Bank 03 has 32768 bytes (100.0%) free.
Bank 04 has 32768 bytes (100.0%) free.
Bank 05 has 32768 bytes (100.0%) free.
Bank 06 has 32768 bytes (100.0%) free.
Bank 07 has 32768 bytes (100.0%) free.
259421 unused bytes of total 262144.

4.-Ahora en la misma carpeta tendrás el archivo sprite.smc , ábrelo con un emulador o pruebalo en tu Super Nintendo y disfruta de tu recompensa.

Windows:
1.-Descomprimimos el archivo

2.-Copiamos el archivo wla.bat.

3.-Copiamos el archivo cmd.exe en la carpeta y lo ejecutamos o bien ejecutamos cmd desde el lanzador de programas y entramos en la carpeta donde tenemos el código del programa:
CD "código del programa"


4.-Escribimos "wla" seguido del nombre del archivo que contiene el código del programa:
wla sprite

nos debería devolver algo así:
Free space at $0247-$7fb1.
Free space at $7fb6-$7fbf.
Free space at $7fe0-$7fe3.
Free space at $7ff0-$7ff3.
Free space at $8820-$3ffff.
Bank 00 has 32125 bytes (98.04%) free.
Bank 01 has 30688 bytes (93.65%) free.
Bank 02 has 32768 bytes (100.0%) free.
Bank 03 has 32768 bytes (100.0%) free.
Bank 04 has 32768 bytes (100.0%) free.
Bank 05 has 32768 bytes (100.0%) free.
Bank 06 has 32768 bytes (100.0%) free.
Bank 07 has 32768 bytes (100.0%) free.
259421 unused bytes of total 262144.

4.-Ahora en la misma carpeta tendrás el archivo sprite.smc , ábrelo con un emulador o pruebalo en tu Super Nintendo y disfruta de tu recompensa.


Capitulo 1: Carga y almacenamiento.


La primera cosa que debes aprender son los opcodes. Un opcode es la parte del código que sirve para indicarle a la Super Nintendo que tiene que hacer , podría compararse a una sentencia en un lenguaje de programación moderno o un comando en un interprete de comandos(CMD , Bash , etc..).

Primero vamos a aprender sobre el Acumulador.El acumulador es un lugar donde cargar y descargar datos , puedes pensar en el como un banco donde almacenas y retiras pequeñas cantidades de dinero. Los dos primeros opcodes que vamos a aprender son LDA y STA , los cuales te serán indispensables cuando escribas tu código para super nintendo.

LDA(Load to Accumulator):

LDA se utiliza para cargar un valor hexadecimal , decimal o una dirección RAM en el Acumulador , su uso no es muy complicado , para cargar un valor decimal simplemente escribe "LDA" seguido de "#" y después el valor que quieres cargar. Ejemplos:
LDA #20 ;Cargamos el valor decimal 20 en el acumulador
LDA #70 ;Cargamos el valor decimal 70 en el acumulador


*Nota:El acumulador no reconoce dígitos impares así que por ejemplo si queremos cargar el valor decimal 4 en el acumulador tendríamos que escribirlo como "04" para que sus dígitos sean pares.

Si en vez de cargar un valor decimal queremos utilizar un valor hexadecimal tendremos que añadir un símbolo del dólar "$ " delante del sostenido "# " y detrás del valor a cargar , ejemplo:

LDA #$20 ; Cargamos el valor hexadecimal 20 que se corresponde con el numero 32 en binario , al acumulador.


STA (Set to address):

"STA" coge el valor que tiene el acumulador y lo almacena en la dirección de la memoria RAM que tu especifiques. Su uso es parecido al de "LDA" , simplemente escribes el nombre del opcode "STA " , seguido del símbolo del dólar "$ " y la dirección de memoria en al que quieres almacenar el valor actual del acumulador , ejemplo:
STA $18 ; Cargamos el valor del acumulador en la dirección de memoria 18(en hexadecimal).


Pongamos ahora un ejemplo practico : En la dirección de memoria $19 se almacenan el estado de Mario , si $19 vale 0 significa un estado normal , si vale 1 significa que ha comido una seta , si vale 2 ha comido una flor de fuego . si vale 3 ha tocado una estrella y es invencible. La dirección $19 actualmente vale 0 , por lo que Mario esta en un estado normal , queremos que pase al estado de flor de fuego el cual vale 2 , como lo hacemos? Simplemente cargamos el 2 en el acumulador y seguidamente lo enviamos a la dirección de memoria que guarda el valor del estado de Mario la dirección $19 , escrito en ensamblador seria:


LTA #02; Cargamos el 2 en el acumulador.
STA $19; Almacenamos el valor del acumulador (en este momento 2) en la dirección de memoria 19(19 en hexadecimal);


STZ(Set to zero):

STZ pone a cero la dirección de memoria que se le indique , ejemplo:
STZ $19 ; ahora el valor de $19 es 0.


Resumen:

LDA(Load to Accumulator): Carga un valor en el acumulador

STA(Set to address): Almacena el valor actual del acumulador en una dirección de memoria.

STZ(Set to zero): Pone a 0 una dirección de memoria

#$ -> Valor hexadecimal
# ->Valor decimal
#% ->Valor binario
$ ->Dirección de memoria


Capitulo 2: Datos Técnicos(Direcciones de memoria )


2.1.- modos de direccionamiento

Existen 3 maneras para Cargar/Almacenar direcciones de memoria:

1.-Directa:

LDA $xx



Puedes cargar un valor de 2 dígitos(xx) , esto se llama asignación directa y es una dirección
de 8 bits.

2.-Absoluta:

LDA $xxxx


Puedes cargar un valor de 4 dígitos , esto se llama asignación absoluta(absolute adressing) y es una dirección de 16 bits

3.-Dirección larga(long addressing):

LDA $xxxxxx


Puedes cargar un valor de 6 dígitos , esto se llama asignación larga y es una dirección de 24 bits
*Importante: no puedes poner a cero una dirección de 24 bits(dirección larga) por que el ensamblador/compilador lo leerá como un opcode diferente , tendrás que hacer lo siguiente:
LDA #$00
STA $xxxxxx


2.2.-Organización de la memoria y bancos de datos

Direcciones de Memoria:

$0000 - $1FFF →  RAM
$2000 - $7FFF →  Registros de Hardware
$8000 - $FFFF →  ROM


*Los bancos comprenden entre la dirección $0000 hasta la dirección $FFFF , a partir de esta dirección comienza el siguiente banco de memoria. Ejemplo:
$010000 -> Banco 1
$01FFFF -> Fin del Banco 1
$020000 -> Banco 2
$02FFFF ->Fin del Banco 2



-RAM:

Es la memoria Ram de la Super Nintendo donde podemos almacenar y cargar datos con los cuales vamos a trabajar , como por ejemplo variables.

-ROM:

Los datos de la ROM , los datos del cartucho.
*No se pueden modificar , como su nombre indica(Read Only Memory).

-Registros de Hardware:

Son direcciones de Memoria que podemos leer y escribir , y cuyos valores sirven para configurar o controlar el hardware.

Como acceder a direcciones de memoria en diferentes bancos de datos?

Utilizando direcciones largas de 24bits (long adressing) , ya que en los primeros 2 dígitos podremos especificar el banco de datos.
Ejemplo:

Queremos leer una dirección de memoria en el banco $7E , la dirección de memoria $C100 , pero no nos encontramos en ese banco en este momento.

Esto estaría mal:
LDA $C100

Tendriamos que hacer esto en su lugar:
LDA $7EC100
socram8888 está baneado por "incumplimiento términos y condiciones de uso"
SNES + ensamblador = [burla3]

Fuera bromas, creo que has empezado demasiado fuerte. Deberias explicar primero la arquitectura de la consola, que es ensamblador, que es un registro, que es un mapa de memoria y cual es, etc...

Y como consejo personal: para iniciarse con ensamblador, empezad con 68000 que es muchisimo mas simple y amigable (en apenas 30 minutos aprendi a manejar las instrucciones principales)
Pa favoritos. Muy buena iniciativa. Lo seguiré de cerca a ver si aprendo y se consigue hacer algo.
socram8888 escribió:SNES + ensamblador = [burla3]

Fuera bromas, creo que has empezado demasiado fuerte. Deberias explicar primero la arquitectura de la consola, que es ensamblador, que es un registro, que es un mapa de memoria y cual es, etc...

Y como consejo principal: para iniciarse con ensamblador, empezad con 68000 que es muchisimo mas simple y amigable (en apenas 30 minutos aprendi a manejar las instrucciones principales)


Venga, no seas quisquilloso. A este nivel a mi ya me va bien, puede seguir por mi parte. ^-^
Despues contestare a socram haber que creo que tiene razón en eso de una introducion a la consola y tambien decir que escribire lo mas pronto posible como compilar y prepararlo todo para seguir los tutoriales en condiciones pero ahora empieza la nueva temporada de The Walking dead y no me la quiero perder.
Up, que no decaiga.

Mucho ánimo con esta iniciativa, que yo la estoy siguiendo con mucho interés.
A mi este nivel me parece perfecto... a parte hay muchas cosas comunes entre consolas que utilizan ensamblador, así que cualquier información, ejemplos, etc... es bienvenida. Cierto es que cuando tengas más tiempo una intro no estaría mal [360º]
he agregado un capitulo que explica como prepararlo todo para compilar un programa , aunque de momento no vayamos a compilar nada en los tutoriales , de todas maneras este capitulo rellena un poco el vació de la introducción hasta que haga una de verdad.

P.D: Perdonad la redacción , si encontráis algún error (se del carácter que sea)o problema en los tutoriales no dudéis en decírmelo.
Me lo pongo en favoritos. Me parece muy buena idea :)
Gracias.
muy bueno la verdad pero tiene razon socram 8888. yo algo de snes entiendo y te sigo el paso sin problemas.
pero saca el pie del acelerador pone reversa y arranca por
1º-tiles (EXPLICA TODOS LOS FORMATOS QUE TIENE)
2º-capacidad de memoria
y recien ahi salta:
LDA
LDX
LDY
STA
STX
STY
Y POR ULTIMO
BNE (ya con esto haces algo

que enrealidad el ensamblador de esta maquinita es tan sencillo como el de nes ( no creo que sea mas facil el 68000, en relidad lo mejor creo que seria hablar del 6800 y luego de su hermano invalido 6502 para terminar diciendo que el procesador ricoh de la nes por tanto tambien el de snes no anda en decimal)
lo dificultoso tal ves es el uso de perifericos.

si queres te paso unos archivos donde se explica en español [tadoramo] todos los formatos de tiles que soporta ppu mas un pequeño tuto de sprites
saludos y dale para delante
matuanime escribió:muy bueno la verdad pero tiene razon socram 8888. yo algo de snes entiendo y te sigo el paso sin problemas.
pero saca el pie del acelerador pone reversa y arranca por
1º-tiles (EXPLICA TODOS LOS FORMATOS QUE TIENE)
2º-capacidad de memoria
y recien ahi salta:
LDA
LDX
LDY
STA
STX
STY
Y POR ULTIMO
BNE (ya con esto haces algo

que enrealidad el ensamblador de esta maquinita es tan sencillo como el de nes ( no creo que sea mas facil el 68000, en relidad lo mejor creo que seria hablar del 6800 y luego de su hermano invalido 6502 para terminar diciendo que el procesador ricoh de la nes por tanto tambien el de snes no anda en decimal)
lo dificultoso tal ves es el uso de perifericos.

si queres te paso unos archivos donde se explica en español [tadoramo] todos los formatos de tiles que soporta ppu mas un pequeño tuto de sprites
saludos y dale para delante


Como he dicho al principio yo también estoy aprendiendo y los tutoriales los traduzco de wiki.superfamicom.org y los mezclo con apuntes míos y otra documentación , si me los pasas pues te estaría agradecido , la verdad es que desde que he empezado con los tutos otra gente me ha envidado también documentación e info y lo agradezco profundamente , por otro lado tenia pensado primero escribir unos tutos básicos sobre ensamblador de Snes( X e Y los iba a incluir unos capítulos mas tarde , también mas o menos como va el tema de las direcciones de memoria en Snes , ROM,RAM, registros , bancos , también hacer operaciones aritméticas , comparaciones y saltos , etc..) , después ya empezaría con el DMA , VRAM , PPU y todo lo que tiene que ver con los sprites , después los mandos , sonidos , etc...
kappa64 escribió:la verdad es que desde que he empezado con los tutos otra gente me ha envidado también documentación e info y lo agradezco profundamente


Que suerte... yo me quedé mas tirao que una colilla. No faltó quien se quejara de que no lo estaba haciendo bien, pero yo solo, aprendiendo desde cero... es lo que hay.
kappa64


Y no conviene ir a algo mas facil, como C? ASM es genial, pero normalmente, no se puede hacer proyectos reales, porque o tienes muchos conocimientos y tiempo, o no pasas de algunos sprites sueltos

Yo de SNES ni papa, pero alguna vez habia echo en C sprites, entrada joysticks, etc y fue bastante facil la verdad

Con el problema que me encontre n su momento fue la falta de buenas herramientas para trabajar los graficos
theelf escribió:Con el problema que me encontre n su momento fue la falta de buenas herramientas para trabajar los graficos


No estaría mal currarse un motor que permita hacer de todo de manera intuitiva... aunque al no ser muy específico, seguramente no aprovechase bien el hardware.
theelf escribió:Con el problema que me encontre n su momento fue la falta de buenas herramientas para trabajar los graficos

eso es cierto pero hoy en día se soluciono con tanto programa de hackeo de rom como:
TILE MOLESTER
TILE LAYER PRO
y algun otro que no recuerdo el nombre
yo la verdad termine abandonando con la nes. por el hecho de que no hay ningun compliador assembler en estilo windows (como basiesgaxorz)lo mas parecido que encontre fue el nesdev kit que encima estaba incompleto por que te pedía nesasm3 y nunca lo encontre [buuuaaaa] ( lo bueno que tenia era que traia una documentacion muy completa) por lo que usando un editor hexadecimal, copiaba todo el codigo a mano. Por lo que nunca pude hacer algo bueno

por mas conocimiento que pudiera adquirir sin herramientas no hay nada que hacer }:/

edito:
casi me olvidaba, como lo prometido es deuda, aca tenes la info de tiles y de sprites
http://www.megaupload.com/?d=XOAK0ZVN
esa info la habia sacado de una pagina española ya no recuerdo de cual pero es muy util
graciass por este tutorial para favoritos que va ^^
Muy , pero que muy bueno este hilo, vaya currazo te has dado, muchisimas gracias por la parte que me toca. Estoy en proceso de hacerme algunos juegos de Snes que no llegaron a salir aqui, y gracias a esto he aclarado varias dudas, de verdad que muchisimas gracias. Saludiños [sonrisa]
theelf escribió:
kappa64


Y no conviene ir a algo mas facil, como C? ASM es genial, pero normalmente, no se puede hacer proyectos reales, porque o tienes muchos conocimientos y tiempo, o no pasas de algunos sprites sueltos

Yo de SNES ni papa, pero alguna vez habia echo en C sprites, entrada joysticks, etc y fue bastante facil la verdad

Con el problema que me encontre n su momento fue la falta de buenas herramientas para trabajar los graficos


Mi lenguaje de programación predilecto es C (El único que se XD), el ASM de Super lo tengo mas como un Hobby que otra cosa, de todas maneras también tengo el compilador de C para SNES (que no he probado pero si que he visto ejemplos programados en C para la Super ),
cuando acabe con ASM supongo que me pondré a mirar como funciona el tema del C lo que me preocupa es la perdida de rendimiento respecto a ASM , aunque para RPG's , juegos de estrategia o juegos no muy exigentes técnicamente C seria una mejor opción.

matuanime


Gracias!
kappa64 escribió:
theelf escribió:
kappa64


Y no conviene ir a algo mas facil, como C? ASM es genial, pero normalmente, no se puede hacer proyectos reales, porque o tienes muchos conocimientos y tiempo, o no pasas de algunos sprites sueltos

Yo de SNES ni papa, pero alguna vez habia echo en C sprites, entrada joysticks, etc y fue bastante facil la verdad

Con el problema que me encontre n su momento fue la falta de buenas herramientas para trabajar los graficos


Mi lenguaje de programación predilecto es C (El único que se XD), el ASM de Super lo tengo mas como un Hobby que otra cosa, de todas maneras también tengo el compilador de C para SNES (que no he probado pero si que he visto ejemplos programados en C para la Super ),
cuando acabe con ASM supongo que me pondré a mirar como funciona el tema del C lo que me preocupa es la perdida de rendimiento respecto a ASM , aunque para RPG's , juegos de estrategia o juegos no muy exigentes técnicamente C seria una mejor opción.

matuanime


Gracias!



¿Enlaces a los tutoriales de C para programar en SNES?
Perdón a todos pero tardare algo en actualizar ya que tengo las próximas semanas cargaditas de Examenes [snif]
DarkRyoga escribió:¿Enlaces a los tutoriales de C para programar en SNES?


Primero de todo perdón por no responder antes , no he dicho que tuviera tutoriales de programación en C para Snes , lo que si que te puedo pasar es el compilador y enlaces para bajarte el codigo de unos cuantos ejemplos escritos en C y ASM:

Compilador:
http://www.neoflash.com/forum/index.php/topic,6025.0.html

los ejemplos ahora no los encuentro , aunque en esta pagina si que había una demo escrita en C(con el código incluido) que esta bastante bien , es algo así como una bios para Snes:
Demo simple escrita en C y ensamblador, y que pretende mostrar cómo introducir código escrito en lenguaje C, para encargarse de partes del programa que son complicadas en ensamblador.

Usa wdc2wla (ver más abajo, en 'utilidades') y requiere el compilador WDC, y el ensamblador WLA para el 65816 (ver 'readme.txt').

http://www.consolasparasiempre.net/prog/prog.htm
se quedo trunco el tuto?
una lastima justo que empezaba a interesarme
[mamaaaaa]
kappa64 escribió:Perdón a todos pero tardare algo en actualizar ya que tengo las próximas semanas cargaditas de Examenes [snif]
DarkRyoga escribió:¿Enlaces a los tutoriales de C para programar en SNES?


Primero de todo perdón por no responder antes , no he dicho que tuviera tutoriales de programación en C para Snes , lo que si que te puedo pasar es el compilador y enlaces para bajarte el codigo de unos cuantos ejemplos escritos en C y ASM:

Compilador:
http://www.neoflash.com/forum/index.php/topic,6025.0.html

los ejemplos ahora no los encuentro , aunque en esta pagina si que había una demo escrita en C(con el código incluido) que esta bastante bien , es algo así como una bios para Snes:
Demo simple escrita en C y ensamblador, y que pretende mostrar cómo introducir código escrito en lenguaje C, para encargarse de partes del programa que son complicadas en ensamblador.

Usa wdc2wla (ver más abajo, en 'utilidades') y requiere el compilador WDC, y el ensamblador WLA para el 65816 (ver 'readme.txt').

http://www.consolasparasiempre.net/prog/prog.htm


Lo importante es sacarse esos examenes. Ahora que me va a llegar mi EverDrive de SNES usare estos tutoriales y lo que has ido subiendo estas semanas atras para ir probando.
DarkRyoga escribió:Lo importante es sacarse esos examenes. Ahora que me va a llegar mi EverDrive de SNES usare estos tutoriales y lo que has ido subiendo estas semanas atras para ir probando.


Gracias y suerte , a ver si entre todos logramos algo de movimiento en la scene de SNES.
Por cierto , si sabes lo suficiente no dudes en mirar documentación de wiki.superfamicom.org y similares , sera mas rápido que esperarme.
Primero de todo perdón por tardar tanto en actualizar , me encontré con una serie de dificultades que se podrían resumir en que me di cuenta de que necesitaba saber mas para poder seguir con los tutoriales(para saber explicarlo y demás) y problemas con los Estudios , que me tienen loco.
Segundo pedir disculpas por que en esta actualización tampoco os traiga el segundo capitulo de ASM para Super Nintendo , pero falta muy poquito para que lo añada con la próxima actualización (prácticamente esta casi listo).
También deciros que empiezo a dar mis primeros pasitos en la programación de SNES :) , y aunque no sea gran cosa me siento orgulloso de ello.

Un par de demos trasteando con Tiles:
Imagen
Imagen

Tengo en mente hacer una especie de TXT2SNES para leer txt en la Super Nintendo(PDF estaría mejor pero bueno.. [poraki] ).

[fies] Felices Fiestas a todos! [fies]

P.D: Tengo que hacerle una limpieza y "adecentamiento" al hilo , para que este algo mas organizado y con mas "clase" , con secciones definidas , icono y logos personalizados y demás chorraditas XD.
¡Mola!. Veo que sigues en ello, eso es una buena noticia para todos. No estaría mal que se sumaran otros gurús de la super, como magno... y ya que estamos, pocket lucho, 68000, y theelf.

Por pedir que no quede, ¿no?. El snesmaker me parece una idea muy guapa de hacia donde tiene que ir la scene de la snes. Mas adelante, estaría genial que el programa se adaptase al funcionamiento del SD2SNES, mas especificamente a su capacidad para transferir datos sin cuellos de botella, ni esperar permisos.

Me estoy dando cuenta de que practicamente funcionaría como lo hacen los cartuchos de neo geo. Todo en si sería como estuviese metido en la ram y en la video ram, directamente.

En un juego normal de snes, en 64kB de memoria de video hay que meter casi todo lo que vas a ver en una escena, pero con este cartucho, a esa velocidad de transferencia, lo que vamos a ver son 64kB POR FRAME... y con la memoria RAM pasa exactamente lo mismo, los 128KB se podrían actualizar a cada frame.


...las posibilidades son tan grandes, y permitiría tal nivel en la gestión del comportamiento de los objetos, que prácticamente es una lástima que el corazón del sistema sea un 65c816.
Creo que es el momento perfecto para implementar un 68000 en la FPGA (al fin y al cabo, un bicho de estos iba a ser la CPU de esta máquina).

sigamos soñando xD... si además consiguen rescatar el SFX como VDP3, en conjunción con el resto del sistema (y no como funciona en los cartuchos), tendríamos como resultado lo que iba a ser en si este hardware (pero con el añadido del MSU1).



Me apetecía escribir xDDD
Ralph escribió:No estaría mal que se sumaran otros gurús de la super, como


LOL que?


No me refiero a eso XDDDDD , me refiero a que para que se unan "mas gurus" , tiene que haber ya "un guru" en el proyecto [burla2]

P.D: El jodio me pone un enlace a la definición en wikipedia XDDD
kappa64 escribió:P.D: El jodio me pone un enlace a la definición en wikipedia XDDD


Lo se, lo se [rtfm]

Aunque sea solo pro la iniciativa, joer xD
Ralph escribió:¡Mola!. Veo que sigues en ello, eso es una buena noticia para todos. No estaría mal que se sumaran otros gurús de la super, como magno... y ya que estamos, pocket lucho, 68000, y theelf.

Por pedir que no quede, ¿no?. El snesmaker me parece una idea muy guapa de hacia donde tiene que ir la scene de la snes. Mas adelante, estaría genial que el programa se adaptase al funcionamiento del SD2SNES, mas especificamente a su capacidad para transferir datos sin cuellos de botella, ni esperar permisos.

Me estoy dando cuenta de que practicamente funcionaría como lo hacen los cartuchos de neo geo. Todo en si sería como estuviese metido en la ram y en la video ram, directamente.

En un juego normal de snes, en 64kB de memoria de video hay que meter casi todo lo que vas a ver en una escena, pero con este cartucho, a esa velocidad de transferencia, lo que vamos a ver son 64kB POR FRAME... y con la memoria RAM pasa exactamente lo mismo, los 128KB se podrían actualizar a cada frame.


...las posibilidades son tan grandes, y permitiría tal nivel en la gestión del comportamiento de los objetos, que prácticamente es una lástima que el corazón del sistema sea un 65c816.
Creo que es el momento perfecto para implementar un 68000 en la FPGA (al fin y al cabo, un bicho de estos iba a ser la CPU de esta máquina).

sigamos soñando xD... si además consiguen rescatar el SFX como VDP3, en conjunción con el resto del sistema (y no como funciona en los cartuchos), tendríamos como resultado lo que iba a ser en si este hardware (pero con el añadido del MSU1).



Me apetecía escribir xDDD


Es que no se, eso que tu pides ya no sería una snes sino mas bien skynet xD Yo soy de los que les gustan las consolas sin edulcorantes, sonido chiptune y que lo pueda jugar la mayor gente posible. ¿Programar algo para la super? Puede que algún dia pero por ahora tengo otra en miras a la que sacarle jugo (y no es la megadrive).
pocket_lucho escribió:
Es que no se, eso que tu pides ya no sería una snes sino mas bien skynet xD Yo soy de los que les gustan las consolas sin edulcorantes, sonido chiptune y que lo pueda jugar la mayor gente posible. ¿Programar algo para la super? Puede que algún dia pero por ahora tengo otra en miras a la que sacarle jugo (y no es la megadrive).


LA NEO GEO

He acertado?
Ralph escribió:¡Mola!. Veo que sigues en ello, eso es una buena noticia para todos. No estaría mal que se sumaran otros gurús de la super, como magno... y ya que estamos, pocket lucho, 68000, y theelf.

Por pedir que no quede, ¿no?. El snesmaker me parece una idea muy guapa de hacia donde tiene que ir la scene de la snes. Mas adelante, estaría genial que el programa se adaptase al funcionamiento del SD2SNES, mas especificamente a su capacidad para transferir datos sin cuellos de botella, ni esperar permisos.

Me estoy dando cuenta de que practicamente funcionaría como lo hacen los cartuchos de neo geo. Todo en si sería como estuviese metido en la ram y en la video ram, directamente.

En un juego normal de snes, en 64kB de memoria de video hay que meter casi todo lo que vas a ver en una escena, pero con este cartucho, a esa velocidad de transferencia, lo que vamos a ver son 64kB POR FRAME... y con la memoria RAM pasa exactamente lo mismo, los 128KB se podrían actualizar a cada frame.


...las posibilidades son tan grandes, y permitiría tal nivel en la gestión del comportamiento de los objetos, que prácticamente es una lástima que el corazón del sistema sea un 65c816.
Creo que es el momento perfecto para implementar un 68000 en la FPGA (al fin y al cabo, un bicho de estos iba a ser la CPU de esta máquina).

sigamos soñando xD... si además consiguen rescatar el SFX como VDP3, en conjunción con el resto del sistema (y no como funciona en los cartuchos), tendríamos como resultado lo que iba a ser en si este hardware (pero con el añadido del MSU1).



Me apetecía escribir xDDD



Sabes que estás soñando ¿no?
[bye] [bye]
pocket_lucho escribió:Es que no se, eso que tu pides ya no sería una snes sino mas bien skynet xD Yo soy de los que les gustan las consolas sin edulcorantes, sonido chiptune y que lo pueda jugar la mayor gente posible. ¿Programar algo para la super? Puede que algún dia pero por ahora tengo otra en miras a la que sacarle jugo (y no es la megadrive).


Si, está claro, pero tambien nos gustaría ver cosas en el megacd, y eso que no hay tantos como megadrives.

Los emuladores tambien están para eso, el que no pueda, solo tiene que querer XD (pero la propia scene tambien incentiva a jugar las cosas en el hardware original, que es de lo que se trata).


De momento, lo que es real es el snesmaker. Quizás algún día permita algo mas que juegos sencillos, pero para empezar está muy muy bien :)


sgonzalez escribió:Sabes que estás soñando ¿no?
[bye] [bye]


Cándidamente, si [sonrisa] (Por eso seguimos en clásicas [babas]).


De todos modos, hay cosas que están ahí. El bicho transfiere datos a 9MBytes/S, directamente, sin esperar permisos, y sin cuellos de botella. Algo parecido a lo que conocemos sobre los cartuchos de neo geo, ¿no?.
No sería mejor diseñar un nuevo hardware desde cero y meterlo dentro de una carcasa de SNES?? jajaja XD
.... hombre mejorar el SNES Game Maker ese o como se llame si que seria un paso importante, porque ahora mismo solo permite hacer intros y poco más.
(mensaje borrado)
DarkRyoga escribió:.... hombre mejorar el SNES Game Maker ese o como se llame si que seria un paso importante, porque ahora mismo solo permite hacer intros y poco más.


Lo mejor seria crear un nuevo proyecto que haga lo mismo ya que el desarrollo es tan temprano que no se tardaría mucho , pero sobretodo , que sea un proyecto de Software Libre y que utilice C/C++ con GTK/QT4 o Java , para que sea Multiplataforma
Ralph escribió:
pocket_lucho escribió:Es que no se, eso que tu pides ya no sería una snes sino mas bien skynet xD Yo soy de los que les gustan las consolas sin edulcorantes, sonido chiptune y que lo pueda jugar la mayor gente posible. ¿Programar algo para la super? Puede que algún dia pero por ahora tengo otra en miras a la que sacarle jugo (y no es la megadrive).


Si, está claro, pero tambien nos gustaría ver cosas en el megacd, y eso que no hay tantos como megadrives.
.


No te creas, si programa algo algun dia para megacd será porque fabricar los cds es facil y barato, no por sus capacidades que como en snes, seguramente no voy ni a arañar.

kappa64 escribió:
pocket_lucho escribió:
Es que no se, eso que tu pides ya no sería una snes sino mas bien skynet xD Yo soy de los que les gustan las consolas sin edulcorantes, sonido chiptune y que lo pueda jugar la mayor gente posible. ¿Programar algo para la super? Puede que algún dia pero por ahora tengo otra en miras a la que sacarle jugo (y no es la megadrive).


LA NEO GEO

He acertado?


Si los chinos se portan y me dejan fabricar en fisico si, sino... neogeo cd xD
bertobp escribió:No sería mejor diseñar un nuevo hardware desde cero y meterlo dentro de una carcasa de SNES?? jajaja XD

+1
no se porque sera, pero hay gente que no sabe de las capacidades de esta consola, si hasta dreamcast puede emular, con una minima modificacion [sati]
Imagen
pocket_lucho escribió:
Ralph escribió:Si, está claro, pero tambien nos gustaría ver cosas en el megacd, y eso que no hay tantos como megadrives.

No te creas, si programa algo algun dia para megacd será porque fabricar los cds es facil y barato, no por sus capacidades que como en snes, seguramente no voy ni a arañar.



pocket_lucho escribió:Si los chinos se portan y me dejan fabricar en fisico si, sino... neogeo cd xD


A esto me refería :)

Es que todo depende de lo que uno quiera hacer. A mi por ejemplo, me llama la atención ver que es capaz de hacer todo el combo de MSU1 + SNES.

Solo son sueños, está claro, pero del "y si" vivimos constantemente en clásicas. No hace falta ni decir que algunas veces sólo nos estamos flipando un poco (o un mucho XD).


Trahsh rally sería posible sin ningún tipo de ayuda, y muchos juegos de recreativa de la época tambien. en su día, tan solo les lastraban que les concedían unos cartuchos irrisorios... y el sunset riders, que para mi pudo haber sido portado a snes y megadrive con muchísima gloria, se quedaron en "menos" solo porque no llevaban 32 megas del ala. En mi opnión, es aquí hacia donde debe apuntar la escena ahora mismo (y a largo plazo, por supuesto, no digo otra cosa).
Ralph escribió:
pocket_lucho escribió:
Ralph escribió:Si, está claro, pero tambien nos gustaría ver cosas en el megacd, y eso que no hay tantos como megadrives.

No te creas, si programa algo algun dia para megacd será porque fabricar los cds es facil y barato, no por sus capacidades que como en snes, seguramente no voy ni a arañar.



pocket_lucho escribió:Si los chinos se portan y me dejan fabricar en fisico si, sino... neogeo cd xD


A esto me refería :)

Es que todo depende de lo que uno quiera hacer. A mi por ejemplo, me llama la atención ver que es capaz de hacer todo el combo de MSU1 + SNES.

Solo son sueños, está claro, pero del "y si" vivimos constantemente en clásicas. No hace falta ni decir que algunas veces sólo nos estamos flipando un poco (o un mucho XD).


Trahsh rally sería posible sin ningún tipo de ayuda, y muchos juegos de recreativa de la época tambien. en su día, tan solo les lastraban que les concedían unos cartuchos irrisorios... y el sunset riders, que para mi pudo haber sido portado a snes y megadrive con muchísima gloria, se quedaron en "menos" solo porque no llevaban 32 megas del ala. En mi opnión, es aquí hacia donde debe apuntar la escena ahora mismo (y a largo plazo, por supuesto, no digo otra cosa).


Yo con un remake de Super Aleste con una OST remasterizada por este tipo ya estaría conforme:
http://www.youtube.com/watch?v=pobaCtSssLY

P.D:Por cierto los emuladores deberían incluir la opción de reproducir archivos de música personalizados para sustituir los SPC , eso + filtros HD= Amor.
Vomitron es dios, la versión del OST del Contra que tiene es crema. Imaginate jugando al Contra3/Super Probotector con esa versión de fondo

http://www.youtube.com/watch?v=Xn9ub_aULgw
He hecho una pequeña actualización aprovechando que hoy estoy enfermo y no voy al Instituto , con un segundo capitulo , aunque no tengo muy claro el tema de las direcciones de memoria , sobretodo como se organizan los bancos pero bueno cualquier corrección sera bienvenida.
Los siguientes capítulos creo que tardare mucho menos en postearlos , y he pensado que cuando esto tenga una extensión medianamente grande ,(mas o menos cuando empiece con los tiles , paletas , sprites , etc..) lo pasare a la wiki y lo organizare todo lo mejor que pueda.
Gracias por la actualización.
parece que se quedo frenado el tuto

yo quería saber si hay algun emulador de snes que me permita hacer debug de la ppu para poder buscar los tiles correspondientes a un texto
es que estoy haciendo la traducción del juego slayers de snes y me encontre con la dificultad de estar a ciegas

gracias de antemano [oki]
Hola, esto lo buscaba yo en el hilo de programación, por eso no encontraba nada.
Como esto esta algo parado , ( comprended que falta muy poco para el selectivo , etc , etc..) , aprovecho y comparto con vosotros esta introducción a la programación de consolas de 16 y 8 bits de la web consolasparasiempre(Una excelente web os animo a visitarla) donde se introducen la mayoría de conceptos básicos:
http://www.consolasparasiempre.net/articulos/?p=18

P.D: Por supuesto no he abandonado simplemente es un parón temporal.
47 respuestas