/* wxFileName FileMcd_GetSimpleName(uint slot) { if( FileMcd_IsMultitapSlot(slot) ) return g_Conf->Folders.MemoryCards + wxsFormat( L"Mcd-Multitap%u-Slot%02u.ps2", FileMcd_GetMtapPort(slot)+1, FileMcd_GetMtapSlot(slot)+1 ); else return g_Conf->Folders.MemoryCards + wxsFormat( L"Mcd%03u.ps2", slot+1 ); } */ wxString FileMcd_GetDefaultName(uint slot) { if( FileMcd_IsMultitapSlot(slot) ) return wxsFormat( L"Mcd-Multitap%u-Slot%02u.ps2", FileMcd_GetMtapPort(slot)+1, FileMcd_GetMtapSlot(slot)+1 ); else return wxsFormat( L"Mcd%03u.ps2", slot+1 ); }
// ------------------------------------------------------------------------ void AppConfig::LoadSaveMemcards( IniInterface& ini ) { ScopedIniGroup path( ini, L"MemoryCards" ); for( uint slot=0; slot<2; ++slot ) { ini.Entry( pxsFmt( L"Slot%u_Enable", slot+1 ), Mcd[slot].Enabled, Mcd[slot].Enabled ); ini.Entry( pxsFmt( L"Slot%u_Filename", slot+1 ), Mcd[slot].Filename, Mcd[slot].Filename ); } for( uint slot=2; slot<8; ++slot ) { int mtport = FileMcd_GetMtapPort(slot)+1; int mtslot = FileMcd_GetMtapSlot(slot)+1; ini.Entry( pxsFmt( L"Multitap%u_Slot%u_Enable", mtport, mtslot ), Mcd[slot].Enabled, Mcd[slot].Enabled ); ini.Entry( pxsFmt( L"Multitap%u_Slot%u_Filename", mtport, mtslot ), Mcd[slot].Filename, Mcd[slot].Filename ); } }
void FileMemoryCard::Open() { for( int slot=0; slot<8; ++slot ) { if( FileMcd_IsMultitapSlot(slot) ) { if( !EmuConfig.MultitapPort0_Enabled && (FileMcd_GetMtapPort(slot) == 0) ) continue; if( !EmuConfig.MultitapPort1_Enabled && (FileMcd_GetMtapPort(slot) == 1) ) continue; } wxFileName fname( g_Conf->FullpathToMcd( slot ) ); wxString str( fname.GetFullPath() ); bool cont = false; if( fname.GetFullName().IsEmpty() ) { str = L"[empty filename]"; cont = true; } if( !g_Conf->Mcd[slot].Enabled ) { str = L"[disabled]"; cont = true; } if ( g_Conf->Mcd[slot].Type != MemoryCardType::MemoryCard_File ) { str = L"[is not memcard file]"; cont = true; } Console.WriteLn( cont ? Color_Gray : Color_Green, L"McdSlot %u [File]: " + str, slot ); if( cont ) continue; const wxULongLong fsz = fname.GetSize(); if( (fsz == 0) || (fsz == wxInvalidSize) ) { // FIXME : Ideally this should prompt the user for the size of the // memory card file they would like to create, instead of trying to // create one automatically. if( !Create( str, 8 ) ) { Msgbox::Alert( wxsFormat(_( "Could not create a memory card: \n\n%s\n\n" ), str.c_str()) + GetDisabledMessage( slot ) ); } } // [TODO] : Add memcard size detection and report it to the console log. // (8MB, 256Mb, formatted, unformatted, etc ...) #ifdef __WXMSW__ NTFS_CompressFile( str, g_Conf->McdCompressNTFS ); #endif if( !m_file[slot].Open( str.c_str(), L"r+b" ) ) { // Translation note: detailed description should mention that the memory card will be disabled // for the duration of this session. Msgbox::Alert( wxsFormat(_( "Access denied to memory card: \n\n%s\n\n" ), str.c_str()) + GetDisabledMessage( slot ) ); } else // Load checksum { m_ispsx[slot] = m_file[slot].Length() == 0x20000; m_chkaddr = 0x210; if(!m_ispsx[slot] && !!m_file[slot].Seek( m_chkaddr )) m_file[slot].Read( &m_chksum[slot], 8 ); } } }