I am put all graphics in VRAM with DMA Copy, the size of address of Sprites I am just using:
void oamInitGfxAttr(0x0000, OBJ_SIZE8);
Because i can only use Sprites from address 0x0000 to 0x1FF0 (size 0x1FF0?) in gfxoffset? I need using between 0x0000 to 0x2FF0 for the Sprites, but the sprites is not operate from 0x2000, is one limit?
The limit is only regarding all the graphics you are using. 2000h is not a limit, it is perhaps because you are using 2000h for something else like map, tile and so on ...
Also, by the way, I think I remember that sprites are 8k align, so it is perhaps a limit. Please post a part of your code and I will try to test with no$sns ...
I booked address 0x0000 to 0x2FF0 only sprites, maps and tiles i am using from 0x3000, I believe you quoted as being a limit. But lets go, the code is not otmized.
//Oh yes is big array, but is only for tests, in the future i go reduce this :)
unsigned short sprTiles16px[300] = {0,2,4,6,8,10,12,14,32,34,36,38,40,42,44,46,64,66,68,70,72,74,76,78,96,98,100,102,104,106,108,110,128,130,132,134,136,138,140,142,160,162,164,166,168,170,172,174,192,194,196,198,200,202,204,206,224,226,228,230,232,234,236,238,256,258,260,262,264,266,268,270,288,290,292,294,296,298,300,302,320,322,324,326,328,330,332,334,352,354,356,358,360,362,364,366,384,386,388,390,392,394,396,398,416,418,420,422,424,426,428,430,448,450,452,454,456,458,460,462,480,482,484,486,488,490,492,494,512,514,516,518,520,522,524,526,544,546,548,550,552,554,556,558,576,578,580,582,584,586,588,590,608,610,612,614,616,618,620,622,640,642,644,646,648,650,652,654,672,674,676,678,680,682,684,686,704,706,708,710,712,714,716,718,736,738,740,742,744,746,748,750,768,770,772,774,776,778,780,782,800,802,804,806,808,810,812,814,832,834,836,838,840,842,844,846,864,866,868,870,872,874,876,878,896,898,900,902,904,906,908,910,928,930,932,934,936,938,940,942,960,962,964,966,968,970,972,974,992,994,996,998,1000,1002,1004,1006,1024,1026,1028,1030,1032,1034,1036,1038,1056,1058,1060,1062,1064,1066,1068,1070,1088,1090,1092,1094,1096,1098,1100,1102,1120,1122,1124,1126,1128,1130,1132,1134,1152,1154,1156,1158,1160,1162,1164,1166,1184,1186,1188,1190};
//Custom oamInitGfxAttr, my sprites having 16X32 (see Val 6 in table Sprite sizes http://www.portabledev.com/wiki/doku.php?id=sprites_en)
REG_OBSEL = (6<<5) | (0x0000 >> 13);
//Copy the heros graphics for vram with dma, this point using 0x0000 to 0xC000
WaitForVBlank(); dmaCopyVram(&tileSourceHeros, 0x0000, &tileSourceHerosEnd-&tileSourceHeros);
//Copy the heros palette for vram with dma
dmaCopyCGram(&paletteEntryHeros, (128+0*16), 32);
//Copy the civis graphics for vram with dma, this point using 0xC000 to 0x2000
WaitForVBlank(); dmaCopyVram(&tileSourceCivis, 0xC000 , &tileSourceCivisEnd - &tileSourceCivis);
//Copy the civis palette for vram with dma
dmaCopyCGram(&paletteEntryCivis, (128+1*16), 32);
//Copy the objs graphics for vram with dma, this point using 0x2000 to 0x3000
WaitForVBlank(); dmaCopyVram(&tileSourceObjs, 0x2000, &tileSourceObjsEnd - &tileSourceObjs);
//Copy the objs palette for vram with dma
dmaCopyCGram(&paletteEntryObjs, (128+2*16), 32);
/*Table offset
Offset Sprite Addres Real
0 Hero 0x0000
16 Friend1 0x0400
32 Friend2 0x0800
48 Civil1 0x0C00
64 Civil2 0x1000
80 Civil3 0x1400
96 Civil4 0x1800
112 Civil5 0x1C00
128 OBJ1 0x2000 //Dont working
144 OBJ2 0x2400 //Dont working
160 OBJ3 0x2800 //Dont working
176 OBJ4 0x2C00 //Dont working
*/
//0x0000
oamSetEx(0, OBJ_SMALL, OBJ_SHOW);
oamSet(0, hero.x, hero.y, 0, 0, 0, sprTiles16px[0], 0);
//0x0400
oamSetEx(4, OBJ_SMALL, OBJ_SHOW);
oamSet(4, friend1.x, friend1.y, 0, 0, 0, sprTiles16px[16], 0);
//0x0800
oamSetEx(8, OBJ_SMALL, OBJ_SHOW);
oamSet(8, friend2.x, friend2.y, 0, 0, 0, sprTiles16px[32], 0);
//0x0C00
oamSetEx(12, OBJ_SMALL, OBJ_SHOW);
oamSet(12, civil1.x, civil1.y, 0, 0, 0, sprTiles16px[48], 1);
//0x1000
oamSetEx(16, OBJ_SMALL, OBJ_SHOW);
oamSet(16, civil2.x, civil2.y, 0, 0, 0, sprTiles16px[64], 1);
//0x1400
oamSetEx(20, OBJ_SMALL, OBJ_SHOW);
oamSet(20, civil3.x, civil3.y, 0, 0, 0, sprTiles16px[80], 1);
//0x1800
oamSetEx(24, OBJ_SMALL, OBJ_SHOW);
oamSet(24, civil4.x, civil4.y, 0, 0, 0, sprTiles16px[96], 1);
//0x1C00
oamSetEx(28, OBJ_SMALL, OBJ_SHOW);
oamSet(28, civil5.x, civil5.y, 0, 0, 0, sprTiles16px[112], 1);
//0x2000 - Dont working
oamSetEx(32, OBJ_SMALL, OBJ_SHOW);
oamSet(32, obj1.x, obj1.y, 0, 0, 0, sprTiles16px[128], 2);
//0x2400 - Dont working
oamSetEx(36, OBJ_SMALL, OBJ_SHOW);
oamSet(36, obj2.x, obj2.y, 0, 0, 0, sprTiles16px[144], 2);
//0x2800 - Dont working
oamSetEx(40, OBJ_SMALL, OBJ_SHOW);
oamSet(40, obj3.x, obj3.y, 0, 0, 0, sprTiles16px[160], 2);
//0x2C00 - Dont working
oamSetEx(44, OBJ_SMALL, OBJ_SHOW);
oamSet(44, obj4.x, obj4.y, 0, 0, 0, sprTiles16px[176], 2);
ok, will check.
But perhaps the limit is more regarding the alignement of memory for sprites. Will try to find an explanantion in no$sns documentaiton.
Oh yes is one limit, I have an idea how to solve the problem, thanks :D