I need to put text with a bg and this is my code:
Code: Select all
Map=NULL;
text="OLA";
u16 value = 0;
u16 tsize = strlen(text);
u8* string = (u8*) calloc (tsize, sizeof(u8));
for (i = 0; i < tsize; i ++) {
value = ((int)(text[i])) - 32;
if (value < 0) value = 0;
string[i] = value;
}
for(i=0;i<tsize;i++){
Map[x+y*32]=string[i];
x++;
if(x>32)y++;
}
free(string);
memcpy((void*)((((0)*0x800) + 0x06000000)), Map, 1024);
when i compile and execute, nosgba shows this:
and the second problem is using my fuction to load bg, the bg0 doesn't shows palette:
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_COLOR_256 | 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_COLOR_256 | 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_COLOR_256 | 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_COLOR_256 | 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*)((0x05000000)), 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_COLOR_256 | 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_COLOR_256 | BG_MAP_BASE(1) | BG_TILE_BASE(2) | BG_PRIORITY(0);
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_COLOR_256 | BG_MAP_BASE(2) | BG_TILE_BASE(3) | BG_PRIORITY(0);
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_COLOR_256 | BG_MAP_BASE(3) | BG_TILE_BASE(4) | BG_PRIORITY(0);
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*)((0x05000400)), PAL[pantalla][slot], pal_size[pantalla][slot]);
//vramSetBankH(VRAM_H_SUB_BG_EXT_PALETTE);
break;
}
}
ODI_Scroll_Fondo(pantalla,capa,0,0);
}