1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111
|
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;
|