OSDN Git Service

[VM][MB8877] I em-bug'ed before commit X-)I fixed.
authorK.Ohta <whatisthis.sowhat@gmail.com>
Sun, 28 Jan 2018 08:40:31 +0000 (17:40 +0900)
committerK.Ohta <whatisthis.sowhat@gmail.com>
Sun, 28 Jan 2018 08:40:31 +0000 (17:40 +0900)
[UI][Qt] Update menu for DISK.

source/src/config.cpp
source/src/config.h
source/src/qt/CMakeLists.txt
source/src/qt/avio/CMakeLists.txt
source/src/qt/emuutils/CMakeLists.txt
source/src/qt/gui/CMakeLists.txt
source/src/qt/gui/commonclasses.h
source/src/qt/gui/menu_disk.cpp
source/src/qt/gui/menu_disk.h
source/src/qt/gui/util_fd.cpp
source/src/vm/mb8877.cpp

index f3b0317..dd3516a 100644 (file)
@@ -197,6 +197,9 @@ void initialize_config()
                config.roma_kana_conversion = false;
                config.rendering_type = CONFIG_RENDER_TYPE_STD;
                config.virtual_media_position = 2; // Down.
+               for(int drv = 0; drv < 16; drv++) {
+                       config.disk_count_immediate[drv] = false;
+               }
 #endif 
 }
 
@@ -247,6 +250,9 @@ void load_config(const _TCHAR *config_path)
                for(int drv = 0; drv < MAX_FD; drv++) {
                        config.correct_disk_timing[drv] = MyGetPrivateProfileBool(_T("Control"), create_string(_T("CorrectDiskTiming%d"), drv + 1), config.correct_disk_timing[drv], config_path);
                        config.ignore_disk_crc[drv] = MyGetPrivateProfileBool(_T("Control"), create_string(_T("IgnoreDiskCRC%d"), drv + 1), config.ignore_disk_crc[drv], config_path);
+               #ifdef _USE_QT
+                       config.disk_count_immediate[drv] = MyGetPrivateProfileBool(_T("Control"), create_string(_T("DiskIncrementImmediate%d"), drv + 1), config.disk_count_immediate[drv], config_path);
+               #endif
                }
        #endif
        #ifdef USE_TAPE1
@@ -568,6 +574,9 @@ void save_config(const _TCHAR *config_path)
                for(int drv = 0; drv < MAX_FD; drv++) {
                        MyWritePrivateProfileBool(_T("Control"), create_string(_T("CorrectDiskTiming%d"), drv + 1), config.correct_disk_timing[drv], config_path);
                        MyWritePrivateProfileBool(_T("Control"), create_string(_T("IgnoreDiskCRC%d"), drv + 1), config.ignore_disk_crc[drv], config_path);
+               #ifdef _USE_QT
+                       MyWritePrivateProfileBool(_T("Control"), create_string(_T("DiskIncrementImmediate%d"), drv + 1), config.disk_count_immediate[drv], config_path);
+               #endif
                }
        #endif
        #ifdef USE_TAPE1
index 55b9e2f..d99d63e 100644 (file)
@@ -179,7 +179,8 @@ typedef struct {
        bool use_opengl_filters;
        bool focus_with_click;
        int opengl_filter_num;
-
+       
+       
        bool swap_kanji_pause;
        /*
         * TYPE : 
@@ -195,6 +196,7 @@ typedef struct {
        int render_platform;
        int render_major_version;
        int render_minor_version;
+       bool disk_count_immediate[16]; // Hack for MB8877, FLEX for FM-7.
 #endif 
        
        // sound
index b39bc98..2075abc 100644 (file)
@@ -1,5 +1,5 @@
 message("* qt/osd")
-SET(THIS_LIB_VERSION 2.9.14
+SET(THIS_LIB_VERSION 2.9.15
 
 set(s_qt_osd_headers
        osd_base.h
index a5d770f..0c62b0a 100644 (file)
@@ -1,6 +1,6 @@
 message("* qt/avio")
 
-SET(THIS_LIB_VERSION 2.6.12)
+SET(THIS_LIB_VERSION 2.6.13)
 set(s_qt_avio_headers
          movie_saver.h
          movie_loader.h
index f8b3056..6341cd9 100644 (file)
@@ -7,7 +7,7 @@ set(s_qt_emuutils_srcs
          ../../fileio.cpp
          )
        
-SET(THIS_LIB_VERSION 2.6.3
+SET(THIS_LIB_VERSION 2.6.4
 
 if(WIN32)
 include (GenerateExportHeader)
index 405416d..48b301f 100644 (file)
@@ -1,6 +1,6 @@
 message("* qt/gui")
 
-set(THIS_LIB_VERSION 2.10.7)
+set(THIS_LIB_VERSION 2.10.8)
 set(s_qt_gui_headers
          csp_logger.h
   
index ad9cbcb..0b8d3c9 100644 (file)
@@ -76,6 +76,7 @@ public slots:
        void no_write_protect_fd(void);
        void do_set_ignore_crc_error(bool flag);
        void do_set_correct_disk_timing(bool flag);
+       void do_set_disk_count_immediate(bool flag);
        // Bubble
        void insert_bubble(void);
        void eject_bubble(void);
index 559562e..151b419 100644 (file)
@@ -26,17 +26,24 @@ Menu_FDClass::~Menu_FDClass()
 
 void Menu_FDClass::create_pulldown_menu_device_sub(void)
 {
+       config_t *p;
        action_ignore_crc_error = new Action_Control(p_wid, using_flags);
        action_ignore_crc_error->setVisible(true);
        action_ignore_crc_error->setCheckable(true);
-       connect(action_ignore_crc_error->binds, SIGNAL(sig_emu_update_config()),
-                       p_wid, SLOT(do_emu_update_config()));
        
        action_correct_timing = new Action_Control(p_wid, using_flags);
        action_correct_timing->setVisible(true);
        action_correct_timing->setCheckable(true);
-       connect(action_correct_timing->binds, SIGNAL(sig_emu_update_config()),
-                       p_wid, SLOT(do_emu_update_config()));
+
+       action_count_immediate = new Action_Control(p_wid, using_flags);
+       action_count_immediate->setVisible(true);
+       action_count_immediate->setCheckable(true);
+       p = using_flags->get_config_ptr();
+       if(p != NULL) {
+               if(p->correct_disk_timing[media_drive]) action_correct_timing->setChecked(true);
+               if(p->ignore_disk_crc[media_drive]) action_ignore_crc_error->setChecked(true);
+               if(p->disk_count_immediate[media_drive]) action_count_immediate->setChecked(true);
+       }               
 }
 
 
@@ -45,12 +52,16 @@ void Menu_FDClass::connect_menu_device_sub(void)
        this->addSeparator();
        this->addAction(action_ignore_crc_error);
        this->addAction(action_correct_timing);
+       this->addAction(action_count_immediate);
        
        connect(action_ignore_crc_error, SIGNAL(toggled(bool)),
                        action_ignore_crc_error->binds, SLOT(do_set_ignore_crc_error(bool)));
        
        connect(action_correct_timing, SIGNAL(toggled(bool)),
                        action_correct_timing->binds, SLOT(do_set_correct_disk_timing(bool)));
+       
+       connect(action_count_immediate, SIGNAL(toggled(bool)),
+                       action_count_immediate->binds, SLOT(do_set_disk_count_immediate(bool)));
    
        connect(this, SIGNAL(sig_open_media(int, QString)), p_wid, SLOT(_open_disk(int, QString)));
        connect(this, SIGNAL(sig_eject_media(int)), p_wid, SLOT(eject_fd(int)));
@@ -69,6 +80,9 @@ void Menu_FDClass::retranslate_pulldown_menu_device_sub(void)
        action_ignore_crc_error->setToolTip(QApplication::translate("MainWindow", "Ignore CRC error of virtual floppy.\nUseful for some softwares,\n but causes wrong working with some softwares.", 0));
        action_correct_timing->setText(QApplication::translate("MainWindow", "Correct transfer timing", 0));
        action_correct_timing->setToolTip(QApplication::translate("MainWindow", "Correct transferring timing.\nUseful for some softwares\n needs strict transfer timing.", 0));
+       
+       action_count_immediate->setText(QApplication::translate("MainWindow", "Immediate increment", 0));
+       action_count_immediate->setToolTip(QApplication::translate("MainWindow", "Increment data pointer immediately.\nThis is test hack for MB8877.\nUseful for some softwares\n needs strict transfer timing.", 0));
 }
 
 
index afdc2ab..edf9789 100644 (file)
@@ -18,6 +18,7 @@ class DLL_PREFIX Menu_FDClass: public Menu_MetaClass {
 protected:
        class Action_Control *action_ignore_crc_error;
        class Action_Control *action_correct_timing;
+       class Action_Control *action_count_immediate;
        QIcon icon_floppy;
 public:
        Menu_FDClass(QMenuBar *root_entry, QString desc, USING_FLAGS *p, QWidget *parent = 0, int drv = 0);
index a9169b6..2e2a726 100644 (file)
@@ -55,6 +55,12 @@ void Object_Menu_Control::do_set_correct_disk_timing(bool flag)
        emit sig_emu_update_config();
 }
 
+void Object_Menu_Control::do_set_disk_count_immediate(bool flag)
+{
+       using_flags->get_config_ptr()->disk_count_immediate[drive] = flag;
+       emit sig_emu_update_config();
+}
+
 int Ui_MainWindowBase::write_protect_fd(int drv, bool flag)
 {
        if((drv < 0) || (drv >= using_flags->get_max_drive())) return -1;
index b181a40..87e1c42 100644 (file)
@@ -344,7 +344,6 @@ void MB8877::write_io8(uint32_t addr, uint32_t data)
                                                cmdtype = 0;
                                                set_irq(true);
                                        }
-                                       if(fdc[drvreg].count_immediate) fdc[drvreg].index++;
                                        //fdc[drvreg].index++;
                                }
                                if((fdc[drvreg].index + 1) >= disk[drvreg]->sector_size.sd) {
@@ -372,6 +371,7 @@ void MB8877::write_io8(uint32_t addr, uint32_t data)
                                        } else {
                                                register_drq_event(1);
                                        }
+                                       if(fdc[drvreg].count_immediate) fdc[drvreg].index++;
                                }
                                status &= ~FDC_ST_DRQ;
                        } else if(cmdtype == FDC_CMD_WR_TRK) {
@@ -442,7 +442,6 @@ write_id:
                                                cmdtype = 0;
                                                set_irq(true);
                                        }
-                                       if(fdc[drvreg].count_immediate) fdc[drvreg].index++;
                                        //fdc[drvreg].index++;
                                }
                                if((fdc[drvreg].index + 1) >= disk[drvreg]->get_track_size()) {
@@ -462,6 +461,7 @@ write_id:
                                        } else {
                                                register_drq_event(1);
                                        }
+                                       if(fdc[drvreg].count_immediate) fdc[drvreg].index++;
                                }
                                status &= ~FDC_ST_DRQ;
                        }
@@ -615,7 +615,6 @@ uint32_t MB8877::read_io8(uint32_t addr)
                                // read or multisector read
                                if(fdc[drvreg].index < disk[drvreg]->sector_size.sd) {
                                        datareg = disk[drvreg]->sector[fdc[drvreg].index];
-                                       if(fdc[drvreg].count_immediate) fdc[drvreg].index++;
                                }
                                if((fdc[drvreg].index + 1) >= disk[drvreg]->sector_size.sd) {  // Reading complete this sector.
 
@@ -646,13 +645,13 @@ uint32_t MB8877::read_io8(uint32_t addr)
                                        }
                                } else { // Still data remain.
                                        register_drq_event(1);
+                                       if(fdc[drvreg].count_immediate) fdc[drvreg].index++;
                                }
                                status &= ~FDC_ST_DRQ;
                        } else if(cmdtype == FDC_CMD_RD_ADDR) {
                                // read address
                                if(fdc[drvreg].index < 6) {
                                        datareg = disk[drvreg]->id[fdc[drvreg].index];
-                                       if(fdc[drvreg].count_immediate) fdc[drvreg].index++;
                                        //fdc[drvreg].index++;
                                }
                                if((fdc[drvreg].index + 1) >= 6) {
@@ -668,13 +667,13 @@ uint32_t MB8877::read_io8(uint32_t addr)
 //#endif
                                } else {
                                        register_drq_event(1);
+                                       if(fdc[drvreg].count_immediate) fdc[drvreg].index++;
                                }
                                status &= ~FDC_ST_DRQ;
                        } else if(cmdtype == FDC_CMD_RD_TRK) {
                                // read track
                                if(fdc[drvreg].index < disk[drvreg]->get_track_size()) {
                                        datareg = disk[drvreg]->track[fdc[drvreg].index];
-                                       if(fdc[drvreg].count_immediate) fdc[drvreg].index++;
                                        //fdc[drvreg].index++;
                                }
                                if((fdc[drvreg].index + 1) >= disk[drvreg]->get_track_size()) {
@@ -687,6 +686,7 @@ uint32_t MB8877::read_io8(uint32_t addr)
                                        set_irq(true);
                                } else {
                                        register_drq_event(1);
+                                       if(fdc[drvreg].count_immediate) fdc[drvreg].index++;
                                }
                                status &= ~FDC_ST_DRQ;
                        }
@@ -1814,15 +1814,15 @@ void MB8877::open_disk(int drv, const _TCHAR* file_path, int bank)
 {
        if(drv < _max_drive) {
                disk[drv]->open(file_path, bank);
-#if 0
+#if defined(_USE_QT)
+               if((disk[drv]->is_special_disk == SPECIAL_DISK_FM7_FLEX) || (config.disk_count_immediate[drv])) {
+#else
                if(disk[drv]->is_special_disk == SPECIAL_DISK_FM7_FLEX) {
+#endif
                        fdc[drv].count_immediate = true;
                } else {
                        fdc[drv].count_immediate = false;
                }
-#else /* TEST for FLEX */
-               fdc[drv].count_immediate = true;
-#endif
        }
 }