diff --git a/src/dos/dos_programs.cpp b/src/dos/dos_programs.cpp index 1a57cea6..66bebbdd 100644 --- a/src/dos/dos_programs.cpp +++ b/src/dos/dos_programs.cpp @@ -269,6 +269,16 @@ public: goto showusage; } drive = static_cast(i_drive); + if (type == "overlay") { + //Ensure that the base drive exists: + if (!Drives[drive-'A']) { + WriteOut("No basedrive mounted yet!"); + return; + } + } else if (Drives[drive-'A']) { + WriteOut(MSG_Get("PROGRAM_MOUNT_ALREADY_MOUNTED"),drive,Drives[drive-'A']->GetInfo()); + return; + } if (!cmd->FindCommand(2,temp_line)) { goto showusage; @@ -349,11 +359,6 @@ public: if(temp_line == "/") WriteOut(MSG_Get("PROGRAM_MOUNT_WARNING_OTHER")); #endif if(type == "overlay") { - //Ensure that the base drive exists: - if (!Drives[drive - 'A']) { - WriteOut("No basedrive mounted yet!"); - return; - } localDrive* ldp = dynamic_cast(Drives[drive - 'A']); cdromDrive* cdp = dynamic_cast(Drives[drive - 'A']); if (!ldp || cdp) { @@ -386,11 +391,6 @@ public: WriteOut(MSG_Get("PROGRAM_MOUNT_ILL_TYPE"),type.c_str()); return; } - if (Drives[drive - 'A']) { - WriteOut(MSG_Get("PROGRAM_MOUNT_ALREADY_MOUNTED"),drive,Drives[drive - 'A']->GetInfo()); - if (newdrive) delete newdrive; - return; - } if (!newdrive) E_Exit("DOS:Can't create drive"); Drives[drive - 'A'] = newdrive; /* Set the correct media byte in the table */ diff --git a/src/hardware/sblaster.cpp b/src/hardware/sblaster.cpp index c869903a..d7254dfb 100644 --- a/src/hardware/sblaster.cpp +++ b/src/hardware/sblaster.cpp @@ -294,7 +294,9 @@ static void DSP_DMA_CallBack(DmaChannel * chan, DMAEvent event) { if (!min_size) min_size = 1; min_size *= 2; if (sb.dma.left > min_size) { - if (s > (sb.dma.left-min_size)) s = sb.dma.left - min_size; + if (s > (sb.dma.left - min_size)) s = sb.dma.left - min_size; + //This will trigger a irq, see GenerateDMASound, so lets not do that + if (!sb.dma.autoinit && sb.dma.left <= sb.dma.min) s = 0; if (s) GenerateDMASound(s); } sb.mode = MODE_DMA_MASKED;