From: Alberto Garcia <agarcia@igalia.com>
Subject: Don't crash if ROM files are unavailable
Applied-Upstream: http://fuse-emulator.svn.sourceforge.net/viewvc/fuse-emulator?view=revision&revision=4234
Index: fuse-emulator/disk/beta.c
===================================================================
--- fuse-emulator.orig/disk/beta.c
+++ fuse-emulator/disk/beta.c
@@ -205,9 +205,15 @@ beta_reset( int hard_reset GCC_UNUSED )
   }
 
   if( !beta_builtin ) {
-    machine_load_rom_bank( beta_memory_map_romcs, 0, 0,
-			   settings_current.rom_beta128,
-			   settings_default.rom_beta128, 0x4000 );
+    if( machine_load_rom_bank( beta_memory_map_romcs, 0, 0,
+			       settings_current.rom_beta128,
+			       settings_default.rom_beta128, 0x4000 ) ) {
+      beta_active = 0;
+      beta_available = 0;
+      periph_beta128_active = 0;
+      settings_current.beta128 = 0;
+      return;
+    }
 
     beta_memory_map_romcs[ 0 ].writable = 0;
     beta_memory_map_romcs[ 1 ].writable = 0;
Index: fuse-emulator/disk/opus.c
===================================================================
--- fuse-emulator.orig/disk/opus.c
+++ fuse-emulator/disk/opus.c
@@ -162,9 +162,13 @@ opus_reset( int hard_reset )
   if( !periph_opus_active )
     return;
 
-  machine_load_rom_bank( opus_memory_map_romcs, 0, 0,
-			 settings_current.rom_opus,
-			 settings_default.rom_opus, 0x2000 );
+  if( machine_load_rom_bank( opus_memory_map_romcs, 0, 0,
+                             settings_current.rom_opus,
+                             settings_default.rom_opus, 0x2000 ) ) {
+    settings_current.opus = 0;
+    periph_opus_active = 0;
+    return;
+  }
 
   opus_memory_map_romcs[0].source = MEMORY_SOURCE_PERIPHERAL;
 
Index: fuse-emulator/disk/plusd.c
===================================================================
--- fuse-emulator.orig/disk/plusd.c
+++ fuse-emulator/disk/plusd.c
@@ -174,9 +174,13 @@ plusd_reset( int hard_reset )
   if( !periph_plusd_active )
     return;
 
-  machine_load_rom_bank( plusd_memory_map_romcs, 0, 0,
-			 settings_current.rom_plusd,
-			 settings_default.rom_plusd, 0x2000 );
+  if( machine_load_rom_bank( plusd_memory_map_romcs, 0, 0,
+			     settings_current.rom_plusd,
+			     settings_default.rom_plusd, 0x2000 ) ) {
+    settings_current.plusd = 0;
+    periph_plusd_active = 0;
+    return;
+  }
 
   plusd_memory_map_romcs[0].source = MEMORY_SOURCE_PERIPHERAL;
 
Index: fuse-emulator/if1.c
===================================================================
--- fuse-emulator.orig/if1.c
+++ fuse-emulator/if1.c
@@ -364,10 +364,14 @@ if1_reset( int hard_reset GCC_UNUSED )
 
   if( !periph_interface1_active ) return;
 
-  machine_load_rom_bank( if1_memory_map_romcs, 0, 0,
-			 settings_current.rom_interface_i,
-			 settings_default.rom_interface_i,
-			 MEMORY_PAGE_SIZE );
+  if( machine_load_rom_bank( if1_memory_map_romcs, 0, 0,
+			     settings_current.rom_interface_i,
+			     settings_default.rom_interface_i,
+			     MEMORY_PAGE_SIZE ) ) {
+    settings_current.interface1 = 0;
+    periph_interface1_active = 0;
+    return;
+  }
 
   if1_memory_map_romcs[0].source = MEMORY_SOURCE_PERIPHERAL;
 
Index: fuse-emulator/if2.c
===================================================================
--- fuse-emulator.orig/if2.c
+++ fuse-emulator/if2.c
@@ -121,10 +121,11 @@ if2_reset( int hard_reset GCC_UNUSED )
 
   if ( !periph_interface2_active ) return;
 
-  machine_load_rom_bank( if2_memory_map_romcs, 0, 0,
-			 settings_current.if2_file,
-			 NULL,
-			 2 * MEMORY_PAGE_SIZE );
+  if ( machine_load_rom_bank( if2_memory_map_romcs, 0, 0,
+			      settings_current.if2_file,
+			      NULL,
+			      2 * MEMORY_PAGE_SIZE ) )
+    return;
 
   if2_memory_map_romcs[0].source =
     if2_memory_map_romcs[1].source = MEMORY_SOURCE_CARTRIDGE;
