king501
29/06/2006, 09h52
Je suis présentement entrain d’apprendre à programmer la GBA à l'aide du livre de J Harbour. Malheureusement, l’information n’est pas toujours complète et évidente à anticiper…
Voici une partie du code source qui permet d’afficher une carte de 256x256 tuiles à l’écran.
//create a pointer to background 0 tilemap buffer
unsigned short* bg0map =(unsigned short*)ScreenBaseBlock(31);
//set up background 0
REG_BG0CNT = BG_COLOR256 | TEXTBG_SIZE_256x256 |
(31 << SCREEN_SHIFT);
//set video mode 0 with background 0
SetMode(0 | BG0_ENABLE);
//copy the palette into the background palette memory
DMAFastCopy((void*)test_Palette, (void*)BGPaletteMem,
256, DMA_16NOW);
//copy the tile images into the tile memory
DMAFastCopy((void*)test_Tiles, (void*)CharBaseBlock(0),
57984/4, DMA_32NOW);
//copy the tile map into background 0
DMAFastCopy((void*)test_Map, (void*)bg0map, 512, DMA_32NOW);
Ce que je voudrais faire à présent c’est afficher une carte de 512x512. Jusqu’ici je sais qu’un screenblock est suffisant pour une carte de 256x256, et que pour une carte de 512x512, il faudrait 4 screenblocks. J’ai fais plusieurs tentative, mais en vain… Est-ce qu’une personne pourrait m’aider en modifiant le code ci-dessus afin qu’il marche pour une carte de 512x512 tout en restant simple afin de facilité l’apprentissage?
Merci!
Voici une partie du code source qui permet d’afficher une carte de 256x256 tuiles à l’écran.
//create a pointer to background 0 tilemap buffer
unsigned short* bg0map =(unsigned short*)ScreenBaseBlock(31);
//set up background 0
REG_BG0CNT = BG_COLOR256 | TEXTBG_SIZE_256x256 |
(31 << SCREEN_SHIFT);
//set video mode 0 with background 0
SetMode(0 | BG0_ENABLE);
//copy the palette into the background palette memory
DMAFastCopy((void*)test_Palette, (void*)BGPaletteMem,
256, DMA_16NOW);
//copy the tile images into the tile memory
DMAFastCopy((void*)test_Tiles, (void*)CharBaseBlock(0),
57984/4, DMA_32NOW);
//copy the tile map into background 0
DMAFastCopy((void*)test_Map, (void*)bg0map, 512, DMA_32NOW);
Ce que je voudrais faire à présent c’est afficher une carte de 512x512. Jusqu’ici je sais qu’un screenblock est suffisant pour une carte de 256x256, et que pour une carte de 512x512, il faudrait 4 screenblocks. J’ai fais plusieurs tentative, mais en vain… Est-ce qu’une personne pourrait m’aider en modifiant le code ci-dessus afin qu’il marche pour une carte de 512x512 tout en restant simple afin de facilité l’apprentissage?
Merci!