// SPDX-License-Identifier: CC0-1.0 // // SPDX-FileContributor: NightFox & Co., 2009-2011 /* ------------------------------------------------- NightFox's Lib Template Ejemplo basico de BackBuffer en 8bits (modo BITMAP) Requiere DevkitARM Requiere NightFox's Lib Codigo por NightFox http://www.nightfoxandco.com Inicio 10 de Octubre del 2009 ------------------------------------------------- */ /* ------------------------------------------------- Includes ------------------------------------------------- */ // Includes C #include #include #include // Includes propietarios NDS #include #include // Includes librerias propias #include /* ------------------------------------------------- Main() - Bloque general del programa ------------------------------------------------- */ int main(int argc, char **argv) { // Pantalla de espera inicializando NitroFS NF_Set2D(0, 0); NF_Set2D(1, 0); consoleDemoInit(); printf("\n NitroFS init. Please wait.\n\n"); printf(" Iniciando NitroFS,\n por favor, espere.\n\n"); swiWaitForVBlank(); // Define el ROOT e inicializa el sistema de archivos nitroFSInit(NULL); NF_SetRootFolder("NITROFS"); // Define la carpeta ROOT para usar NITROFS // Inicializa el motor 2D en modo BITMAP NF_Set2D(0, 5); // Modo 2D_5 en ambas pantallas NF_Set2D(1, 5); // Inicializa los fondos en modo "BITMAP" NF_InitBitmapBgSys(0, 0); NF_InitBitmapBgSys(1, 0); // Inicializa los buffers para guardar fondos en formato BITMAP NF_Init8bitsBgBuffers(); // Inicializa el BackBuffer NF_Init8bitsBackBuffer(0); NF_Init8bitsBackBuffer(1); // Habilita el BackBuffer en la pantalla inferior NF_Enable8bitsBackBuffer(0); NF_Enable8bitsBackBuffer(1); // Carga el archivo BITMAP de imagen en formato RAW a la RAM NF_Load8bitsBg("bmp/img8b_1", 0); NF_Load8bitsBg("bmp/img8b_2", 1); NF_Load8bitsBg("bmp/img8b_3", 2); // Tranfiere las imagenes a la pantalla superior, backbuffer NF_Copy8bitsBuffer(0, 2, 1); // Tranfiere las imagenes a la pantalla superior, capa 3 NF_Copy8bitsBuffer(0, 1, 0); // Transfiere la imagen a la pantalla inferior, capa 3 NF_Copy8bitsBuffer(1, 1, 2); // Copia la paleta de la pantalla inferior al backbuffer u16 n = 0; for (n = 0; n < 256; n ++) { NF_8BITS_BACKBUFFER[1].pal[n] = *((u16*)(0x05000400 + (n << 1))); } // Se dibujara en color rojo NF_8BITS_BACKBUFFER[1].pal[255] = RGB15(31, 0, 0); // Variables del control del touchpad u16 keys = 0; touchPosition touchscreen; s16 x = 0; s16 y = 0; // Control del dibujado u16 idx = 0; u16 dx = 0; u16 dy = 0; // Control de fondo bool show = true; // Repite para siempre while (1) { // Lectura de posicion del stylus scanKeys(); // Lee el touchpad via Libnds touchRead(&touchscreen); keys = keysHeld(); // Verifica el estado del touchscreen // Si presionas sobre el keypad... if (keys & KEY_TOUCH) { // Lee el touchpad x = (touchscreen.px); if (x > 247) x = 247; y = (touchscreen.py); if (y > 183) y = 183; // Dibuja un pixel de 8x8 for (dy = 0; dy < 9; dy ++) { for (dx = 0; dx < 9; dx ++) { idx = ((y + dy) << 8) + (x + dx); // Pantalla superior NF_8BITS_BACKBUFFER[0].data[idx] = 0; // Pantalla inferior NF_8BITS_BACKBUFFER[1].data[idx] = 255; } } } // Lee las teclas pulsadas keys = keysDown(); // Presiona A para escoder/mostrar capas 3 pantalla inferior if (keys & KEY_A) { show = !show; if (show) { // Cambia el valor del color transparente a ROSA NF_8BITS_BACKBUFFER[1].pal[0] = RGB15(31, 0, 31); // Muestra la capa 3 de la pantalla inferior NF_ShowBg(1, 3); } else { // Cambia el valor del color transparente a NEGRO NF_8BITS_BACKBUFFER[1].pal[0] = RGB15(0, 0, 0); // Esconde la capa 3 de la pantalla inferior NF_HideBg(1, 3); } } // Presiona X restaura imagen superior if (keys & KEY_X) NF_Copy8bitsBuffer(0, 2, 1); // Presiona B para borrar la capa de dibujado if (keys & KEY_B) memset(NF_8BITS_BACKBUFFER[1].data, 0, 65536); // Copia el BackBuffer de la pantalla superior a la capa 2 NF_Flip8bitsBackBuffer(0, 0); // Copia el BackBuffer de la pantalla inferior a la capa 2 NF_Flip8bitsBackBuffer(1, 0); // Sincronismo Vertical swiWaitForVBlank(); } return 0; }