void vramcpy(void* dst, const void* src, int len){ //use align2 macro then divide by 2
ÂÂÂÂu16* dst16 = (u16*)dst;
ÂÂÂÂu16* src16 = (u16*)src;
ÂÂÂÂfor(;len>0;len--)*dst16++=*src16++;
}
void vramset(void* dst, const u16 n, int len){ //use align2 macro then divide by 2
ÂÂÂÂu16* dst16 = (u16*)dst;
ÂÂÂÂfor(;len>0;len--)*dst16++=n;
}
int main(void)
{
/*Mount Filesystem*/
fatInitDefault();
/*Init Video and Apply Frame*/
videoSetMode(MODE_5_2D),videoSetModeSub(MODE_5_2D); //just kill it
vramSetMainBanks(VRAM_A_MAIN_BG_0x06000000, VRAM_B_MAIN_BG_0x06020000, VRAM_C_SUB_BG_0x06200000, VRAM_D_LCD);
//transfer image to BG_BMP_BASE(0) and BG_BMP_BASE(8). Firstly reset.
vramset((u16*)0x06000000,0x8000,256*192);
vramset((u16*)0x06020000,0x8000,256*192);
ÂÂcBMP15 frameBMP=createBMP15FromFile("gbaframe.bmp");
ÂÂif(frameBMP.valid()&&frameBMP.width()==SCREEN_WIDTH&&frameBMP.height()==SCREEN_HEIGHT)
ÂÂ{
ÂÂÂÂ//DC_FlushRange(frameBMP.buffer(),SCREEN_WIDTH*SCREEN_HEIGHT*2);
ÂÂÂÂ//dmaCopy(frameBMP.buffer(),(void*)BG_BMP_RAM(0),SCREEN_WIDTH*SCREEN_HEIGHT*2);
ÂÂÂÂ//dmaCopy(frameBMP.buffer(),(void*)BG_BMP_RAM(8),SCREEN_WIDTH*SCREEN_HEIGHT*2);
vramcpy((u16*)0x06000000,frameBMP.buffer(),256*192);
vramcpy((u16*)0x06020000,frameBMP.buffer(),256*192);
ÂÂ}
/*Boot GBA*/
ÂÂsysSetBusOwners(BUS_OWNER_ARM7,BUS_OWNER_ARM7);
ÂÂif(PersonalData->gbaScreen)
ÂÂÂÂREG_POWERCNT=1;
ÂÂelse
ÂÂÂÂREG_POWERCNT=(POWER_SWAP_LCDS|1)&0xffff;
ÂÂfifoSendValue32(FIFO_USER_01,MENU_MSG_GBA);
ÂÂwhile(true) swiWaitForVBlank();
return 0;
}