From 51aecb14c63152ccbc5f5f439d990960ba03eadd Mon Sep 17 00:00:00 2001 From: Peter Veenstra Date: Sun, 12 Jan 2020 17:51:04 +0000 Subject: [PATCH 1/2] Refinement of the checks, so no IRQ is raised when not in autodma mode. Imported-from: https://svn.code.sf.net/p/dosbox/code-0/dosbox/trunk@4307 --- src/hardware/sblaster.cpp | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/src/hardware/sblaster.cpp b/src/hardware/sblaster.cpp index 78f52b7a..843c154f 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; From 8be4b7a85018fb5da7e302d3851229b2de8571b1 Mon Sep 17 00:00:00 2001 From: Peter Veenstra Date: Sun, 12 Jan 2020 18:14:14 +0000 Subject: [PATCH 2/2] Move already mounted checks upwards. (jmarsh) Imported-from: https://svn.code.sf.net/p/dosbox/code-0/dosbox/trunk@4308 --- src/dos/dos_programs.cpp | 20 ++++++++++---------- 1 file changed, 10 insertions(+), 10 deletions(-) diff --git a/src/dos/dos_programs.cpp b/src/dos/dos_programs.cpp index 75ab857e..5c93428d 100644 --- a/src/dos/dos_programs.cpp +++ b/src/dos/dos_programs.cpp @@ -278,6 +278,16 @@ public: if (!isalpha(i_drive)) goto showusage; if ((i_drive - 'A') >= DOS_DRIVES || (i_drive-'A') < 0 ) 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; if (!temp_line.size()) goto showusage; @@ -409,11 +419,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) { @@ -446,11 +451,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 */