Ejemplo n.º 1
0
//==========================================================
void  ram_lock (void)
//==========================================================
{
    sysSetBusOwners(BUS_OWNER_ARM9, BUS_OWNER_ARM9);

    if(_lock)
        _lock();
}
Ejemplo n.º 2
0
//==========================================================
vu16* ram_unlock (void)
//==========================================================
{
    sysSetBusOwners(BUS_OWNER_ARM9, BUS_OWNER_ARM9);

    if(_unlock)
        return _unlock();
    return 0;
}
Ejemplo n.º 3
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);
}
Ejemplo n.º 4
0
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;
}
Ejemplo n.º 5
0
//==========================================================
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;
}
Ejemplo n.º 6
0
// 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)));
}