whith this codes, I iniciate and load the backgrounds but, it doesn't load palette
Code: Select all
void ODI_Init(void){
//Modo de Video
REG_DISPCNT = MODE_0_2D | DISPLAY_BG0_ACTIVE | DISPLAY_BG1_ACTIVE | DISPLAY_BG2_ACTIVE | DISPLAY_BG3_ACTIVE | DISPLAY_SPR_ACTIVE;
REG_BG0CNT = BgType_Text8bpp | BG_32x32 | BG_PALETTE_SLOT0 | BG_COLOR_256 | BG_MAP_BASE(0) | BG_TILE_BASE(1) | BG_PRIORITY(0);
REG_BG1CNT = BgType_Text8bpp | BG_32x32 | BG_PALETTE_SLOT1 | BG_COLOR_256 | BG_MAP_BASE(1) | BG_TILE_BASE(2) | BG_PRIORITY(1);
REG_BG2CNT = BgType_Text8bpp | BG_32x32 | BG_COLOR_256 | BG_MAP_BASE(2) | BG_TILE_BASE(3) | BG_PRIORITY(2);
REG_BG3CNT = BgType_Text8bpp | BG_32x32 | BG_COLOR_256 | BG_MAP_BASE(3) | BG_TILE_BASE(4) | BG_PRIORITY(3);
REG_DISPCNT_SUB = MODE_0_2D | DISPLAY_BG0_ACTIVE | DISPLAY_BG1_ACTIVE | DISPLAY_BG2_ACTIVE | DISPLAY_BG3_ACTIVE | DISPLAY_SPR_ACTIVE;
REG_BG0CNT_SUB = BgType_Text8bpp | BG_32x32 | BG_PALETTE_SLOT0 | BG_COLOR_256 | BG_MAP_BASE(0) | BG_TILE_BASE(1) | BG_PRIORITY(0);
REG_BG1CNT_SUB = BgType_Text8bpp | BG_32x32 | BG_PALETTE_SLOT1 | BG_COLOR_256 | BG_MAP_BASE(1) | BG_TILE_BASE(2) | BG_PRIORITY(1);
REG_BG2CNT_SUB = BgType_Text8bpp | BG_32x32 | BG_COLOR_256 | BG_MAP_BASE(2) | BG_TILE_BASE(3) | BG_PRIORITY(2);
REG_BG3CNT_SUB = BgType_Text8bpp | BG_32x32 | BG_COLOR_256 | BG_MAP_BASE(3) | BG_TILE_BASE(4) | BG_PRIORITY(3);
//Memoria Vram
REG_DISPCNT |= (DISPLAY_BG_EXT_PALETTE);
REG_DISPCNT_SUB |= (DISPLAY_BG_EXT_PALETTE);
REG_DISPCNT |= (DISPLAY_SPR_ACTIVE);
REG_DISPCNT_SUB |= (DISPLAY_SPR_ACTIVE);
vramSetBankA(VRAM_A_MAIN_BG);
vramSetBankE(VRAM_E_LCD);
vramSetBankC(VRAM_C_SUB_BG);
vramSetBankH(VRAM_H_LCD);
vramSetBankB(VRAM_B_MAIN_SPRITE_0x06400000);
vramSetBankF(VRAM_F_LCD);
vramSetBankD(VRAM_D_SUB_SPRITE);
vramSetBankI(VRAM_I_LCD);
memset((void*)0x06880000, 0, 32768);
memset((void*)0x06898000, 0, 32768);
memset((void*)0x06890000, 0, 8192);
memset((void*)0x068A0000, 0, 8192);
}
Code: Select all
void ODI_Crear_Fondo(u8 pantalla, u8 capa, int slot,int ancho, int alto){
s32 bg;
if ((ancho == 256) && (alto == 256)) {
bg = BG_32x32;
}
if ((ancho == 512) && (alto == 256)) {
bg = BG_64x32;
}
if ((ancho == 256) && (alto == 512)) {
bg = BG_32x64;
}
if ((ancho == 512) && (alto == 512)) {
bg = BG_64x64;
}
if(pantalla==1){
switch (capa){
case 0:
REG_BG0CNT = BgType_Text8bpp | bg | BG_PALETTE_SLOT0 | BG_MAP_BASE(0) | BG_TILE_BASE(1) | BG_PRIORITY_0;
vramSetBankE(VRAM_E_LCD);
memcpy((void*)((((1)*0x4000) + 0x06000000)), TILES[pantalla][slot], tiles_size[pantalla][slot]);
if(ancho==256&&alto==256){
memcpy((void*)((((0)*0x800) + 0x06000000)), MAP[pantalla][slot], map_size[pantalla][slot]);
}
if(ancho==512&&alto==256){
memcpy((void*)((((0)*0x800) + 0x06000000)), MAP[pantalla][slot], 4096);
}
if(ancho==256&&alto==512){
memcpy((void*)((((0)*0x800) + 0x06000000)), MAP[pantalla][slot], 4096);
}
if(ancho==512&&alto==512){
memcpy((void*)((((0)*0x800) + 0x06000000)), MAP[pantalla][slot], 4096);
u16 siguiente;
siguiente = ((((ancho - 1) >> 8) + 1) << 11);
memcpy((void*)(((((0)*0x800) + 0x06000000))+4096), MAP[pantalla][slot]+siguiente, 4096);
}
memcpy((void*)((0x06880000) + (0 << 13)), PAL[pantalla][slot], pal_size[pantalla][slot]);
vramSetBankE(VRAM_E_BG_EXT_PALETTE);
break;
case 1:
REG_BG1CNT = BgType_Text8bpp | bg | BG_PALETTE_SLOT1 | BG_MAP_BASE(1) | BG_TILE_BASE(2) | BG_PRIORITY_1;
vramSetBankE(VRAM_E_LCD);
memcpy((void*)((((2)*0x4000) + 0x06000000)), TILES[pantalla][slot], tiles_size[pantalla][slot]);
if(ancho==256&&alto==256){
memcpy((void*)((((1)*0x800) + 0x06000000)), MAP[pantalla][slot], map_size[pantalla][slot]);
}
if(ancho==512&&alto==256){
memcpy((void*)((((1)*0x800) + 0x06000000)), MAP[pantalla][slot], 4096);
}
if(ancho==256&&alto==512){
memcpy((void*)((((1)*0x800) + 0x06000000)), MAP[pantalla][slot], 4096);
}
if(ancho==512&&alto==512){
memcpy((void*)((((1)*0x800) + 0x06000000)), MAP[pantalla][slot], 4096);
u16 siguiente;
siguiente = ((((ancho - 1) >> 8) + 1) << 11);
memcpy((void*)(((((1)*0x800) + 0x06000000))+4096), MAP[pantalla][slot]+siguiente, 4096);
}
memcpy((void*)((0x06880000) + (1 << 13)), PAL[pantalla][slot], pal_size[pantalla][slot]);
vramSetBankE(VRAM_E_BG_EXT_PALETTE);
break;
case 2:
REG_BG2CNT = BgType_Text8bpp | bg | BG_PALETTE_SLOT2 | BG_MAP_BASE(2) | BG_TILE_BASE(3) | BG_PRIORITY_2;
vramSetBankE(VRAM_E_LCD);
memcpy((void*)((((3)*0x4000) + 0x06000000)), TILES[pantalla][slot], tiles_size[pantalla][slot]);
if(ancho==256&&alto==256){
memcpy((void*)((((2)*0x800) + 0x06000000)), MAP[pantalla][slot], map_size[pantalla][slot]);
}
if(ancho==512&&alto==256){
memcpy((void*)((((2)*0x800) + 0x06000000)), MAP[pantalla][slot], 4096);
}
if(ancho==256&&alto==512){
memcpy((void*)((((2)*0x800) + 0x06000000)), MAP[pantalla][slot], 4096);
}
if(ancho==512&&alto==512){
memcpy((void*)((((2)*0x800) + 0x06000000)), MAP[pantalla][slot], 4096);
u16 siguiente;
siguiente = ((((ancho - 1) >> 8) + 1) << 11);
memcpy((void*)(((((2)*0x800) + 0x06000000))+4096), MAP[pantalla][slot]+siguiente, 4096);
}
memcpy((void*)((0x06880000) + (2 << 13)), PAL[pantalla][slot], pal_size[pantalla][slot]);
vramSetBankE(VRAM_E_BG_EXT_PALETTE);
break;
case 3:
REG_BG3CNT = BgType_Text8bpp | bg | BG_PALETTE_SLOT3 | BG_MAP_BASE(3) | BG_TILE_BASE(4) | BG_PRIORITY_3;
vramSetBankE(VRAM_E_LCD);
memcpy((void*)((((4)*0x4000) + 0x06000000)), TILES[pantalla][slot], tiles_size[pantalla][slot]);
if(ancho==256&&alto==256){
memcpy((void*)((((3)*0x800) + 0x06000000)), MAP[pantalla][slot], map_size[pantalla][slot]);
}
if(ancho==512&&alto==256){
memcpy((void*)((((3)*0x800) + 0x06000000)), MAP[pantalla][slot], 4096);
}
if(ancho==256&&alto==512){
memcpy((void*)((((3)*0x800) + 0x06000000)), MAP[pantalla][slot], 4096);
}
if(ancho==512&&alto==512){
memcpy((void*)((((3)*0x800) + 0x06000000)), MAP[pantalla][slot], 4096);
u16 siguiente;
siguiente = ((((ancho - 1) >> 8) + 1) << 11);
memcpy((void*)((((3)*0x800) + 0x06000000)+4096), MAP[pantalla][slot]+siguiente, 4096);
}
memcpy((void*)((0x06880000) + (3 << 13)), PAL[pantalla][slot], pal_size[pantalla][slot]);
vramSetBankE(VRAM_E_BG_EXT_PALETTE);
break;
}
}
if(pantalla==0){
switch (capa){
case 0:
REG_BG0CNT_SUB = BgType_Text8bpp | bg | BG_PALETTE_SLOT0 | BG_MAP_BASE(0) | BG_TILE_BASE(1) | BG_PRIORITY_0;
vramSetBankH(VRAM_H_LCD);
memcpy((void*)((((1)*0x4000) + 0x06200000)), TILES[pantalla][slot], tiles_size[pantalla][slot]);
if(ancho==256&&alto==256){
memcpy((void*)((((0)*0x800) + 0x06200000)), MAP[pantalla][slot], map_size[pantalla][slot]);
}
if(ancho==512&&alto==256){
memcpy((void*)((((0)*0x800) + 0x06200000)), MAP[pantalla][slot], 4096);
}
if(ancho==256&&alto==512){
memcpy((void*)((((0)*0x800) + 0x06200000)), MAP[pantalla][slot], 4096);
}
if(ancho==512&&alto==512){
memcpy((void*)((((0)*0x800) + 0x06200000)), MAP[pantalla][slot], 4096);
u16 siguiente;
siguiente = ((((ancho - 1) >> 8) + 1) << 11);
memcpy((void*)(((((0)*0x800) + 0x06200000))+4096), MAP[pantalla][slot]+siguiente, 4096);
}
memcpy((void*)((0x06898000) + (0 << 13)), PAL[pantalla][slot], pal_size[pantalla][slot]);
vramSetBankH(VRAM_H_SUB_BG_EXT_PALETTE);
break;
case 1:
REG_BG1CNT_SUB = BgType_Text8bpp | bg | BG_PALETTE_SLOT1 | BG_MAP_BASE(1) | BG_TILE_BASE(2) | BG_PRIORITY_1;
vramSetBankH(VRAM_H_LCD);
memcpy((void*)((((2)*0x4000) + 0x06200000)), TILES[pantalla][slot], tiles_size[pantalla][slot]);
if(ancho==256&&alto==256){
memcpy((void*)((((1)*0x800) + 0x06200000)), MAP[pantalla][slot], map_size[pantalla][slot]);
}
if(ancho==512&&alto==256){
memcpy((void*)((((1)*0x800) + 0x06200000)), MAP[pantalla][slot], 4096);
}
if(ancho==256&&alto==512){
memcpy((void*)((((1)*0x800) + 0x06200000)), MAP[pantalla][slot], 4096);
}
if(ancho==512&&alto==512){
memcpy((void*)((((1)*0x800) + 0x06200000)), MAP[pantalla][slot], 4096);
u16 siguiente;
siguiente = ((((ancho - 1) >> 8) + 1) << 11);
memcpy((void*)(((((1)*0x800) + 0x06200000))+4096), MAP[pantalla][slot]+siguiente, 4096);
}
memcpy((void*)((0x06898000) + (1 << 13)), PAL[pantalla][slot], pal_size[pantalla][slot]);
vramSetBankH(VRAM_H_SUB_BG_EXT_PALETTE);
break;
case 2:
REG_BG2CNT_SUB = BgType_Text8bpp | bg | BG_PALETTE_SLOT2 | BG_MAP_BASE(2) | BG_TILE_BASE(3) | BG_PRIORITY_2;
vramSetBankH(VRAM_H_LCD);
memcpy((void*)((((3)*0x4000) + 0x06200000)), TILES[pantalla][slot], tiles_size[pantalla][slot]);
if(ancho==256&&alto==256){
memcpy((void*)((((2)*0x800) + 0x06200000)), MAP[pantalla][slot], map_size[pantalla][slot]);
}
if(ancho==512&&alto==256){
memcpy((void*)((((2)*0x800) + 0x06200000)), MAP[pantalla][slot], 4096);
}
if(ancho==256&&alto==512){
memcpy((void*)((((2)*0x800) + 0x06200000)), MAP[pantalla][slot], 4096);
}
if(ancho==512&&alto==512){
memcpy((void*)((((2)*0x800) + 0x06200000)), MAP[pantalla][slot], 4096);
u16 siguiente;
siguiente = ((((ancho - 1) >> 8) + 1) << 11);
memcpy((void*)(((((2)*0x800) + 0x06200000))+4096), MAP[pantalla][slot]+siguiente, 4096);
}
memcpy((void*)((0x06898000) + (2 << 13)), PAL[pantalla][slot], pal_size[pantalla][slot]);
vramSetBankH(VRAM_H_SUB_BG_EXT_PALETTE);
break;
case 3:
REG_BG3CNT_SUB = BgType_Text8bpp | bg | BG_PALETTE_SLOT3 | BG_MAP_BASE(3) | BG_TILE_BASE(4) | BG_PRIORITY_3;
vramSetBankH(VRAM_H_LCD);
memcpy((void*)((((4)*0x4000) + 0x06200000)), TILES[pantalla][slot], tiles_size[pantalla][slot]);
if(ancho==256&&alto==256){
memcpy((void*)((((3)*0x800) + 0x06200000)), MAP[pantalla][slot], map_size[pantalla][slot]);
}
if(ancho==512&&alto==256){
memcpy((void*)((((3)*0x800) + 0x06200000)), MAP[pantalla][slot], 4096);
}
if(ancho==256&&alto==512){
memcpy((void*)((((3)*0x800) + 0x06200000)), MAP[pantalla][slot], 4096);
}
if(ancho==512&&alto==512){
memcpy((void*)((((3)*0x800) + 0x06200000)), MAP[pantalla][slot], 4096);
u16 siguiente;
siguiente = ((((ancho - 1) >> 8) + 1) << 11);
memcpy((void*)((((3)*0x800) + 0x06200000)+4096), MAP[pantalla][slot]+siguiente, 4096);
}
memcpy((void*)((0x06898000) + (3 << 13)), PAL[pantalla][slot], pal_size[pantalla][slot]);
vramSetBankH(VRAM_H_SUB_BG_EXT_PALETTE);
break;
}
}
ODI_Scroll_Fondo(pantalla,capa,0,0);
}