diff --git a/include/bios_disk.h b/include/bios_disk.h index 160d1c31..a13aa344 100644 --- a/include/bios_disk.h +++ b/include/bios_disk.h @@ -81,8 +81,8 @@ void incrementFDD(void); #define MAX_DISK_IMAGES (2 + MAX_HDD_IMAGES) -extern std::array, MAX_DISK_IMAGES> imageDiskList; -extern std::array, MAX_SWAPPABLE_DISKS> diskSwap; +extern std::array, MAX_DISK_IMAGES> imageDiskList; +extern std::array, MAX_SWAPPABLE_DISKS> diskSwap; extern Bit32s swapPosition; extern Bit16u imgDTASeg; /* Real memory location of temporary DTA pointer for fat image disk access */ diff --git a/src/dos/dos_programs.cpp b/src/dos/dos_programs.cpp index d07fa736..27e0c6b0 100644 --- a/src/dos/dos_programs.cpp +++ b/src/dos/dos_programs.cpp @@ -83,7 +83,7 @@ static const char* UnmountHelper(char umount) { } if (i_drive < MAX_DISK_IMAGES && imageDiskList[i_drive]) { - imageDiskList[i_drive].reset(nullptr); + imageDiskList[i_drive].reset(); } return MSG_Get("PROGRAM_MOUNT_UMOUNT_SUCCESS"); @@ -718,9 +718,8 @@ public: } else { WriteOut(MSG_Get("PROGRAM_BOOT_CART_NO_CMDS")); } - for(Bitu dct=0;dctloadedDisk->hardDrive) { - imageDiskList[drive - 'A'].reset(((fatDrive *)newdrive)->loadedDisk.get()); - } - break; - case 2: - case 3: - if (((fatDrive *)newdrive)->loadedDisk->hardDrive) { - imageDiskList[drive - 'A'].reset(((fatDrive *)newdrive)->loadedDisk.get()); - updateDPT(); - } - break; + auto *newdrive = static_cast(imgDisks[0]); + if ('A' <= drive && drive <= 'D' && !(newdrive->loadedDisk->hardDrive)) { + const size_t idx = drive - 'A'; + imageDiskList[idx] = newdrive->loadedDisk; + updateDPT(); } } } else if (fstype=="iso") { diff --git a/src/dos/drives.h b/src/dos/drives.h index fc4f7cdc..27e8a298 100644 --- a/src/dos/drives.h +++ b/src/dos/drives.h @@ -185,7 +185,7 @@ public: Bit32u getFirstFreeClust(void); bool directoryBrowse(Bit32u dirClustNumber, direntry *useEntry, Bit32s entNum, Bit32s start=0); bool directoryChange(Bit32u dirClustNumber, direntry *useEntry, Bit32s entNum); - std::unique_ptr loadedDisk; + std::shared_ptr loadedDisk; bool created_successfully; private: Bit32u getClusterValue(Bit32u clustNum); diff --git a/src/ints/bios_disk.cpp b/src/ints/bios_disk.cpp index 90557f1c..aee02ef6 100644 --- a/src/ints/bios_disk.cpp +++ b/src/ints/bios_disk.cpp @@ -56,8 +56,8 @@ static bool swapping_requested; void CMOS_SetRegister(Bitu regNr, Bit8u val); //For setting equipment word /* 2 floppys and 2 harddrives, max */ -std::array, MAX_DISK_IMAGES> imageDiskList; -std::array, MAX_SWAPPABLE_DISKS> diskSwap; +std::array, MAX_DISK_IMAGES> imageDiskList; +std::array, MAX_SWAPPABLE_DISKS> diskSwap; Bit32s swapPosition; void updateDPT(void) { @@ -120,7 +120,7 @@ void swapInDisks(void) { while(diskcount<2) { if(diskSwap[swapPos]) { LOG_MSG("Loaded disk %d from swaplist position %d - \"%s\"", diskcount, swapPos, diskSwap[swapPos]->diskname); - imageDiskList[diskcount] = std::move(diskSwap[swapPos]); + imageDiskList[diskcount] = diskSwap[swapPos]; diskcount++; } swapPos++; @@ -572,15 +572,10 @@ void BIOS_SetupDisks(void) { call_int13=CALLBACK_Allocate(); CALLBACK_Setup(call_int13,&INT13_DiskHandler,CB_INT13,"Int 13 Bios disk"); RealSetVec(0x13,CALLBACK_RealPointer(call_int13)); - int i; - for(i=0;i<4;i++) { - imageDiskList[i].reset(nullptr); - } - - for(i=0;i