blargg_err_t Nes_Cart::load_patched_ines( Auto_File_Reader in, Auto_File_Reader patch ) { RETURN_ERR( in.open() ); RETURN_ERR( patch.open() ); // read file into memory long size = in->remain(); byte* ines = (byte*) malloc( size ); CHECK_ALLOC( ines ); const char* err = in->read( ines, size ); // apply patch if ( !err ) err = apply_ips_patch( *patch, &ines, &size ); // load patched file if ( !err ) { Mem_File_Reader patched( ines, size ); err = load_ines( patched ); } free( ines ); return err; }
blargg_err_t Nes_Cart::apply_ips_to_chr( Auto_File_Reader patch ) { RETURN_ERR( patch.open() ); long size = chr_size(); byte* chr_copy = (byte*) malloc( size ); CHECK_ALLOC( chr_copy ); memcpy( chr_copy, chr(), size ); const char* err = apply_ips_patch( *patch, &chr_copy, &size ); if ( !err ) { resize_chr( size ); memcpy( chr(), chr_copy, size ); } free( chr_copy ); return err; }
blargg_err_t Nes_Rom::load_patched_ines_rom( Data_Reader& in, Data_Reader& patch ) { // read file into memory long size = in.remain(); byte* ines = (byte*) malloc( size ); BLARGG_CHECK_ALLOC( ines ); const char* err = in.read( ines, size ); // apply patch if ( !err ) err = apply_ips_patch( patch, &ines, &size ); // load patched file if ( !err ) { Mem_File_Reader patched( ines, size ); err = load_ines_rom( patched ); } free( ines ); return err; }