OSDN Git Service

[VM][FM7][FLOPPY] Fix crash when starting.
authorK.Ohta <whatisthis.sowhat@gmail.com>
Fri, 11 Aug 2017 18:25:53 +0000 (03:25 +0900)
committerK.Ohta <whatisthis.sowhat@gmail.com>
Fri, 11 Aug 2017 18:25:53 +0000 (03:25 +0900)
source/src/vm/fm7/floppy.cpp
source/src/vm/fm7/fm7.h
source/src/vm/mb8877.cpp

index f710078..8b1307a 100644 (file)
@@ -272,10 +272,10 @@ void FM7_MAINIO::set_fdc_fd1e(uint8_t val)
                }
        }
        if((val & 0x40) != 0) {
-               for(drive = 0; drive < MAX_FD; drive++) fdc->set_drive_type(drive, DRIVE_TYPE_2D);
+               for(drive = 0; drive < MAX_DRIVE; drive++) fdc->set_drive_type(drive, DRIVE_TYPE_2D);
                //this->out_debug_log(_T("2D\n"));
        } else {
-               for(drive = 0; drive < MAX_FD; drive++) fdc->set_drive_type(drive, DRIVE_TYPE_2DD);
+               for(drive = 0; drive < MAX_DRIVE; drive++) fdc->set_drive_type(drive, DRIVE_TYPE_2DD);
                //this->out_debug_log(_T("2DD\n"));
        }
 #endif 
index cfae88f..9d2ad57 100644 (file)
 #define USE_BUBBLE1
 #define USE_BUBBLE2
 #define MAX_BUBBLE 2
-
+#define MAX_DRIVE  4
 #elif defined(_FM7)
 #define DEVICE_NAME            "FUJITSU FM-7"
 #define CONFIG_NAME            "fm7"
 #define CAPABLE_Z80
 #define DIPSWITCH_DEFAULT 0x000000000 
+#define MAX_DRIVE  4
 
 #elif defined(_FMNEW7)
 #define DEVICE_NAME            "FUJITSU FM-NEW7"
 #define CONFIG_NAME            "fmnew7"
 #define CAPABLE_Z80
 #define DIPSWITCH_DEFAULT 0x000000000 
+#define MAX_DRIVE  4
 
 #elif defined(_FM77) || defined(_FM77L2)
 # if defined(_FM77)
 #define DEVICE_NAME            "FUJITSU FM-77"
 #define CONFIG_NAME            "fm77"
 #define DIPSWITCH_DEFAULT 0x00000001
-
 # else
 #define DEVICE_NAME            "FUJITSU FM-77L2"
 #define CONFIG_NAME            "fm77l2"
@@ -81,6 +82,7 @@
 # ifndef FM77_EXRAM_BANKS
 #   define FM77_EXRAM_BANKS    3
 # endif
+#define MAX_DRIVE  4
 
 #elif defined(_FM77L4)
 #define DEVICE_NAME            "FUJITSU FM-77L4"
 #  define FM77_EXRAM_BANKS     3
 # endif
 #define DIPSWITCH_DEFAULT 0x00000003 
+#define MAX_DRIVE  4
 
 #elif defined(_FM77AV)
 #define DEVICE_NAME            "FUJITSU FM77AV"
 #define CONFIG_NAME            "fm77av"
 #define _FM77AV_VARIANTS
 #define DIPSWITCH_DEFAULT 0x80000001 
+#define MAX_DRIVE  2
 
 #elif defined(_FM77AV20)
 #define DEVICE_NAME            "FUJITSU FM77AV20"
 //#define USE_DRIVE_TYPE 2
 #define CAPABLE_KANJI_CLASS2
 #define DIPSWITCH_DEFAULT 0x80000001 
+#define MAX_DRIVE  2
 
 #elif defined(_FM77AV20EX)
 #define DEVICE_NAME            "FUJITSU FM77AV20EX"
 #define CAPABLE_DICTROM
 #define CAPABLE_KANJI_CLASS2
 #define DIPSWITCH_DEFAULT 0x80000001 
+#define MAX_DRIVE  4
 
 #elif defined(_FM77AV40)
 #define DEVICE_NAME            "FUJITSU FM77AV40"
 #define FM77_EXRAM_BANKS       12
 #endif
 #define DIPSWITCH_DEFAULT 0x8000000d 
+#define MAX_DRIVE  4
 
 #elif defined(_FM77AV40EX)
 #define DEVICE_NAME            "FUJITSU FM77AV40EX"
 #define FM77_EXRAM_BANKS       12
 #endif
 #define DIPSWITCH_DEFAULT 0x8000000d 
+#define MAX_DRIVE  4
 
 #elif defined(_FM77AV40SX)
 #define DEVICE_NAME            "FUJITSU FM77AV40SX"
 #  define FM77_EXRAM_BANKS     12
 # endif
 #define DIPSWITCH_DEFAULT 0x8000000d 
+#define MAX_DRIVE  4
 
 #endif
 
index ece5efe..c8b0624 100644 (file)
@@ -106,7 +106,13 @@ void MB8877::initialize()
 {
        DEVICE::initialize();
        // initialize d88 handler
-       _max_drive = osd->get_feature_int_value(_T("MAX_DRIVE"));
+       if(osd->check_feature(_T("MAX_DRIVE"))) {
+               _max_drive = osd->get_feature_int_value(_T("MAX_DRIVE"));
+       } else if(osd->check_feature(_T("MAX_FD"))) {
+               _max_drive = osd->get_feature_int_value(_T("MAX_FD"));
+       } else {
+               _max_drive = 1;
+       }
        _drive_mask = _max_drive - 1;
        for(int i = 0; i < _max_drive; i++) {
                disk[i] = new DISK(emu);