User Tag List

Página 1 de 61 123451151 ... ÚltimoÚltimo
Resultados 1 al 15 de 902

Tema: [HILO OFICIAL] GameBoy Advance & GameBoy Development

  1. #1

    Fecha de ingreso
    Sep 2008
    Ubicación
    WORLD 9 - WARP ZONE!
    Mensajes
    14,748
    Mencionado
    30 Post(s)
    Tagged
    0 Tema(s)
    Agradecer Thanks Given 
    193
    Agradecer Thanks Received 
    1,620
    Thanked in
    Agradecido 651 veces en [ARG:2 UNDEFINED] posts
    Entradas de blog
    284

    [HILO OFICIAL] GameBoy Advance & GameBoy Development

    Hola a todos. Despúés de algún tiempo he decidio abrir este hilo, pues el desarrollo de HomeBrew para GameBoy y GameBoy Advance me parece un tema lo suficientemente interesante como para tratarlo por aqui. La idea es que en este hilo expongamos nuestras roms y HomeBrew realizado para estos sistemas y compartamos conocimientos.

    Como algunos sabeis el desarrollo de de HomeBrew para estos sistemas se basa en unos kits de dasorrollo que permiten al usuario realizar software en lenguaje de programación C.

    En el caso de GameBoy el kit de desarrollo es el GBDK, y además es interesante bajarse herramientas adicionales para la edición de gráficos como las siguientes:

    GBTD

    GBMB

    ambas permiten la edición y generación de mapas y gráficos para los juegos que se desarrollen y guardan los resultados en un formato entedible por el GBDK.

    por otro lado tenemos otra herramienta muy interesante es el PCX2GB que permite convertir imagenes en formato PCX al formato que el GBDK entiende a la hora de programar en C. Tmb puede ser interesante para la gente que desee programar en ensamblador tener a mano el RGBDK (tanto RGBDK como GBDK son descargables desde las páginas de desarrollo) GBDK

    En el caso de GameBoy Advance el kit de desarrollo se llama devkitadv y actualmente se encuentra disponible en SourceForge la revisión 3 del Core 5.

    En este caso tmb puede ser interesante acompañarse de utilidades complementarias para le manejo de gráficos. Todas estas herramientas complementarias se pueden encontrar aqui.

    Haciendo una recopilación de Enlaces tenemos:

    GameBoy Advance:

    SourceForge: devkitadv-r5-beta-3 (lo buscaís ahi)

    Herramientas adicionales de tratamiento de Gráficos y demás.

    DevkitPro + Tutoriales

    Tutorial Básico sobre Ensamblador para el ARM de GBA (inglés)

    Vamos a ir usando los dos kits desarrollo para hacer los ejemplos, en cualquier caso cuando se realice un ejemplo y se suba se indicará con herramientas i kits esta hecho.

    GameBoy:

    GBDK

    GBTD

    GBMB

    Curso de la Universidad de Wichita

    Tutorial de xzakox sobre programación en ensamblador para GameBoy

    A continuación dejo algunas caracteristicas reseñables de ambos sistemas:


    GameBoy Advance: (Wiki)

    Sucesora de la popular Game Boy, es capaz de ejecutar casi todo el software escrito para la Game Boy y la Game Boy Color, así como nuevos programas desarrollados teniendo en cuenta las mayores capacidades del sistema. Al igual que prácticamente cualquier consola 2D, tiene soporte por hardware para dibujar la pantalla, aunque las capacidades de la GameBoy Advance resultaron sorprendentes en su presentación: hasta 128 sprites simultáneos y hasta cuatro planos de scroll, que pueden ser escalados, rotados y mezclados sin consumir tiempo de la CPU principal.

    Cuenta con un procesador ARM propio de 32 bits a 16,7 MHz, basado en la arquitectura RISC, con una potencia suficiente para permitir el desarrollo de juegos utilizando el Lenguaje de programación C. El microprocesador ARM es capaz de ejecutar tanto un juego de instrucciones con un tamaño de instrucción de 32 bits, como un juego de instrucciones llamado "Thumb" de un tamaño de 16 bit (pero igualmente, de 32 bits). El sistema, además, lleva un procesador Z80 a 2 MHz para dar soporte al software de Game Boy clásica y color, pero sus dos procesadores no pueden estar funcionando a la vez debido a diferencias de voltaje y utilización del bus.

    La pantalla LCD es capaz de mostrar una retícula de 240x160 píxeles en color de 15 bits (32768 colores). Esta pantalla incluye más píxeles que la original Game Boy (160x144). Cuando se ejecutan juegos anteriores, el usuario puedo pulsar el botón L ó el R para conmutar la pantalla entre mostrar 160x144 con un borde negro o bien escalar a 240x144. Los primeros juegos exhiben paletas de color muy oscuras porque la pantalla en el kit de desarrollo era mucho más luminosa que la de las unidades comercializadas. Los títulos más recientes usan una corrección gamma en sus paletas.

    El generador de imágenes de la GBA tiene seis modos de visualización (tres basados en bloques y tres basados en mapas de bit) y 96 KB de RAM dedicada. En los modos de visualización basados en bloques, el sistema puede gestionar cuatro capas pixel-a-pixel, dos capas pixel-a-pixel y una capa afín, o bien dos capas afines, y usa 64 KB de RAM para los datos de celdas y mapas y 32 KB para los datos de los 'sprites'. En los modos de mapa de bit, puede mostrar un mapa de bit grande de 16 bits, dos mapas de bits de 8 bit (en modo paginado) o bien un mapa de bit de 16 bit pequeño (con paginación), usando 80 KB de RAM para los datos de mapa y 16 KB para los datos de 'sprite'. En todos los modos, puede mostrar hastra 128 'sprites' (pequeños objetos móviles individuales) de 8x8 hasta 64x64 pixels en color indexado de 4 u 8 bits. Cada 'sprite' puede ser dibujado mediante mapeado directo a píxel o bien por mapeado afín.

    La interfaz de la GBA con el cartucho ROM incluye únicamente un bus de dirección de 24 bits multiplexado con un bus de datos de 16 bits. (La consola Intellivision de Mattel ya había usado anteriormente un bus multiplexado). Esta configuración limita la memoria direccionable directamente a 16 megapalabras binarias (es decir, 256 megabits o 32 megabytes). Sin embargo, si el cartucho dispone de hardware de conmutación de bancos puede expandir esta cantidad mediante el control por software de las líneas superiores de direccionamiento, conmutando otras partes de la ROM en el espacio de direccionamiento de la GBA.

    La GBA también tiene un puerto serie para conectarse con otras unidades GBA en una configuración similar a la red token ring sobre una topología física de bus. La GBA también puede recibir 256 KB en código de arranque a través del puerto, incluso cuando no tiene un cartucho conectado (lo que se conoce como multiboot o netboot). Esto se utiliza en las conexiones multijugador, donde varias GBA pueden funcionar con un único cartucho: la GBA que tiene el cartucho envía el código inicial a las que no lo tienen. El puerto serie puede (con el cable adecuado) conectarse a un puerto serie RS-232 para ayudar en la depuración e, hipotéticamente, jugar a través de Internet, si bien aún no se ha implementado una pila TCP/IP en la GBA.


    Video

    240x160 pixel, 15bit color LCD screen. The original GBA screen was not backlit, but the SP's and Micro's are.
    3 bitmap modes and 3 tilemap modes and sprites.
    4 individual tilemap layers (backgrounds) and 128 sprites (objects).
    Affine transformations (rotate/scale/shear) on 2 backgrounds and 32 objects.
    Special graphic effects: mosaic, additive blend, fade to white/black.

    Sound

    6 channels total
    4 tone generators from the original GameBoy: 2 square wave, 1 general wave and one noise generator.
    2 'DirectSound' channels for playing samples and music.

    Miscellaneous
    10 buttons (or keys): 4-way directional pad, Select/Start, fire buttons A/B, shoulder buttons L/R.
    14 hardware interrupts.
    4-player multiplayer mode via a multiboot cable.
    Optional infrared, solar and gyroscopic interfaces. Other interfaces have also been made by some.
    Main programming platforms: C/C++ and assembly, though there are tools for Pascal, Forth, LUA and others as well. Easy to start with, yet hard to truly master.

    As said, the GBA runs on a ARM7tdmi RISC chip at 16.78 MHz (224 cycles/second). It is a 32bit chip that can run on two different instruction sets. First, there's is ARM code, which is a set of 32bit instructions. Then there's THUMB, which uses 16bit instructions. THUMB instructions are a subset of the ARM instruction set; since the instructions are shorter, the code can be smaller, but their power is also reduced. It is recommended that normal code be THUMB code in ROM, and for time-critical code to be ARM code and put in IWRAM. Since all tonc-demos are still rather simple, most (but not all) code is THUMB code.

    GameBoy: (Wiki)



    CPU: versión modificada del Z80 de 8 bits trabajando a 4.194304 MHz
    RAM: 8kB internos de SRAM
    VRAM: 8kB internos
    Sonido: 4 canales. La GB sólo tiene un altavoz, pero tiene salida para auriculares con los cuales se puede escuchar en stereo.
    Pantalla: LCD reflectiva con una resolución de 160x144 pixeles
    Colores: 4 tonos de gris
    Sprites simultáneos en pantalla: 40 sprites cada uno de 8x8 u 8x16 [seleccionable]
    Comunicaciones: puerto serie
    Alimentación: 4 pilas AA
    Usuarios: hasta 2 vía cable link conectado al puerto de serie y un Game Boy con un cartucho de juego por cada usuario; o 4 con el "Four Player Adapter"

    Pues nada al lio. Aqui os presento un pequeño ejemplo realizado para GBA a modo de "Hola Mundo" que he realizado en un ratito. Ya se que hay cosas del código que se pueden dejar más vistosas y en muchos casos debería haber empleado bucles "FOR" pero como es el primer ejemplo y se trata de aprender tampoco me preocuba mucho.

    /*
    @author: jduranmaster
    */

    /*En el ejemplo trabajamos con el modo grafico 3 de GBA. este modo grafico tiene un tamqaño de 240x160,
    donde cada pixel tiene 16 bits.*/

    //definimos la macro.
    #define RGB16(r,g,b) ((r)+(g<<5)+(b<<10))

    /*vemos que el comportamiento de la macro definida es coger el color azul y desplazarlo 10 bits, coger el color verde y
    desplazarlo 5 bits, para finalmente añadir el valor del color rojo. Los valores a utilizar estan dentro del rango 0..31 ya que
    2^5 = 32.
    */


    int main()
    {
    char x,y;
    unsigned short* Screen = (unsigned short*)0x6000000;
    *(unsigned long*)0x4000000 = 0x403; // modo gráfico 3, bg2 on

    // con esto rellenamos la pantalla de color azul.
    for(x = 0; x<240;x++){
    for(y = 0; y<160; y++){
    Screen[x+y*240] = RGB16(0,0,15);
    }//fin del for de Y.
    }//fin del for de X.

    //pintamos una J.
    x=35;y=39;Screen[x+y*240] = RGB16(31,31,31); x=35;y=38;Screen[x+y*240] = RGB16(31,31,31);
    x=35;y=37;Screen[x+y*240] = RGB16(31,31,31); x=35;y=36;Screen[x+y*240] = RGB16(31,31,31);
    x=35;y=35;Screen[x+y*240] = RGB16(31,31,31); x=35;y=34;Screen[x+y*240] = RGB16(31,31,31);
    x=35;y=33;Screen[x+y*240] = RGB16(31,31,31); x=35;y=32;Screen[x+y*240] = RGB16(31,31,31);
    x=35;y=31;Screen[x+y*240] = RGB16(31,31,31); x=35;y=30;Screen[x+y*240] = RGB16(31,31,31);
    x=35;y=29;Screen[x+y*240] = RGB16(31,31,31); x=35;y=28;Screen[x+y*240] = RGB16(31,31,31);
    x=35;y=27;Screen[x+y*240] = RGB16(31,31,31); x=35;y=26;Screen[x+y*240] = RGB16(31,31,31);

    for (x = 20; x < 35; x++)
    Screen[x+40*240] = RGB16(31,31,31);

    //pintamos una D

    x=40;y=39;Screen[x+y*240] = RGB16(31,31,31); x=40;y=38;Screen[x+y*240] = RGB16(31,31,31);
    x=40;y=37;Screen[x+y*240] = RGB16(31,31,31); x=40;y=36;Screen[x+y*240] = RGB16(31,31,31);
    x=40;y=35;Screen[x+y*240] = RGB16(31,31,31); x=40;y=34;Screen[x+y*240] = RGB16(31,31,31);
    x=40;y=33;Screen[x+y*240] = RGB16(31,31,31); x=40;y=32;Screen[x+y*240] = RGB16(31,31,31);
    x=40;y=31;Screen[x+y*240] = RGB16(31,31,31); x=40;y=30;Screen[x+y*240] = RGB16(31,31,31);
    x=40;y=29;Screen[x+y*240] = RGB16(31,31,31); x=40;y=28;Screen[x+y*240] = RGB16(31,31,31);
    x=40;y=27;Screen[x+y*240] = RGB16(31,31,31); x=40;y=26;Screen[x+y*240] = RGB16(31,31,31);

    for (x = 40; x < 48; x++)
    Screen[x+40*240] = RGB16(31,31,31);

    x=48;y=37;Screen[x+y*240] = RGB16(31,31,31); x=48;y=36;Screen[x+y*240] = RGB16(31,31,31);
    x=48;y=35;Screen[x+y*240] = RGB16(31,31,31); x=48;y=34;Screen[x+y*240] = RGB16(31,31,31);
    x=48;y=33;Screen[x+y*240] = RGB16(31,31,31); x=48;y=32;Screen[x+y*240] = RGB16(31,31,31);
    x=48;y=31;Screen[x+y*240] = RGB16(31,31,31); x=48;y=30;Screen[x+y*240] = RGB16(31,31,31);
    x=48;y=29;Screen[x+y*240] = RGB16(31,31,31); x=48;y=28;Screen[x+y*240] = RGB16(31,31,31);

    for (x = 40; x < 48; x++)
    Screen[x+25*240] = RGB16(31,31,31);

    //pintamos una U

    x=53;y=39;Screen[x+y*240] = RGB16(31,31,31); x=53;y=38;Screen[x+y*240] = RGB16(31,31,31);
    x=53;y=37;Screen[x+y*240] = RGB16(31,31,31); x=53;y=36;Screen[x+y*240] = RGB16(31,31,31);
    x=53;y=35;Screen[x+y*240] = RGB16(31,31,31); x=53;y=34;Screen[x+y*240] = RGB16(31,31,31);
    x=53;y=33;Screen[x+y*240] = RGB16(31,31,31); x=53;y=32;Screen[x+y*240] = RGB16(31,31,31);
    x=53;y=31;Screen[x+y*240] = RGB16(31,31,31); x=53;y=30;Screen[x+y*240] = RGB16(31,31,31);
    x=53;y=29;Screen[x+y*240] = RGB16(31,31,31); x=53;y=28;Screen[x+y*240] = RGB16(31,31,31);
    x=53;y=27;Screen[x+y*240] = RGB16(31,31,31); x=53;y=26;Screen[x+y*240] = RGB16(31,31,31);

    for (x = 53; x < 61; x++)
    Screen[x+40*240] = RGB16(31,31,31);

    x=61;y=39;Screen[x+y*240] = RGB16(31,31,31); x=61;y=38;Screen[x+y*240] = RGB16(31,31,31);
    x=61;y=37;Screen[x+y*240] = RGB16(31,31,31); x=61;y=36;Screen[x+y*240] = RGB16(31,31,31);
    x=61;y=35;Screen[x+y*240] = RGB16(31,31,31); x=61;y=34;Screen[x+y*240] = RGB16(31,31,31);
    x=61;y=33;Screen[x+y*240] = RGB16(31,31,31); x=61;y=32;Screen[x+y*240] = RGB16(31,31,31);
    x=61;y=31;Screen[x+y*240] = RGB16(31,31,31); x=61;y=30;Screen[x+y*240] = RGB16(31,31,31);
    x=61;y=29;Screen[x+y*240] = RGB16(31,31,31); x=61;y=28;Screen[x+y*240] = RGB16(31,31,31);
    x=61;y=27;Screen[x+y*240] = RGB16(31,31,31); x=61;y=26;Screen[x+y*240] = RGB16(31,31,31);

    //pintamos una R

    x=66;y=39;Screen[x+y*240] = RGB16(31,31,31); x=66;y=38;Screen[x+y*240] = RGB16(31,31,31);
    x=66;y=37;Screen[x+y*240] = RGB16(31,31,31); x=66;y=36;Screen[x+y*240] = RGB16(31,31,31);
    x=66;y=35;Screen[x+y*240] = RGB16(31,31,31); x=66;y=34;Screen[x+y*240] = RGB16(31,31,31);
    x=66;y=33;Screen[x+y*240] = RGB16(31,31,31); x=66;y=32;Screen[x+y*240] = RGB16(31,31,31);
    x=66;y=31;Screen[x+y*240] = RGB16(31,31,31); x=66;y=30;Screen[x+y*240] = RGB16(31,31,31);
    x=66;y=29;Screen[x+y*240] = RGB16(31,31,31); x=66;y=28;Screen[x+y*240] = RGB16(31,31,31);
    x=66;y=27;Screen[x+y*240] = RGB16(31,31,31); x=66;y=26;Screen[x+y*240] = RGB16(31,31,31);
    x=66;y=40;Screen[x+y*240] = RGB16(31,31,31);

    for (x = 66; x < 74; x++)
    Screen[x+25*240] = RGB16(31,31,31);

    for (x = 66; x < 74; x++)
    Screen[x+32*240] = RGB16(31,31,31);

    x=74;y=32;Screen[x+y*240] = RGB16(31,31,31); x=74;y=31;Screen[x+y*240] = RGB16(31,31,31);
    x=74;y=30;Screen[x+y*240] = RGB16(31,31,31); x=74;y=29;Screen[x+y*240] = RGB16(31,31,31);
    x=74;y=28;Screen[x+y*240] = RGB16(31,31,31); x=74;y=27;Screen[x+y*240] = RGB16(31,31,31);
    x=74;y=26;Screen[x+y*240] = RGB16(31,31,31); x=74;y=25;Screen[x+y*240] = RGB16(31,31,31);

    x=66;y=32;Screen[x+y*240] = RGB16(31,31,31); x=67;y=33;Screen[x+y*240] = RGB16(31,31,31);
    x=68;y=34;Screen[x+y*240] = RGB16(31,31,31); x=69;y=35;Screen[x+y*240] = RGB16(31,31,31);
    x=70;y=36;Screen[x+y*240] = RGB16(31,31,31); x=71;y=37;Screen[x+y*240] = RGB16(31,31,31);
    x=72;y=38;Screen[x+y*240] = RGB16(31,31,31); x=73;y=39;Screen[x+y*240] = RGB16(31,31,31);
    x=74;y=40;Screen[x+y*240] = RGB16(31,31,31);

    //pintamos una A

    x=79;y=39;Screen[x+y*240] = RGB16(31,31,31); x=79;y=38;Screen[x+y*240] = RGB16(31,31,31);
    x=79;y=37;Screen[x+y*240] = RGB16(31,31,31); x=79;y=36;Screen[x+y*240] = RGB16(31,31,31);
    x=79;y=35;Screen[x+y*240] = RGB16(31,31,31); x=79;y=34;Screen[x+y*240] = RGB16(31,31,31);
    x=79;y=33;Screen[x+y*240] = RGB16(31,31,31); x=79;y=32;Screen[x+y*240] = RGB16(31,31,31);
    x=79;y=31;Screen[x+y*240] = RGB16(31,31,31); x=79;y=30;Screen[x+y*240] = RGB16(31,31,31);
    x=79;y=29;Screen[x+y*240] = RGB16(31,31,31); x=79;y=28;Screen[x+y*240] = RGB16(31,31,31);
    x=79;y=27;Screen[x+y*240] = RGB16(31,31,31); x=79;y=26;Screen[x+y*240] = RGB16(31,31,31);
    x=79;y=40;Screen[x+y*240] = RGB16(31,31,31);

    for (x = 79; x < 87; x++)
    Screen[x+25*240] = RGB16(31,31,31);

    for (x = 79; x < 87; x++)
    Screen[x+32*240] = RGB16(31,31,31);

    x=87;y=39;Screen[x+y*240] = RGB16(31,31,31); x=87;y=38;Screen[x+y*240] = RGB16(31,31,31);
    x=87;y=37;Screen[x+y*240] = RGB16(31,31,31); x=87;y=36;Screen[x+y*240] = RGB16(31,31,31);
    x=87;y=35;Screen[x+y*240] = RGB16(31,31,31); x=87;y=34;Screen[x+y*240] = RGB16(31,31,31);
    x=87;y=33;Screen[x+y*240] = RGB16(31,31,31); x=87;y=32;Screen[x+y*240] = RGB16(31,31,31);
    x=87;y=31;Screen[x+y*240] = RGB16(31,31,31); x=87;y=30;Screen[x+y*240] = RGB16(31,31,31);
    x=87;y=29;Screen[x+y*240] = RGB16(31,31,31); x=87;y=28;Screen[x+y*240] = RGB16(31,31,31);
    x=87;y=27;Screen[x+y*240] = RGB16(31,31,31); x=87;y=26;Screen[x+y*240] = RGB16(31,31,31);
    x=87;y=40;Screen[x+y*240] = RGB16(31,31,31);

    //pintamos una N

    x=93;y=39;Screen[x+y*240] = RGB16(31,31,31); x=93;y=38;Screen[x+y*240] = RGB16(31,31,31);
    x=93;y=37;Screen[x+y*240] = RGB16(31,31,31); x=93;y=36;Screen[x+y*240] = RGB16(31,31,31);
    x=93;y=35;Screen[x+y*240] = RGB16(31,31,31); x=93;y=34;Screen[x+y*240] = RGB16(31,31,31);
    x=93;y=33;Screen[x+y*240] = RGB16(31,31,31); x=93;y=32;Screen[x+y*240] = RGB16(31,31,31);
    x=93;y=31;Screen[x+y*240] = RGB16(31,31,31); x=93;y=30;Screen[x+y*240] = RGB16(31,31,31);
    x=93;y=29;Screen[x+y*240] = RGB16(31,31,31); x=93;y=28;Screen[x+y*240] = RGB16(31,31,31);
    x=93;y=27;Screen[x+y*240] = RGB16(31,31,31); x=93;y=26;Screen[x+y*240] = RGB16(31,31,31);
    x=93;y=40;Screen[x+y*240] = RGB16(31,31,31);

    x=93;y=25;Screen[x+y*240] = RGB16(31,31,31); x=94;y=26;Screen[x+y*240] = RGB16(31,31,31);
    x=95;y=27;Screen[x+y*240] = RGB16(31,31,31); x=96;y=28;Screen[x+y*240] = RGB16(31,31,31);
    x=97;y=29;Screen[x+y*240] = RGB16(31,31,31); x=98;y=30;Screen[x+y*240] = RGB16(31,31,31);
    x=99;y=31;Screen[x+y*240] = RGB16(31,31,31); x=100;y=32;Screen[x+y*240] = RGB16(31,31,31);
    x=101;y=33;Screen[x+y*240] = RGB16(31,31,31); x=102;y=34;Screen[x+y*240] = RGB16(31,31,31);
    x=103;y=35;Screen[x+y*240] = RGB16(31,31,31); x=104;y=36;Screen[x+y*240] = RGB16(31,31,31);
    x=105;y=37;Screen[x+y*240] = RGB16(31,31,31); x=106;y=38;Screen[x+y*240] = RGB16(31,31,31);
    x=107;y=39;Screen[x+y*240] = RGB16(31,31,31); x=108;y=40;Screen[x+y*240] = RGB16(31,31,31);

    x=108;y=39;Screen[x+y*240] = RGB16(31,31,31); x=108;y=38;Screen[x+y*240] = RGB16(31,31,31);
    x=108;y=37;Screen[x+y*240] = RGB16(31,31,31); x=108;y=36;Screen[x+y*240] = RGB16(31,31,31);
    x=108;y=35;Screen[x+y*240] = RGB16(31,31,31); x=108;y=34;Screen[x+y*240] = RGB16(31,31,31);
    x=108;y=33;Screen[x+y*240] = RGB16(31,31,31); x=108;y=32;Screen[x+y*240] = RGB16(31,31,31);
    x=108;y=31;Screen[x+y*240] = RGB16(31,31,31); x=108;y=30;Screen[x+y*240] = RGB16(31,31,31);
    x=108;y=29;Screen[x+y*240] = RGB16(31,31,31); x=108;y=28;Screen[x+y*240] = RGB16(31,31,31);
    x=108;y=27;Screen[x+y*240] = RGB16(31,31,31); x=108;y=26;Screen[x+y*240] = RGB16(31,31,31);
    x=108;y=40;Screen[x+y*240] = RGB16(31,31,31); x=108;y=25;Screen[x+y*240] = RGB16(31,31,31);

    //pintamos "-"

    for (x = 113; x < 121; x++)
    Screen[x+32*240] = RGB16(31,31,31);

    // pintamos "2010"

    for (x = 126; x < 134; x++)
    Screen[x+32*240] = RGB16(31,31,31);

    x=126;y=39;Screen[x+y*240] = RGB16(31,31,31); x=126;y=38;Screen[x+y*240] = RGB16(31,31,31);
    x=126;y=37;Screen[x+y*240] = RGB16(31,31,31); x=126;y=36;Screen[x+y*240] = RGB16(31,31,31);
    x=126;y=35;Screen[x+y*240] = RGB16(31,31,31); x=126;y=34;Screen[x+y*240] = RGB16(31,31,31);
    x=126;y=33;Screen[x+y*240] = RGB16(31,31,31); x=126;y=32;Screen[x+y*240] = RGB16(31,31,31);
    x=134;y=31;Screen[x+y*240] = RGB16(31,31,31); x=134;y=30;Screen[x+y*240] = RGB16(31,31,31);
    x=134;y=29;Screen[x+y*240] = RGB16(31,31,31); x=134;y=28;Screen[x+y*240] = RGB16(31,31,31);
    x=134;y=27;Screen[x+y*240] = RGB16(31,31,31); x=134;y=26;Screen[x+y*240] = RGB16(31,31,31);
    x=134;y=40;Screen[x+y*240] = RGB16(31,31,31); x=134;y=25;Screen[x+y*240] = RGB16(31,31,31);

    for (x = 126; x < 134; x++)
    Screen[x+40*240] = RGB16(31,31,31);

    for (x = 126; x < 134; x++)
    Screen[x+25*240] = RGB16(31,31,31);

    x=139;y=39;Screen[x+y*240] = RGB16(31,31,31); x=139;y=38;Screen[x+y*240] = RGB16(31,31,31);
    x=139;y=37;Screen[x+y*240] = RGB16(31,31,31); x=139;y=36;Screen[x+y*240] = RGB16(31,31,31);
    x=139;y=35;Screen[x+y*240] = RGB16(31,31,31); x=139;y=34;Screen[x+y*240] = RGB16(31,31,31);
    x=139;y=33;Screen[x+y*240] = RGB16(31,31,31); x=139;y=32;Screen[x+y*240] = RGB16(31,31,31);
    x=139;y=31;Screen[x+y*240] = RGB16(31,31,31); x=139;y=30;Screen[x+y*240] = RGB16(31,31,31);
    x=139;y=29;Screen[x+y*240] = RGB16(31,31,31); x=139;y=28;Screen[x+y*240] = RGB16(31,31,31);
    x=139;y=27;Screen[x+y*240] = RGB16(31,31,31); x=139;y=26;Screen[x+y*240] = RGB16(31,31,31);
    x=139;y=40;Screen[x+y*240] = RGB16(31,31,31); x=139;y=25;Screen[x+y*240] = RGB16(31,31,31);

    for (x = 139; x < 147; x++)
    Screen[x+25*240] = RGB16(31,31,31);

    for (x = 139; x < 147; x++)
    Screen[x+40*240] = RGB16(31,31,31);

    x=147;y=39;Screen[x+y*240] = RGB16(31,31,31); x=147;y=38;Screen[x+y*240] = RGB16(31,31,31);
    x=147;y=37;Screen[x+y*240] = RGB16(31,31,31); x=147;y=36;Screen[x+y*240] = RGB16(31,31,31);
    x=147;y=35;Screen[x+y*240] = RGB16(31,31,31); x=147;y=34;Screen[x+y*240] = RGB16(31,31,31);
    x=147;y=33;Screen[x+y*240] = RGB16(31,31,31); x=147;y=32;Screen[x+y*240] = RGB16(31,31,31);
    x=147;y=31;Screen[x+y*240] = RGB16(31,31,31); x=147;y=30;Screen[x+y*240] = RGB16(31,31,31);
    x=147;y=29;Screen[x+y*240] = RGB16(31,31,31); x=147;y=28;Screen[x+y*240] = RGB16(31,31,31);
    x=147;y=27;Screen[x+y*240] = RGB16(31,31,31); x=147;y=26;Screen[x+y*240] = RGB16(31,31,31);
    x=147;y=40;Screen[x+y*240] = RGB16(31,31,31); x=147;y=25;Screen[x+y*240] = RGB16(31,31,31);

    x=152;y=39;Screen[x+y*240] = RGB16(31,31,31); x=152;y=38;Screen[x+y*240] = RGB16(31,31,31);
    x=152;y=37;Screen[x+y*240] = RGB16(31,31,31); x=152;y=36;Screen[x+y*240] = RGB16(31,31,31);
    x=152;y=35;Screen[x+y*240] = RGB16(31,31,31); x=152;y=34;Screen[x+y*240] = RGB16(31,31,31);
    x=152;y=33;Screen[x+y*240] = RGB16(31,31,31); x=152;y=32;Screen[x+y*240] = RGB16(31,31,31);
    x=152;y=31;Screen[x+y*240] = RGB16(31,31,31); x=152;y=30;Screen[x+y*240] = RGB16(31,31,31);
    x=152;y=29;Screen[x+y*240] = RGB16(31,31,31); x=152;y=28;Screen[x+y*240] = RGB16(31,31,31);
    x=152;y=27;Screen[x+y*240] = RGB16(31,31,31); x=152;y=26;Screen[x+y*240] = RGB16(31,31,31);
    x=152;y=40;Screen[x+y*240] = RGB16(31,31,31); x=152;y=25;Screen[x+y*240] = RGB16(31,31,31);

    x=157;y=39;Screen[x+y*240] = RGB16(31,31,31); x=157;y=38;Screen[x+y*240] = RGB16(31,31,31);
    x=157;y=37;Screen[x+y*240] = RGB16(31,31,31); x=157;y=36;Screen[x+y*240] = RGB16(31,31,31);
    x=157;y=35;Screen[x+y*240] = RGB16(31,31,31); x=157;y=34;Screen[x+y*240] = RGB16(31,31,31);
    x=157;y=33;Screen[x+y*240] = RGB16(31,31,31); x=157;y=32;Screen[x+y*240] = RGB16(31,31,31);
    x=157;y=31;Screen[x+y*240] = RGB16(31,31,31); x=157;y=30;Screen[x+y*240] = RGB16(31,31,31);
    x=157;y=29;Screen[x+y*240] = RGB16(31,31,31); x=157;y=28;Screen[x+y*240] = RGB16(31,31,31);
    x=157;y=27;Screen[x+y*240] = RGB16(31,31,31); x=157;y=26;Screen[x+y*240] = RGB16(31,31,31);
    x=157;y=40;Screen[x+y*240] = RGB16(31,31,31); x=157;y=25;Screen[x+y*240] = RGB16(31,31,31);

    for (x = 157; x < 165; x++)
    Screen[x+25*240] = RGB16(31,31,31);

    for (x = 157; x < 165; x++)
    Screen[x+40*240] = RGB16(31,31,31);

    x=165;y=39;Screen[x+y*240] = RGB16(31,31,31); x=165;y=38;Screen[x+y*240] = RGB16(31,31,31);
    x=165;y=37;Screen[x+y*240] = RGB16(31,31,31); x=165;y=36;Screen[x+y*240] = RGB16(31,31,31);
    x=165;y=35;Screen[x+y*240] = RGB16(31,31,31); x=165;y=34;Screen[x+y*240] = RGB16(31,31,31);
    x=165;y=33;Screen[x+y*240] = RGB16(31,31,31); x=165;y=32;Screen[x+y*240] = RGB16(31,31,31);
    x=165;y=31;Screen[x+y*240] = RGB16(31,31,31); x=165;y=30;Screen[x+y*240] = RGB16(31,31,31);
    x=165;y=29;Screen[x+y*240] = RGB16(31,31,31); x=165;y=28;Screen[x+y*240] = RGB16(31,31,31);
    x=165;y=27;Screen[x+y*240] = RGB16(31,31,31); x=165;y=26;Screen[x+y*240] = RGB16(31,31,31);
    x=165;y=40;Screen[x+y*240] = RGB16(31,31,31); x=165;y=25;Screen[x+y*240] = RGB16(31,31,31);

    for (x = 25; x < 165; x++)
    Screen[x+50*240] = RGB16(31,31,31);

    for (x = 25; x < 165; x++)
    Screen[x+20*240] = RGB16(31,31,31);


    while(1){}//bucle infinito

    }//fin de programa
    el resultado por pantalla es algo similar a esto:



    Bueno pues esto es todo. Ire actualizando según vaya desarrollando cosas nuevas.

    PD: os dejo la ROM para que la proveis es vuestros emuladores. (no se si tirara en el de Wiz, porque solo he probado en el VisualBoy Advance).
    Archivos adjuntados Archivos adjuntados
    Última edición por jduranmaster; 04/02/2012 a las 21:38

  2. #2

    Fecha de ingreso
    Sep 2008
    Ubicación
    WORLD 9 - WARP ZONE!
    Mensajes
    14,748
    Mencionado
    30 Post(s)
    Tagged
    0 Tema(s)
    Agradecer Thanks Given 
    193
    Agradecer Thanks Received 
    1,620
    Thanked in
    Agradecido 651 veces en [ARG:2 UNDEFINED] posts
    Entradas de blog
    284

  3. #3

    Fecha de ingreso
    Jan 2006
    Ubicación
    Xixón, Asturies
    Mensajes
    2,741
    Mencionado
    20 Post(s)
    Tagged
    0 Tema(s)
    Agradecer Thanks Given 
    0
    Agradecer Thanks Received 
    14
    Thanked in
    Agradecido 6 veces en [ARG:2 UNDEFINED] posts
    Encantado, por aqui uno con algo de experiencia en el desarrollo para la gameboy.
    Y si, realmente el GBDK está muy bien para aprender, pero tiene limitaciones bastante grandes, muchas dadas simplemente por la potencia de la plataforma y sus peculiariaridades. Si uno se quiere poner a hacer algo realmente serio con la GameBoy, realmente es interesante ponerse a mirar el ensamblador.
    No es tan dificil como parece, el ensamblador del z80 es bastante bonito y sencillo, y el hardware de la gameboy tiene bastantes funcionalidades para el manejo de gráficos y demás, que hacen el desarrollo en ASM más sencillo.
    Con un buen ensamblador con soporte potente de macros, como el rgbasm, y algunas librerias que se prepare uno, el desarrollo en asm para la gb puede ser bastante entretenido.
    Os dejo un par de enlaces a cursos de asm de gameboy.
    El primero, un curso de la universidad de Wichita sobre desarrollo en asm, en que usaron la gameboy como plataforma, muy bueno, con recursos, ejemplos, librerias, etc:
    http://cratel.wichita.edu/cratel/ECE238Spr08

    Y otro menos avanzado e incompleto, pero muy bien explicado paso a paso, asmschool:
    http://gameboy.mongenel.com/asmschool.html

    Os dejo además el wiki de gbdev, donde estamos metiendo toda la documentacion que podemos sobre la gameboy, si alguien quiere colaborar, que avise :-)
    http://gbdev.gg8.se/wiki/articles/Main_Page

    LADECADENCE.NET GBCartflasher!!!

  4. #4

    Fecha de ingreso
    May 2008
    Ubicación
    A tu lado, en tus sueños
    Mensajes
    22,309
    Mencionado
    145 Post(s)
    Tagged
    1 Tema(s)
    Agradecer Thanks Given 
    319
    Agradecer Thanks Received 
    552
    Thanked in
    Agradecido 424 veces en [ARG:2 UNDEFINED] posts
    Entradas de blog
    3
    Muy bueno aporte, yo hace años hice algunas cositas.

    http://remondes.net/GecaSoft/Game Boy Advance Demos.rar

  5. #5

    Fecha de ingreso
    Sep 2008
    Ubicación
    WORLD 9 - WARP ZONE!
    Mensajes
    14,748
    Mencionado
    30 Post(s)
    Tagged
    0 Tema(s)
    Agradecer Thanks Given 
    193
    Agradecer Thanks Received 
    1,620
    Thanked in
    Agradecido 651 veces en [ARG:2 UNDEFINED] posts
    Entradas de blog
    284
    un placer tenerte por aqui xzakox. Y muchas gracias por poner los enlaces a la documentación del ensamblador para poder usarlo en los desarrollos. Ya sabes, si haces alguna cosilla para Gameboy no dudes en ponerla por aqui.
    < - >
    Cita Iniciado por GameMaster Ver mensaje
    Muy bueno aporte, yo hace años hice algunas cositas.

    http://remondes.net/GecaSoft/Game Boy Advance Demos.rar
    gracias por subirlas. La idea es que los trabajos nuevos que vayamos haciendo se puedan subir por aqui para compartirlos con todos.
    < - >
    a ver si alquien que tenga GBA con CartFlash puede probar la Rom que he coldago para probar si funciona en una GBA real.
    Última edición por jduranmaster; 13/06/2010 a las 23:01 Razón: Edición automática anti doble-post.

  6. #6

    Fecha de ingreso
    Dec 2004
    Ubicación
    Cerca de Caracas, VE
    Mensajes
    7,029
    Mencionado
    119 Post(s)
    Tagged
    0 Tema(s)
    Agradecer Thanks Given 
    1,272
    Agradecer Thanks Received 
    528
    Thanked in
    Agradecido 340 veces en [ARG:2 UNDEFINED] posts
    Entradas de blog
    127
    yo cuando encuenrte la maleta del netbook y el adaptador minisd lo pruebo
    Nullum Gratuitum Prandium

  7. #7

    Fecha de ingreso
    Mar 2010
    Ubicación
    en mi casa
    Mensajes
    4,503
    Mencionado
    0 Post(s)
    Tagged
    0 Tema(s)
    Agradecer Thanks Given 
    0
    Agradecer Thanks Received 
    1
    Thanked in
    Agradecido 1 vez en 1 post
    Entradas de blog
    42
    oh que bueno. como me gusta a mi esto lastima que no tenga ni idea de programar.
    yo aunque no es programar he usado mi gb micro con fotos que me hacia yo y con el moon shell me ponia datos de los aeropuertos para el simulador de vuelo.
    con las emisoras de radio las pistas y sus datos de entrada y todo eso. pero claro eso no es programar es poner fotos y punto.
    yo siempre he querido usar la gba como un monitor usando el cable de link por usb o algo pero eso no creo que sea posible

  8. #8

    Fecha de ingreso
    Sep 2008
    Ubicación
    WORLD 9 - WARP ZONE!
    Mensajes
    14,748
    Mencionado
    30 Post(s)
    Tagged
    0 Tema(s)
    Agradecer Thanks Given 
    193
    Agradecer Thanks Received 
    1,620
    Thanked in
    Agradecido 651 veces en [ARG:2 UNDEFINED] posts
    Entradas de blog
    284
    Cita Iniciado por _-Caleb-_ Ver mensaje
    yo cuando encuenrte la maleta del netbook y el adaptador minisd lo pruebo
    cuando puedas. de todas formas la intención de l hilo es que la gente se anime a programar usando los kits de desarrollo que hemos dejado en los enlaces de los posts iniciales. cualquier obra es bien recibida.

    Cita Iniciado por tanuquillo Ver mensaje
    oh que bueno. como me gusta a mi esto lastima que no tenga ni idea de programar.
    yo aunque no es programar he usado mi gb micro con fotos que me hacia yo y con el moon shell me ponia datos de los aeropuertos para el simulador de vuelo.
    con las emisoras de radio las pistas y sus datos de entrada y todo eso. pero claro eso no es programar es poner fotos y punto.
    yo siempre he querido usar la gba como un monitor usando el cable de link por usb o algo pero eso no creo que sea posible
    bueno nunca es tarde para ponerse a programar algo. empezar con el GBDK para GameBoy es bastante sencillito. El kit de desarrollo de GBA puede ser algo más duro.

  9. #9

    Fecha de ingreso
    Apr 2010
    Ubicación
    JULY CITY
    Mensajes
    1,525
    Mencionado
    2 Post(s)
    Tagged
    0 Tema(s)
    Agradecer Thanks Given 
    342
    Agradecer Thanks Received 
    99
    Thanked in
    Agradecido 63 veces en [ARG:2 UNDEFINED] posts
    vaya gracias por crear este hilo. es muy interesante, y asi podemos de dejar de ensuciar el otro hilo de PAche sobre GAmeBoy. Bueno aunque sea una rom bastante mala de GB voy a subir la ROM de los mapaches. Espero contribuir con cosas mejores de ahora en adelante a este hilo.

    gracias por poner los enlaces al kit de desarrollo de GBA jduran. y gracias a xzabox por poner la info de ensamblador para GB.
    Archivos adjuntados Archivos adjuntados

  10. #10

    Fecha de ingreso
    Sep 2008
    Ubicación
    WORLD 9 - WARP ZONE!
    Mensajes
    14,748
    Mencionado
    30 Post(s)
    Tagged
    0 Tema(s)
    Agradecer Thanks Given 
    193
    Agradecer Thanks Received 
    1,620
    Thanked in
    Agradecido 651 veces en [ARG:2 UNDEFINED] posts
    Entradas de blog
    284
    cualquier aporte es bien recibido. En los proximos dias pondre tutos y codigo para incluir imagens de fondo en las roms, reproducción de sonidos (aun estoy empapandome de esto) y algunos otros efectos.

  11. #11

    Fecha de ingreso
    Apr 2010
    Ubicación
    murcia
    Mensajes
    2,604
    Mencionado
    27 Post(s)
    Tagged
    0 Tema(s)
    Agradecer Thanks Given 
    2
    Agradecer Thanks Received 
    75
    Thanked in
    Agradecido 62 veces en [ARG:2 UNDEFINED] posts
    Entradas de blog
    42
    Yo sé donde pillar sdk oficiales de consolas, pondría link....pero no lo permite las normas.
    (master system, snes, game boy.... XD)

    Si quereis el sdk os lo digo por privado

  12. #12

    Fecha de ingreso
    Mar 2010
    Ubicación
    en mi casa
    Mensajes
    4,503
    Mencionado
    0 Post(s)
    Tagged
    0 Tema(s)
    Agradecer Thanks Given 
    0
    Agradecer Thanks Received 
    1
    Thanked in
    Agradecido 1 vez en 1 post
    Entradas de blog
    42
    uff no se por que ahora me molan tanto las gameboys las tenia ahi muertas de risa hace tiempo pero es que es la magia de lo retro. pones cualquier jueguecillo chorra pero te tiras la tarde entera jugando y te acuerdas de que no necesitas next gen

  13. #13

    Fecha de ingreso
    Sep 2008
    Ubicación
    WORLD 9 - WARP ZONE!
    Mensajes
    14,748
    Mencionado
    30 Post(s)
    Tagged
    0 Tema(s)
    Agradecer Thanks Given 
    193
    Agradecer Thanks Received 
    1,620
    Thanked in
    Agradecido 651 veces en [ARG:2 UNDEFINED] posts
    Entradas de blog
    284

  14. #14

    Fecha de ingreso
    Apr 2010
    Ubicación
    JULY CITY
    Mensajes
    1,525
    Mencionado
    2 Post(s)
    Tagged
    0 Tema(s)
    Agradecer Thanks Given 
    342
    Agradecer Thanks Received 
    99
    Thanked in
    Agradecido 63 veces en [ARG:2 UNDEFINED] posts
    Cita Iniciado por tanuquillo Ver mensaje
    uff no se por que ahora me molan tanto las gameboys las tenia ahi muertas de risa hace tiempo pero es que es la magia de lo retro. pones cualquier jueguecillo chorra pero te tiras la tarde entera jugando y te acuerdas de que no necesitas next gen
    no se la gameboy es una maquina que a mi personalmente me ha molado siempre a sigo jugando a sus juegos (en la Wiz claro).

  15. #15

    Fecha de ingreso
    Jan 2006
    Ubicación
    Xixón, Asturies
    Mensajes
    2,741
    Mencionado
    20 Post(s)
    Tagged
    0 Tema(s)
    Agradecer Thanks Given 
    0
    Agradecer Thanks Received 
    14
    Thanked in
    Agradecido 6 veces en [ARG:2 UNDEFINED] posts
    Cita Iniciado por manirea Ver mensaje
    Yo sé donde pillar sdk oficiales de consolas, pondría link....pero no lo permite las normas.
    (master system, snes, game boy.... XD)

    Si quereis el sdk os lo digo por privado
    Por favor :-)

    LADECADENCE.NET GBCartflasher!!!

Página 1 de 61 123451151 ... ÚltimoÚltimo

Permisos de publicación

  • No puedes crear nuevos temas
  • No puedes responder temas
  • No puedes subir archivos adjuntos
  • No puedes editar tus mensajes
  •