//========================================================== void ram_lock (void) //========================================================== { sysSetBusOwners(BUS_OWNER_ARM9, BUS_OWNER_ARM9); if(_lock) _lock(); }
//========================================================== vu16* ram_unlock (void) //========================================================== { sysSetBusOwners(BUS_OWNER_ARM9, BUS_OWNER_ARM9); if(_unlock) return _unlock(); return 0; }
void CGbaLoader::BootGBA(void) { 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); }
const IO_INTERFACE* _FAT_disc_findInterface (void) { #ifdef ARM9 sysSetBusOwners(BUS_OWNER_ARM9, BUS_OWNER_ARM9); #endif int i; for (i = 0; i < (sizeof(ioInterfaces) / sizeof(IO_INTERFACE*)); i++) { if (ioInterfaces[i]->fn_startup()) { return ioInterfaces[i]; } } return NULL; }
//========================================================== bool ram_init (RAM_TYPE type) //========================================================== { sysSetBusOwners(BUS_OWNER_ARM9, BUS_OWNER_ARM9); switch(type) { case SC_RAM: { _unlock = _sc_unlock; _lock = _sc_lock; _type = SC_RAM; } break; case M3_RAM: { _unlock = _m3_unlock; _lock = _m3_lock; _type = M3_RAM; } break; case OPERA_RAM: { _unlock = _opera_unlock; _lock = _opera_lock; _type = OPERA_RAM; } break; case G6_RAM: { _unlock = _g6_unlock; _lock = _g6_lock; _type = G6_RAM; } break; case EZ_RAM: { _unlock = _ez_unlock; _lock = _ez_lock; _type = EZ_RAM; } break; case DETECT_RAM: default: { // try ez _unlock = _ez_unlock; _lock = _ez_lock; _type = EZ_RAM; if(_ram_test()) { break; } // try supercard _unlock = _sc_unlock; _lock = _sc_lock; _type = SC_RAM; if(_ram_test()) { break; } // try m3 _unlock = _m3_unlock; _lock = _m3_lock; _type = M3_RAM; if(_ram_test()) { break; } // try opera _unlock = _opera_unlock; _lock = _opera_lock; _type = OPERA_RAM; if(_ram_test()) { break; } // try g6 _unlock = _g6_unlock; _lock = _g6_lock; _type = G6_RAM; if(_ram_test()) { break; } // fail _unlock = 0; _lock = 0; _type = DETECT_RAM; return false; } break; } _ram_precalc_size(); return true; }
// initialize the file system int EFS_Init(int options, char *path) { bool found = false; // reset current path memset(currPath, 0, EFS_MAXPATHLEN); //iprintf("efs1\n"); // first try to init NitroFS from GBA mem sysSetBusOwners(BUS_OWNER_ARM9, BUS_OWNER_ARM9); // take gba slot ownership //iprintf("efs2\n"); if(strncmp(((const char*)GBAROM)+EFS_LOADERSTROFFSET, EFS_GBALOADERSTR, strlen(EFS_GBALOADERSTR)) == 0) { // there's a GBA loader here memcpy(&fnt_offset, EFS_FNTOFFSET+EFS_LOADEROFFSET + (void*)GBAROM, sizeof(fnt_offset)); memcpy(&fat_offset, EFS_FATOFFSET+EFS_LOADEROFFSET + (void*)GBAROM, sizeof(fat_offset)); fnt_offset += EFS_LOADEROFFSET; fat_offset += EFS_LOADEROFFSET; hasLoader = true; useDLDI = false; AddDevice(&EFSdevoptab); found = true; strcpy(efs_path, "GBA ROM"); //iprintf("GBA2\n"); } else if(strncmp(((const char*)GBAROM)+EFS_LOADERSTROFFSET, EFS_STDLOADERSTR, strlen(EFS_STDLOADERSTR)) == 0) { // there's a standard nds loader here memcpy(&fnt_offset, EFS_FNTOFFSET + (void*)GBAROM, sizeof(fnt_offset)); memcpy(&fat_offset, EFS_FATOFFSET + (void*)GBAROM, sizeof(fat_offset)); hasLoader = false; useDLDI = false; AddDevice(&EFSdevoptab); found = true; strcpy(efs_path, "GBA ROM"); //iprintf("GBA2\n"); } else { // if init from GBA mem failed go for DLDI I/O useDLDI = true; //iprintf("DLDI\n"); // init libfat if requested if(options & EFS_AND_FAT) { if(!fatInitDefault()) return false; } //iprintf("FatInited\n"); // check if the provided path is valid if(path && CheckFile(path, true)) { found = true; //iprintf("Path1-1\n"); } else { // check if there's already a path stored if(efs_path[0]) { if(CheckFile(efs_path, false)) { found = true; } else { efs_path[0] = '\0'; } } //iprintf("Path2-1\n"); // if no path is defined, search the whole FAT space if(!efs_path[0]) { chdir("/"); if(SearchDirectory()) found = true; } //iprintf("Path2-2\n"); } // if nds file is found, open it and read the header if(found) { //iprintf("Path2-3\n"); char buffer[8]; nds_file = open(efs_path, O_RDWR); // check for if a loader is present lseek(nds_file, EFS_LOADERSTROFFSET, SEEK_SET); read(nds_file, buffer, 6); buffer[7] = '\0'; if(strcmp(buffer, EFS_GBALOADERSTR) == 0) { // loader present lseek(nds_file, EFS_LOADEROFFSET+EFS_FNTOFFSET, SEEK_SET); read(nds_file, &fnt_offset, sizeof(u32)); lseek(nds_file, 4, SEEK_CUR); read(nds_file, &fat_offset, sizeof(u32)); fnt_offset += EFS_LOADEROFFSET; fat_offset += EFS_LOADEROFFSET; hasLoader = true; } else { lseek(nds_file, EFS_FNTOFFSET, SEEK_SET); read(nds_file, &fnt_offset, sizeof(u32)); lseek(nds_file, 4, SEEK_CUR); read(nds_file, &fat_offset, sizeof(u32)); hasLoader = false; } AddDevice(&EFSdevoptab); } } // set as default device if requested if(found && (options & EFS_DEFAULT_DEVICE)) chdir(EFS_DEVICE); // works better than setDefaultDevice(); return (found && (!useDLDI || (nds_file != -1))); }