Voir la version complète : [NDS][Aide] Mode 5 et les backgrounds
Bonjour,
Alors je me suis lancé dans la dev. sur Nintendo DS, et là, je suis face à un joli problème.
Donc j'utilise:
- devkitpro + libnds (désolé, je préfère réinventer la roue)
- mode 5 et les backgrounds 2 & 3 (avec des images de 256*256 en 16bits)
- dualis (vive le debuggeur !)
Donc j'arrive bien à afficher le background 2 avec mon image et à le configurer.
Mais impossible de configurer le background 3 qui pointe deseperement dans une image noire.
Bon je met des bouts de mon code.
Ici, j'initialise tout le monde
videoSetMode(MODE_5_2D | DISPLAY_BG2_ACTIVE | DISPLAY_BG3_ACTIVE);
BG2_CR = BG_BMP16_256x256;
BG2_XDX = 1 << 8;
BG2_XDY = 0;
BG2_YDX = 0;
BG2_YDY = 1 << 8;
BG2_CY = 0;
BG2_CX = 0;
BG3_CR = BG_BMP16_256x256;
BG3_XDX = 1 << 8;
BG3_XDY = 0;
BG3_YDX = 0;
BG3_YDY = 1 << 8;
BG3_CY = 0;
BG3_CX = 0;
VRAM_A_CR = VRAM_A_MAIN_BG | (0 << 1) | (1 << 7);
data = gbfs_get_obj(pGBFSFile, "Apps.raw", &fileSize);
dmaCopy((u16 *)data, (u16 *)0x6000000, fileSize);
appsZone = (u8 *)gbfs_get_obj(pGBFSFile, "Apps_Zone.raw", NULL);
VRAM_B_CR = VRAM_B_MAIN_BG | (1 << 1) | (1 << 7);
data = gbfs_get_obj(pGBFSFile, "Boutons.raw", &fileSize);
dmaCopy((u16 *)data, (u16 *)0x6020000, fileSize);
Et après le code pour jouer avec les backgrounds:
u16 keys = (~REG_KEYS) & 0x3FF;
if (keys & BUTTON_LEFT)
{
BG2_XDX = 1<<8;
}
if (keys & BUTTON_RIGHT)
{
BG2_XDX = 3<<8;
}
Merci d'avance ! :D
PS: Avec Dualis, le problème semble venir que je ne rempli pas la VRAM B... mais je vois pas le problème
Alekmaul
18/09/2006, 15h54
Et oui car en mode 5, il n'y a qu'un seul background donc tu ne peux pas en afficher 2 en même temps ... désolé ...
Et oui car en mode 5, il n'y a qu'un seul background donc tu ne peux pas en afficher 2 en même temps ... désolé ...
Sauf que la doc. technique : http://www.double.co.nz/nintendo_ds/nds_develop10.html
Parle bien de 4 backgrounds en mode 5.
Donc ma question, si le mode 5 ne supporte qu'un seul background, quel mode je dois utiliser ?
Accessoirement, si quelqu'un à une bonne adresse où je peux trouver une explication des modes (et leurs différences), ca me serais util.
Alekmaul
18/09/2006, 17h10
Hum, effectivement, ce n'est pas clair dans son exemple.
Tu me pose une colle, pour moi, les modes bitmaps sont mono BG ...
Je ne vois pas sinon comment on ferait pour voir les autres BG, à moins de déterminer une couleur transparente et comme on ne gère pas de palette au sens propre mais des couleurs à chaque point (via les composantes RGB), c'est pas faisable ...
Hum, effectivement, ce n'est pas clair dans son exemple.
Tu me pose une colle, pour moi, les modes bitmaps sont mono BG ...
Je ne vois pas sinon comment on ferait pour voir les autres BG, à moins de déterminer une couleur transparente et comme on ne gère pas de palette au sens propre mais des couleurs à chaque point (via les composantes RGB), c'est pas faisable ...
Attention, c'est pas un mode bitmap !
C'est just le background qui affiche en mode bitmap ;)
Donc à prioris, cela ne vient pas de là le problème...
Sur ce lien: http://www.portabledev.com/media/GBA/tutoriels/gbatek.htm
on voit un peu mieux l'histoire de background... mais je comprend toujours pas mon erreur :cry:
Alekmaul
18/09/2006, 17h45
Si, le mode 5, comme le mode 4, sont des modes bitmaps ...
Là, j'en suis certain ^^
Dr.Vince
18/09/2006, 18h04
si vous voulez comprendre quelque chose aux modes de la NDS, une seule adresse : http://tobw.net/dswiki/index.php?title=Graphic_modes
Tu n'as pas spécifié de charblock pour ton bg ... (d'ailleurs attention, une seule vram de 128ko ne suffit pas pour 2bg 16 bits 256*256, il faudra coupler deux vram de 128k, la A et la B par exemple. Ca ne marche que pour la core A)
Alekmaul> Sur DS, les modes 0-6 sont des modes BG, et il n'y a pas de modes bitmaps comme les modes 3,4,5 de la GBA. Le seul mode bitmap est le mode "FB" (bitmap 16 bits direct => mode 3 de la GBA).
Sinon rien à voir, mais je te déconseille d'utiliser Gbfs sur DS, c'est pas très approprié puisque ca utilise la Rom GBA (ce n'est pas supporté par beaucoup de linkers).
Alekmaul
18/09/2006, 21h03
euh, je suis pas d'accord thoduv, j'utilise l'adressage direct de ce mode (5) en bitmap depuis toujours. T'es certain de ce que tu avances ?
Dr.Vince
18/09/2006, 21h20
effectivement, ce que dit thoduv est exact y a que le mode FrameBuffer qui se rapproche d'un mode bitmap
Alekmaul
18/09/2006, 21h56
attends, je merde alors depuis le début ....
quand je transfert en mode 5 un bitmap composé d'u16 contenant des RGB15(r,g,b) en direct, comment cela peut il être du mode bitmap o_O ?
[EDIT]effectivement, à cette adresse : http://tobw.net/dswiki/index.php?title=Graphic_modes, on voit bien les différents modes mais alors, je rejoins le pb de Teka, à quoi cela sert de gérer 2 BG bitmaps en même temps comme le BG2 et 3 ?
Tu peux les supperposer, les "rotscaler", les "blender", les "scroller", etc... Tous les avantages des BG sauf qu'on affiche un bitmap au lieu de tiles.
Tu n'as pas spécifié de charblock pour ton bg ... (d'ailleurs attention, une seule vram de 128ko ne suffit pas pour 2bg 16 bits 256*256, il faudra coupler deux vram de 128k, la A et la B par exemple. Ca ne marche que pour la core A)
Oui le problème c'est que le background 3 ne pointait pas sur la vram B.
Sinon la solution était au niveau des contrôles des vrams, voici le code corrigé:
VRAM_A_CR = VRAM_A_MAIN_BG | VRAM_OFFSET(0) | VRAM_ENABLE;
VRAM_B_CR = VRAM_B_MAIN_BG | VRAM_OFFSET(1) | VRAM_ENABLE;
Le problème venait d'un mauvais décalage binaire et donc en utilisant les macros, j'ai réctifié ça (et en plus le code est plus propre :whst: )
Sinon rien à voir, mais je te déconseille d'utiliser Gbfs sur DS, c'est pas très approprié puisque ca utilise la Rom GBA (ce n'est pas supporté par beaucoup de linkers).
Ah zut ? Euh il est préférable d'utiliser quoi alors en libfs ? :hum:
Car je suis entrain de tester une ebauche de projet et j'ai besoin que mon application puisse avoir du contenu externe.
on voit bien les différents modes mais alors, je rejoins le pb de Teka, à quoi cela sert de gérer 2 BG bitmaps en même temps comme le BG2 et 3 ?
J'ai besoin de faire une transition "en douceur" avec des effets "à la con" :D
Merci pour vos réponses :)
Alekmaul
19/09/2006, 10h38
Ah zut ? Euh il est préférable d'utiliser quoi alors en libfs ? :hum:
Car je suis entrain de tester une ebauche de projet et j'ai besoin que mon application puisse avoir du contenu externe.
OK pour les modes, je vois un peu mieux. Je ne merdais pas mais j'étais imcomplet par rapport à leur gestion.
Pour Teka, le mieux est d'utiliser la fatlib, comme cela tu auras une gestion des fichiers comme "en vrai".
De plus, dualis supporte cette lib, tu peux donc débugguer avec :)
Par contre, cette lib ne peux pas être utilisée avec les cartes GBA comme le G6 Flash (pas le lite) ou MK1 de Neoflash.
Les modes bitmap ne supportent pas plusieurs backgrounds, mais simplement utilise deux backgrounds pour le flipping ecran. On affiche soit l'un soit l'autre, mais pas les 2 en même temps :)
Ou alors j'ai pas tout suivi, et je me melange les pinceaux avec une autre console ^^
Alekmaul
19/09/2006, 14h09
Un peu comme moi Foxy, un peu comme moi ^^
OK pour les modes, je vois un peu mieux. Je ne merdais pas mais j'étais imcomplet par rapport à leur gestion.
Pour Teka, le mieux est d'utiliser la fatlib, comme cela tu auras une gestion des fichiers comme "en vrai".
De plus, dualis supporte cette lib, tu peux donc débugguer avec :)
Par contre, cette lib ne peux pas être utilisée avec les cartes GBA comme le G6 Flash (pas le lite) ou MK1 de Neoflash.
Euh, ca veut dire que mon EZ-Flash 1 ne va pas fonctionner ??? :(
RHAAA mais comment je vais faire pour tester :|
Je comprend pas pourquoir le GBFS ne marche pas partout vu que les fichiers sont ajoutés à la fin de la ROM... :hum:
Les modes bitmap ne supportent pas plusieurs backgrounds, mais simplement utilise deux backgrounds pour le flipping ecran. On affiche soit l'un soit l'autre, mais pas les 2 en même temps :)
Ou alors j'ai pas tout suivi, et je me melange les pinceaux avec une autre console ^^
En tout cas en mode 5, j'ai bien 2 background en mode bitmap et je suis capable d'afficher les 2 en même et avec des effets :D
Dr.Vince
19/09/2006, 16h03
En tout cas en mode 5, j'ai bien 2 background en mode bitmap et je suis capable d'afficher les 2 en même et avec des effets :D
c'est normal, car en MODE 5 les BG2 et BG3 sont des extended rotation bg
et :
extended rotation = Can be used like the framebuffer, but also supports 8 bit images. The size of this buffers can be smaller or bigger that the actual resolution, but we can scroll, zoom, rotate etc. very easily in hardware here. If you use 16 bit per pixel, bit 15 will be the alpha bit.
Le Gbfs est déconseillé, parce que les fichiers sont ajoutés à la fin de la ROM, c'est à dire en dehors de la zone chargée en mémoire sur la DS, donc si on utilise un linker se trouvant dans le slot DS, ou bien un linker ne disposant pas d'une "fausse rom" gba, ou encore un linker qui charge que ce qui est indiqué dans l'header, on n'aura pas accès au Gbfs.
Effectivement, tu peux utiliser la Libfat, ou bien un autre système du type Pafs. Et pendant le développement, à moins que ce soit très utile, tu peux peut être te passer de Fs ?
En fait, voilà ma problèmatique:
- pouvoir ajouter simplement des fichiers après la compilation (via un programme sur le pc)
- les fichiers n'ont pas tous une taille fixe
- besoin de lecture des fichiers dans la rom
Donc pour moi, gbfs répond bien à ma problèmatique... mais le coté compatibilité n'est pas terrible...
La question : comment faire ? enfin surtout quoi utiliser? :)
vBulletin® v.3.7.2, Copyright ©2000-2008, Jelsoft Enterprises Ltd. Tous droits réservés - Version française vbulletin-fr.org