Pages: 1 [2]   Bas de page
Imprimer
Auteur Fil de discussion: [NDS/ndslib] Modifier la map  (Lu 3378 fois)
0 Membres et 1 Invité sur ce fil de discussion.
thoduv Hors ligne
Sr. Member
****
Messages: 364


Voir le profil WWW
Hello world...

« Réponse #15 : 16 Décembre 2007, 17:36:45 »

Je suis quasiment sur qu'il y a 16 palettes étendues par fond ce qui fait 16 x 4 = 64 palettes étendues... Et donc le numéro de palette des tiles peut servir à sélectionner la palette étendue du fond...
Non, je t'assure que c'est le contraire. Ce n'est pas écrit explicitement sur Gbatek, mais tu peux faire l'essai pour voir.
De plus, si il y avait 64 palette étendues, cela occuperait 64*512=32k de mémoire, sans compter les palettes étendues des sprites. Or les VRAM utilisées pour les palettes étendues font chacune 16k. Ca ferait en plus un total de 64*256=16k couleurs affichablees simultanément, et ca se saurait...

Citation de: Gbatek
Allocated VRAM is split into 4 slots of 8K each (32K used in total), normally BG0..3 are using Slot 0..3, however BG0 and BG1 can be optionally changed to BG0=Slot2, and BG1=Slot3 via BG0CNT and BG1CNT.

C'est pour les sprites qu'il y a 16 palettes étendues de disponibles, et qu'effectivement les 4 bits de sélection sont utilisés pour choisir la palette étendue au lieu de la palette standard de 16 couleurs.
« Dernière édition: 16 Décembre 2007, 17:39:14 par thoduv » Journalisée

Copper Hors ligne
Mega Member
***
Messages: 1296


Voir le profil
« Réponse #16 : 16 Décembre 2007, 17:49:18 »

Il me semble que j'avais testé mais bon je me suis peut-être trompé vu que moi je cherchais à avoir 256c sur mon BG2 et 256 autres couleurs sur mon BG3 en mode bitmap 8bit (et que les background continuaient à utiliser la palette standard  Cry )

Sinon je me basais sur :

http://liranuna.drunkencoders.com/nds-2d-tuts/lesson-5/
« Dernière édition: 17 Décembre 2007, 10:50:48 par Copper » Journalisée
PypeBros Hors ligne
Hero Member
*****
Messages: 707


Voir le profil WWW
Posez-vous les bonnes questions

« Réponse #17 : 17 Décembre 2007, 10:44:37 »

Je prends à témoin J'appelle à la barre le code de tetattds-2.0, par Sten Larsson, dans fieldgraphics.cpp

Code:
       // 64K, can hold palettes for all four BG layers
        // allocate for cpu access
        vramSetBankE(VRAM_E_LCD);
       
        // background, displayed on BG0, using slot 0.
        Decompress((void*)(0x6880000), background_pal_bin);
       
        // blocks, displayed on BG2, using palette 0 in slot 2
        Decompress((void*)(0x6880000 + 256*16*2), sprites_pal_bin);
       
        // for 'shaded' blocks, creating an alternate palette in pal1, slot 2
        CreateShadedPalette(
                (u16*)(0x6880000 + 256*17*2),
                (u16*)(0x6880000 + 256*16*2));
               
        // text, also displayed on BG2, with a third palette (still in slot 2)
        Decompress((void*)(0x6880000 + 256*16*2*2), font_pal_bin);
               
        // then allocate it for extended palette use
        vramSetBankE(VRAM_E_BG_EXT_PALETTE);

* clairement, on a au moins un banc de VRAM qui permet de stocker 16x4 palettes: le banc E (64K).
* puisque chaque 'slot' de palettes étendues fait 8 K (cf la citation de GBAtek), il y a clairement moyen de stocker 16 palettes (0.5K) dans chaque slot.

De plus
Citation de: gbatek
  VRAM    SIZE  MST  OFS   2D Graphics Engine A, BG Extended Palette
  E       64K   4    -     Slot 0-3  ;only lower 32K used
  F,G     16K   4    0..1  Slot 0-1 (OFS=0), Slot 2-3 (OFS=1)
* il y a visiblement moyen de conserver le banc E pour un autre usage et de se servir des bancs F et G comme palette:
Code:
VRAM_F_CR = VRAM_ENABLE | VRAM_OFFSET(0) | VRAM_F_BG_EXT_PALETTE; //< slots 0 et 1
VRAM_G_CR = VRAM_ENABLE | VRAM_OFFSET(1) | VRAM_G_BG_EXT_PALETTE; //< slots 2 et 3

ça tient la route, non ?
« Dernière édition: 17 Décembre 2007, 15:29:06 par PypeBros » Journalisée

Adorateur Hors ligne
Newbie
*
Messages: 28


Voir le profil
Une nuit blanche devant l'ordi, ca nous réussi pas

« Réponse #18 : 22 Décembre 2007, 12:54:15 »

Merci ,voila j'ai réussi à faire marcher mon programme grace avec des tiles normaux :
Code:
u8* tileMemory = (u8*)BG_TILE_RAM_SUB(1);
u16* mapMemory = (u16*)BG_MAP_RAM_SUB(0);

SUB_BG0_CR = BG_32x32 | BG_COLOR_256 | BG_MAP_BASE(0) | BG_TILE_BASE(1);

swiCopy(tilecolor_Tiles, tileMemory, 64*2);

for (i=0 ; i<256 ; i++)
BG_PALETTE_SUB[i] = bg_Palette[i];

for(i = 0; i < 32 * 32; i++)
mapMemory[i] = 0;
Merci pour vos aides, je pense pouvoir me débrouiller tout seul maintenant avec les liens!
Journalisée

Encore un bug!!!
Arialia Hors ligne
Elite Member
**
Messages: 868


Voir le profil
« Réponse #19 : 22 Décembre 2007, 16:53:13 »

Je prends à témoin J'appelle à la barre le code de tetattds-2.0, par Sten Larsson, dans fieldgraphics.cpp

Code:
       // 64K, can hold palettes for all four BG layers
        // allocate for cpu access
        vramSetBankE(VRAM_E_LCD);
       
        // background, displayed on BG0, using slot 0.
        Decompress((void*)(0x6880000), background_pal_bin);
       
        // blocks, displayed on BG2, using palette 0 in slot 2
        Decompress((void*)(0x6880000 + 256*16*2), sprites_pal_bin);
       
        // for 'shaded' blocks, creating an alternate palette in pal1, slot 2
        CreateShadedPalette(
                (u16*)(0x6880000 + 256*17*2),
                (u16*)(0x6880000 + 256*16*2));
               
        // text, also displayed on BG2, with a third palette (still in slot 2)
        Decompress((void*)(0x6880000 + 256*16*2*2), font_pal_bin);
               
        // then allocate it for extended palette use
        vramSetBankE(VRAM_E_BG_EXT_PALETTE);

* clairement, on a au moins un banc de VRAM qui permet de stocker 16x4 palettes: le banc E (64K).
* puisque chaque 'slot' de palettes étendues fait 8 K (cf la citation de GBAtek), il y a clairement moyen de stocker 16 palettes (0.5K) dans chaque slot.

De plus
Citation de: gbatek
  VRAM    SIZE  MST  OFS   2D Graphics Engine A, BG Extended Palette
  E       64K   4    -     Slot 0-3  ;only lower 32K used
  F,G     16K   4    0..1  Slot 0-1 (OFS=0), Slot 2-3 (OFS=1)
* il y a visiblement moyen de conserver le banc E pour un autre usage et de se servir des bancs F et G comme palette:
Code:
VRAM_F_CR = VRAM_ENABLE | VRAM_OFFSET(0) | VRAM_F_BG_EXT_PALETTE; //< slots 0 et 1
VRAM_G_CR = VRAM_ENABLE | VRAM_OFFSET(1) | VRAM_G_BG_EXT_PALETTE; //< slots 2 et 3

ça tient la route, non ?
+1 Pypebros mais seul les backgrounds text ( tile 16 bits) peuvent en profiter, les autres backgrounds en mode 8bits doivent se partager la palette "standard"

Pas évident à gérer mais du coup ça donne la possibilité d'avoir déjà des backgrounds text avec d'autres palettes que celle de l'écran et même pour un background text d'avoir du coup 16*256 = 4096 couleurs en jonglant avec le numéro de palette  Cheesy
Journalisée

Mon blog de dev   - -  Mon tutoriel sur la libfat -- DSPhoto
Un bon programmeur est fainéant : il déteste refaire la même chose, il fait donc des fonctions Wink

Mais qui m'a mis des nounours roses ? Le rose c'est pour les homo et les gamines , beurk, mais ça va bien aux fleurs Smiley
Et aux jeux de Genevois Wink
Adorateur Hors ligne
Newbie
*
Messages: 28


Voir le profil
Une nuit blanche devant l'ordi, ca nous réussi pas

« Réponse #20 : 24 Décembre 2007, 18:02:31 »

Une dernière petite question:

Voici le code de Liranuna dans sa 5ième lesson :
Code:
// Setup VRAM bank A to use for background graphics (128KB)
VRAM_A_CR = VRAM_ENABLE | VRAM_A_MAIN_BG;

// Now, setup the text background using extended palette
BG0_CR = BG_32x32 | BG_COLOR_256 | BG_MAP_BASE(0) | BG_TILE_BASE(1) | BG_PRIORITY(1);

// Copy the map to the background's map base
memcpy((void*)BG_MAP_RAM(0), todHotelMap_bin, todHotelMap_bin_size);
// Copy the tiles to background's tilebase
memcpy((void*)BG_TILE_RAM(1), todHotelTiles_bin, todHotelTiles_bin_size);

// Map VRAM F to CPU space
VRAM_F_CR = VRAM_ENABLE | VRAM_F_LCD;

// Copy our palettes to each BG's bank
// Copy text BG layer (BG0) to bank 0
memcpy(VRAM_F_EXT_PALETTE[0], todHotelPal_bin, todHotelPal_bin_size);

// Map VRAM F to where it belongs
VRAM_F_CR = VRAM_ENABLE | VRAM_F_BG_EXT_PALETTE;

Et voici le mien :
Code:
SUB_BG0_CR = BG_32x32 | BG_COLOR_256 | BG_MAP_BASE(0) | BG_TILE_BASE(1) | BG_PRIORITY(0);
VRAM_F_CR = VRAM_ENABLE | VRAM_F_LCD;
memcpy((void*)BG_MAP_RAM_SUB(0), todHotelMap_bin, todHotelMap_bin_size);
memcpy((void*)BG_TILE_RAM_SUB(1), todHotelTiles_bin, todHotelTiles_bin_size);
memcpy(VRAM_F_EXT_PALETTE[0], todHotelPal_bin, todHotelPal_bin_size);
VRAM_F_CR = VRAM_ENABLE | VRAM_F_BG_EXT_PALETTE;

J'ai recopier mot pour mot son code mais j'utilise l'écran du bas, le probléme c'est que ça ne fonctionne pas  Undecided et je ne trouve pas l'erreur  Cry .
Passer un bon NOEL  Wink et amuser vous bien  Smiley !!!
« Dernière édition: 25 Décembre 2007, 18:41:16 par Adorateur » Journalisée

Encore un bug!!!
Copper Hors ligne
Mega Member
***
Messages: 1296


Voir le profil
« Réponse #21 : 25 Décembre 2007, 19:05:08 »

Normal que cela ne marche pas il faut que ta palette étendue soit associée à l'affichage secondaire... En effet là ta palette étendue est associée à l'affichage principal...

A mon avis il faut utiliser la banque H au lieu de la banque F pour stocker la palette étendue :

Code:
VRAM_H_CR = VRAM_ENABLE | VRAM_H_LCD;
memcpy((void*)BG_MAP_RAM_SUB(0), todHotelMap_bin, todHotelMap_bin_size);
memcpy((void*)BG_TILE_RAM_SUB(1), todHotelTiles_bin, todHotelTiles_bin_size);
memcpy(VRAM_H_EXT_PALETTE[0], todHotelPal_bin, todHotelPal_bin_size);
VRAM_H_CR = VRAM_ENABLE | VRAM_H_SUB_BG_EXT_PALETTE;


Il faut biensur activer le mode palette étendue dans le registre SUB_DISPLAY_CR
Journalisée
Adorateur Hors ligne
Newbie
*
Messages: 28


Voir le profil
Une nuit blanche devant l'ordi, ca nous réussi pas

« Réponse #22 : 26 Décembre 2007, 09:49:24 »

Miracle ça marche!!!
Encore merci, des choses simples peuvent devenir des gros casse-têtes  Smiley
Journalisée

Encore un bug!!!
Pages: 1 [2]   Haut de page
Imprimer

Aller à: