OSDN Git Service

[VM][General] Merge Upstream 20180530.
[csp-qt/common_source_project-fm7.git] / source / src / vm / disk.cpp
index 99162a6..5c20d6b 100644 (file)
@@ -918,7 +918,12 @@ void DISK::save_as_d88(const _TCHAR* file_path)
 bool DISK::get_track(int trk, int side)
 {
        if(media_type == MEDIA_TYPE_2D && drive_type == DRIVE_TYPE_2DD) {
-               if(trk >= 0) trk >>= 1;
+               if(trk >= 0) {
+                       if(trk & 1) {
+                               return false; // unformat
+                       }
+                       trk >>= 1;
+               }
        } else if(media_type == MEDIA_TYPE_2DD && drive_type == DRIVE_TYPE_2D) {
                if(trk >= 0) trk <<= 1;
        }
@@ -1074,7 +1079,12 @@ bool DISK::get_track_tmp(int trk, int side)
 bool DISK::make_track(int trk, int side)
 {
        if(media_type == MEDIA_TYPE_2D && drive_type == DRIVE_TYPE_2DD) {
-               if(trk >= 0) trk >>= 1;
+               if(trk >= 0) {
+                       if(trk & 1) {
+                               return false; // unformat
+                       }
+                       trk >>= 1;
+               }
        } else if(media_type == MEDIA_TYPE_2DD && drive_type == DRIVE_TYPE_2D) {
                if(trk >= 0) trk <<= 1;
        }
@@ -1179,7 +1189,12 @@ bool DISK::make_track_tmp(int trk, int side)
 bool DISK::get_sector(int trk, int side, int index)
 {
        if(media_type == MEDIA_TYPE_2D && drive_type == DRIVE_TYPE_2DD) {
-               if(trk >= 0) trk >>= 1;
+               if(trk >= 0) {
+                       if(trk & 1) {
+                               return false; // unformat
+                       }
+                       trk >>= 1;
+               }
        } else if(media_type == MEDIA_TYPE_2DD && drive_type == DRIVE_TYPE_2D) {
                if(trk >= 0) trk <<= 1;
        }
@@ -1301,7 +1316,12 @@ void DISK::set_data_mark_missing()
 bool DISK::format_track(int trk, int side)
 {
        if(media_type == MEDIA_TYPE_2D && drive_type == DRIVE_TYPE_2DD) {
-               if(trk >= 0) trk >>= 1;
+               if(trk >= 0) {
+                       if(trk & 1) {
+                               return false; // unformat
+                       }
+                       trk >>= 1;
+               }
        } else if(media_type == MEDIA_TYPE_2DD && drive_type == DRIVE_TYPE_2D) {
                if(trk >= 0) trk <<= 1;
        }
@@ -1441,7 +1461,7 @@ void DISK::trim_buffer()
        file_size.write_4bytes_le_to(tmp_buffer + 0x1c);
        
        memset(buffer, 0, sizeof(buffer));
-       memcpy(buffer, tmp_buffer, min(sizeof(buffer), file_size.d));
+       memcpy(buffer, tmp_buffer, min((unsigned int)sizeof(buffer), file_size.d));
 }
 
 int DISK::get_max_tracks()
@@ -2564,10 +2584,12 @@ bool DISK::solid_to_d88(FILEIO *fio, int type, int ncyl, int nside, int nsec, in
 #define STATE_VERSION  14
 
 #include "../../statesub.h"
+#include "../../qt/gui/csp_logger.h"
 
-void DISK::decl_state()
+void DISK::decl_state(void *p)
 {
-       state_entry = new csp_state_utils(STATE_VERSION, drive_num, _T("FLOPPY_DISK"));
+       CSP_Logger *p_logger = (CSP_Logger *)p;
+       state_entry = new csp_state_utils(STATE_VERSION, drive_num, _T("FLOPPY_DISK"), p_logger);
 
        DECL_STATE_ENTRY_1D_ARRAY(buffer, sizeof(buffer));
        DECL_STATE_ENTRY_STRING(orig_path, sizeof(orig_path) / sizeof(_TCHAR));