He añadido una sección al inicio, que la verdad, no podía faltar, una pequeña explicación sobre la CPU de la gameboy, sus registros y demás, a ver que os parece.
Mañana seguiré explicando el hola mundo.
He añadido una sección al inicio, que la verdad, no podía faltar, una pequeña explicación sobre la CPU de la gameboy, sus registros y demás, a ver que os parece.
Mañana seguiré explicando el hola mundo.
LADECADENCE.NET GBCartflasher!!!
Muy interesante el proyecto... quisiera saber si esta orientado a usarse con flashcarts, o tambien con emuladores como el caso de la PSP o WIZ.
Sería genial que se pudiera crear un reproductor de mp3 para GBA usando flashcart.
Mas tarde pruebo tus roms con mi EZ Flash IV, ya te contaré como me fue.
Animo con el proyecto.
gracias por los animos. es principio el software desarrollado tanto para GBA como para GB que aqui se hace tiene por objetivo ser ejecutado en FlashCart correspondiente a cada maquina. Ya te anticipo que las roms de GBA que he ido generando estos dias no funcionan en el emu de Wiz (de hecho no conozco ningun HomeBrew que funcione en el emulador de GBA de Wiz ), es un tema de la cabecera de las roms creo, sin embargo en uno de los kits de desarrollo (concretamente en el devkitPRO) existe una utlidad llamada fixgba o algo asi que modifica las cabeceras de los ficheros .gba generados. en fin supongo que todo será cuestion de probar. Sin embargo creo que en una GBA si que sería capaz de hgacerlos funcionar. Espero los resultados de vuestras pruebas.SALUDOS.
Última edición por jduranmaster; 14/06/2010 a las 23:40
Aqui os presento otro ejemplo que hace uso del modo gráfico 3 de GBA realizado mediante el devkitadv-r5-beta-3. Es muy sencillito, y tiene por objetivo completar la información que ya teniamos hacerca de como manejar los fondos de pantalla en el modo bitmap. El ejemplo pinta tres regiones de distinto color y mediante los botones A y B del pad podemos cambiar su distribución. En este caso he tomado otros ficheros .h que vienen en la distribución del kit para la definición de tipos y demás datos, pero el keypad.h que nos permitia definir la correspondencia de teclas con el PAD de la GBA sigue siendo el mismo.
El código del programa del programa principal es el siguiente:
/*
@author: jduranmaster
*/
#include "gba.h"
int main(){
u8 x,y;
SetMode(MODE_3 | BG2_ENABLE);
for(y=0;y<160;y++){
for(x=0;x<240;x++){
FrontBuffer[(y*240)+x]=RGB(0, 31, 0);
}
}
for(y=20;y<140;y++){
for(x=20;x<220;x++){
FrontBuffer[(y*240)+x]=RGB(0, 0, 31);
}
}
for(y=40;y<120;y++){
for(x=60;x<180;x++){
FrontBuffer[(y*240)+x]=RGB(31, 0, 0);
}
}
while(1){
// process input
if(!((*KEYS) & KEY_A)){
for(y=0;y<160;y++){
for(x=0;x<240;x++){
FrontBuffer[(y*240)+x]=RGB(0, 31, 0);
}
}
for(y=20;y<140;y++){
for(x=20;x<220;x++){
FrontBuffer[(y*240)+x]=RGB(0, 0, 31);
}
}
for(y=40;y<120;y++){
for(x=60;x<180;x++){
FrontBuffer[(y*240)+x]=RGB(31, 0, 0);
}
}
}
if(!((*KEYS) & KEY_B)){
for(y=0;y<160;y++){
for(x=0;x<240;x++){
FrontBuffer[(y*240)+x]=RGB(0, 0, 31);
}
}
for(y=20;y<140;y++){
for(x=20;x<220;x++){
FrontBuffer[(y*240)+x]=RGB(31, 0, 0);
}
}
for(y=40;y<120;y++){
for(x=60;x<180;x++){
FrontBuffer[(y*240)+x]=RGB(0, 31, 0);
}
}
}
}
return 0;
}//fin de main
Ale, he terminado la primera parte del tutorial, el hola mundo completamente explicado, y he añadido un segundo programa con una mejorilla para evitar el problema de no inicializar la memoria de video.
Ya me comentais que os parece, para el próximo capítulo, sprites.
:-)
http://wiki.ladecadence.net/doku.php...de_ensamblador
LADECADENCE.NET GBCartflasher!!!
xzakox revisa tus links de downloads en el tuto que sólo sale el fetch.php
genial el tuto completo. GameMaster tiene razón, revisa los enlaces de descarga que has puesto.
Es muy raro, sale el fetch.php pero si lo descargas, es el archivo que debería ser.
Estoy mirando la configuración del wiki pero si quereis probar cosas, solo teneis que ir descargando y renombrando al nombre original que ponia el enlace.
LADECADENCE.NET GBCartflasher!!!
Aqui os traigo otro programita para la GBA realizado con el devkitadv-r5-beta-3. Se trata de una rom que usas sprites y el pad para permitir al usuario mover un cuadrado por la pantalla. Obviemente para su realización es necesario conocer un poco el modo de sprites que tiene la GBA. Dentro del devkitadv hay una documentación al respecto donde se explican los bits de los registros necesarios para manajar sprites y los modos asociados. que esto os sirva como ejemplo de lo que se podría hacer.
El código fuente del programa principal es el siguiente:
En los posts espero poder subir ejemplos de manejo de sonido y animaciones. Aunque lo más probable es que ya sea usando el devkitPRO para GBA porque es más completo que el devkitadv. Un aspecto importante al respecto de esto es que el software para GBA desarrollado en un kit no es compatible con el otro (al menos eso ocurre entre el devkitadv y del devkitPRO), de todas formas como siempre al comienzo de cada post del hilo se especificará con que kit se realizó el ejemplo para que lo podais seguir bien. SALUDOS./*
@author: jduranmaster
*/
#include "gba.h"
#include "keypad.h"
#include "dispcnt.h"
#include "move.h"
#include "flcl.h"
#include "block1.h"
u16* OAM = (u16*)0x7000000;
//array de sprites.
OAMEntry sprites[128];
pRotData rotData = (pRotData)sprites;
//varaibles que marcan la posición de las coordenadas X e Y.
s16 xpos = 100;
s16 ypos = 60;
void CopyOAM(){
u16 loop;
u16* temp;
temp = (u16*)sprites;
for(loop = 0; loop < 128*4; loop++)
{
OAM[loop] = temp[loop];
}
}//fin de la función.
//inicializa los sprites en pantalla.
void InitializeSprites(){
u16 loop;
for(loop = 0; loop < 128; loop++)
{
sprites[loop].attribute0 = 160; //y to > 159
sprites[loop].attribute1 = 240; //x to > 239
}
}//fin de la función
//espera a que se termine de pintar en l pantalla.
void WaitForVsync(){
while((volatile u16)REG_VCOUNT != 160){}
}//fin de la función.
void GetInput(){
if(!(*KEYS & KEY_UP))
{
if(ypos > 0)
ypos--;
}
if(!(*KEYS & KEY_DOWN))
{
if(ypos < 144)
ypos++;
}
if(!(*KEYS & KEY_LEFT))
{
if(xpos > 0)
xpos--;
}
if(!(*KEYS & KEY_RIGHT))
{
if(xpos < 224)
xpos++;
}
if(!(*KEYS & KEY_A))
{}
if(!(*KEYS & KEY_B))
{}
if(!(*KEYS & KEY_L))
{}
if(!(*KEYS & KEY_R))
{}
if(!(*KEYS & KEY_SELECT))
{}
if(!(*KEYS & KEY_START))
{}
}//fin de la función.
//definir el sprite y pintarlo por pantalla.
void MoveSprite(OAMEntry* sp, int x, int y){
if(x < 0)
x = 512 + x;
if(y < 0)
y = 256 + y;
sp->attribute1 = sp->attribute1 & 0xFE00;
sp->attribute1 = sp->attribute1 | x;
sp->attribute0 = sp->attribute0 & 0xFF00;
sp->attribute0 = sp->attribute0 | y;
}//fin de la función.
int main(){
u16 loop;
SetMode(MODE_1 | OBJ_ENABLE | OBJ_MAP_1D); //modo 1 con mapeo 1D, además se permite el uso de sprites (OBJ_ENABLE)
//con el bucle cargamos en el buffer de pantalla los datos de la imagen.
for(loop = 0; loop < 256; loop++)
OBJPaletteMem[loop] = block1Palette[loop];
InitializeSprites();
sprites[0].attribute0 = COLOR_256 | SQUARE | ypos; //256 colores, con forma cuadrada y coordenada Y.
sprites[0].attribute1 = SIZE_16 | xpos; //tamaño del sprite 16x16 y coordenada X actual.
sprites[0].attribute2 = 0; //pointer to tile where sprite starts
for(loop = 0; loop < 128; loop++) //cargar el sprite.
{
OAMData[loop] = block1Data[loop];
}
while(1){//bucle infinito
GetInput();
MoveSprite(&sprites[0], xpos, ypos);
WaitForVsync();
CopyOAM();
}
}//fin de main.
un ejemplo muy bueno jduran.
xzakox, estoy ahora con el tutorial de GB que has puesto en tu página. los ficheros para la compilación que has puesto (.bat) son los correctos?
Si, acabo de probar todo en un windows XP y funciona correctamente, podeis descargar el assemble.bat de nuevo que he añadido una opción al rgbfix para que las roms queden mejor.
LADECADENCE.NET GBCartflasher!!!
ok. voy a probar de nuevo.
Bien, he añadido el código para un ejemplo con sprites y animación. Que lo disfruteis.
http://wiki.ladecadence.net/doku.php...de_ensamblador
LADECADENCE.NET GBCartflasher!!!
Marcadores