Config PSP: add 'Master Volume' control; Speaker.cpp: remove 'soundtype' var; Registry remove 'Sound Emulation'

This commit is contained in:
tomcw
2025-12-31 14:25:06 +00:00
parent b0d889ea68
commit c75223729a
12 changed files with 130 additions and 206 deletions
+4
View File
@@ -99,6 +99,10 @@ BEGIN
CONTROL "Vertical blend",IDC_CHECK_VERTICAL_BLEND,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,142,48,62,10
CONTROL "Full-Screen: Show drive/keyboard status",IDC_CHECK_FS_SHOW_SUBUNIT_STATUS,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,12,64,140,10
CONTROL "50Hz video",IDC_CHECK_50HZ_VIDEO,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,142,80,51,10
CTEXT "Master Volume",IDC_MASTER_VOLUME_T,4,100,60,10
CONTROL "Generic1",IDC_SLIDER_MASTER_VOLUME,"msctls_trackbar32",TBS_AUTOTICKS | WS_TABSTOP,70,100,80,15
GROUPBOX "Emulation Speed Control",IDC_STATIC,5,119,200,114
CONTROL "&Enhanced floppy disk access speed (all drives)",IDC_ENHANCE_DISK_ENABLE,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,15,132,160,10
CONTROL "&Scroll Lock acts as toggle for full-speed CPU",IDC_SCROLLLOCK_TOGGLE,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,15,146,166,10
+2 -2
View File
@@ -77,8 +77,8 @@
#define IDC_SAVESTATE 1006
#define IDC_SAVESTATE_ON_EXIT 1007
#define IDC_SAVESTATE_FILENAME 1008
#define IDC_SPKR_VOLUME 1009
#define IDC_MB_VOLUME 1010
#define IDC_MASTER_VOLUME_T 1009
#define IDC_SLIDER_MASTER_VOLUME 1010
#define IDC_SAVESTATE_BROWSE 1011
#define IDC_MONOCOLOR 1012
#define IDC_DISKII_SLOT5_ENABLE 1019
+3 -3
View File
@@ -69,9 +69,9 @@ enum AppMode_e
#define REGVALUE_CONFIRM_REBOOT "Confirm Reboot" // Added at 1.24.1 PageConfig
#define REGVALUE_FS_SHOW_SUBUNIT_STATUS "Full-screen show subunit status"
#define REGVALUE_SHOW_DISKII_STATUS "Show Disk II Status"
#define REGVALUE_SOUND_EMULATION "Sound Emulation"
#define REGVALUE_SPKR_VOLUME "Speaker Volume"
#define REGVALUE_MB_VOLUME "Mockingboard Volume"
//#define REGVALUE_SOUND_EMULATION "Sound Emulation" // Deprecated from 1.31.1
#define REGVALUE_MASTER_VOLUME "Master volume"
#define REGVALUE_SPKR_VOLUME "Speaker Volume" // Deprecated from 1.31.1
#define REGVALUE_SAVESTATE_FILENAME "Save State Filename"
#define REGVALUE_SAVE_STATE_ON_EXIT "Save State On Exit"
#define REGVALUE_HDD_ENABLED "Harddisk Enable" // Deprecated from 1.30.5
+19 -4
View File
@@ -30,6 +30,7 @@ Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
#include "../Registry.h"
#include "../CardManager.h"
#include "../Interface.h"
#include "../Speaker.h"
#include "../resource/resource.h"
CPageConfig* CPageConfig::ms_this = 0; // reinit'd in ctor
@@ -167,10 +168,6 @@ INT_PTR CPageConfig::DlgProcInternal(HWND hWnd, UINT message, WPARAM wparam, LPA
} // switch( (LOWORD(wparam))
break; // WM_COMMAND
case WM_HSCROLL:
CheckRadioButton(hWnd, IDC_AUTHENTIC_SPEED, IDC_CUSTOM_SPEED, IDC_CUSTOM_SPEED); // FirstButton, LastButton, CheckButton
break;
case WM_INITDIALOG:
{
// Convert Apple2 type to menu item
@@ -208,6 +205,15 @@ INT_PTR CPageConfig::DlgProcInternal(HWND hWnd, UINT message, WPARAM wparam, LPA
CheckDlgButton(hWnd, IDC_CHECK_50HZ_VIDEO, (GetVideo().GetVideoRefreshRate() == VR_50HZ) ? BST_CHECKED : BST_UNCHECKED);
//
SendDlgItemMessage(hWnd, IDC_SLIDER_MASTER_VOLUME, TBM_SETRANGE, TRUE, MAKELONG(VOLUME_MIN, VOLUME_MAX));
SendDlgItemMessage(hWnd, IDC_SLIDER_MASTER_VOLUME, TBM_SETPAGESIZE, 0, 10);
SendDlgItemMessage(hWnd, IDC_SLIDER_MASTER_VOLUME, TBM_SETTICFREQ, 10, 0);
SendDlgItemMessage(hWnd, IDC_SLIDER_MASTER_VOLUME, TBM_SETPOS, TRUE, VOLUME_MAX - SpkrGetVolume()); // Invert: L=MIN, R=MAX
//
CheckDlgButton(hWnd, IDC_SCROLLLOCK_TOGGLE, m_uScrollLockToggle ? BST_CHECKED : BST_UNCHECKED);
SendDlgItemMessage(hWnd,IDC_SLIDER_CPU_SPEED,TBM_SETRANGE,TRUE,MAKELONG(0,40));
@@ -329,6 +335,15 @@ void CPageConfig::DlgOK(HWND hWnd)
//
// NB. Volume: 0=Loudest, VOLUME_MAX=Silence
const uint32_t masterVolume = VOLUME_MAX - (uint32_t)SendDlgItemMessage(hWnd, IDC_SLIDER_MASTER_VOLUME, TBM_GETPOS, 0, 0); // Invert: L=MIN, R=MAX
SpkrSetVolume(masterVolume, VOLUME_MAX);
GetCardMgr().GetMockingboardCardMgr().SetVolume(masterVolume, VOLUME_MAX);
REGSAVE(REGVALUE_MASTER_VOLUME, masterVolume);
//
const bool bNewEnhanceDisk = IsDlgButtonChecked(hWnd, IDC_ENHANCE_DISK_ENABLE) ? true : false;
if (bNewEnhanceDisk != GetCardMgr().GetDisk2CardMgr().GetEnhanceDisk())
{
+5
View File
@@ -23,6 +23,8 @@ public:
UINT GetScrollLockToggle(void) { return m_uScrollLockToggle; }
void SetScrollLockToggle(UINT uValue) { m_uScrollLockToggle = uValue; }
uint32_t GetVolumeMax(void) { return VOLUME_MAX; }
protected:
// IPropertySheetPage
virtual INT_PTR DlgProcInternal(HWND hWnd, UINT message, WPARAM wparam, LPARAM lparam);
@@ -39,6 +41,9 @@ private:
static CPageConfig* ms_this;
static const char m_ComputerChoices[];
static const UINT VOLUME_MIN = 0;
static const UINT VOLUME_MAX = 59;
const PAGETYPE m_Page;
CPropertySheetHelper& m_PropertySheetHelper;
UINT m_uScrollLockToggle;
-20
View File
@@ -32,11 +32,9 @@ Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
#include "../Harddisk.h"
#include "../Interface.h"
#include "../Memory.h"
#include "../Mockingboard.h"
#include "../ParallelPrinter.h"
#include "../Registry.h"
#include "../SerialComms.h"
#include "../Speaker.h"
#include "../resource/resource.h"
#include "../Uthernet2.h"
#include "../Tfe/PCapBackend.h"
@@ -96,12 +94,6 @@ INT_PTR CPageSound::DlgProcInternal(HWND hWnd, UINT message, WPARAM wparam, LPAR
case WM_COMMAND:
switch (LOWORD(wparam))
{
#if 0
case IDC_SPKR_VOLUME:
break;
case IDC_MB_VOLUME:
break;
#endif
case IDC_SLOT0:
case IDC_SLOT1:
case IDC_SLOT2:
@@ -223,18 +215,6 @@ INT_PTR CPageSound::DlgProcInternal(HWND hWnd, UINT message, WPARAM wparam, LPAR
void CPageSound::DlgOK(HWND hWnd)
{
uint32_t dwSoundType = REG_SOUNDTYPE_WAVE;
REGSAVE(REGVALUE_SOUND_EMULATION, dwSoundType);
// NB. Volume: 0=Loudest, VOLUME_MAX=Silence
const uint32_t dwSpkrVolume = 0;
SpkrSetVolume(dwSpkrVolume, VOLUME_MAX);
const uint32_t dwMBVolume = 0;
GetCardMgr().GetMockingboardCardMgr().SetVolume(dwMBVolume, VOLUME_MAX);
REGSAVE(REGVALUE_SPKR_VOLUME, SpkrGetVolume());
REGSAVE(REGVALUE_MB_VOLUME, GetCardMgr().GetMockingboardCardMgr().GetVolume());
m_PropertySheetHelper.PostMsgAfterClose(hWnd, m_Page);
}
-5
View File
@@ -28,8 +28,6 @@ public:
UINT GetMouseRestrictToWindow(void) { return m_mouseRestrictToWindow; }
void SetMouseRestrictToWindow(UINT uValue) { m_mouseRestrictToWindow = uValue; }
uint32_t GetVolumeMax(void){ return VOLUME_MAX; }
protected:
// IPropertySheetPage
virtual INT_PTR DlgProcInternal(HWND hWnd, UINT message, WPARAM wparam, LPARAM lparam);
@@ -78,9 +76,6 @@ private:
CPropertySheetHelper& m_PropertySheetHelper;
CPageConfigTfe m_PageConfigTfe;
static const UINT VOLUME_MIN = 0;
static const UINT VOLUME_MAX = 59;
static const char m_defaultDiskOptions[];
static const char m_defaultHDDOptions[];
+1 -1
View File
@@ -87,7 +87,7 @@ void CPropertySheet::Init(void)
uint32_t CPropertySheet::GetVolumeMax()
{
return m_PageSound.GetVolumeMax();
return m_PageConfig.GetVolumeMax();
}
// Called when F11/F12 is pressed
-3
View File
@@ -58,9 +58,6 @@ BYTE __stdcall SAMCard::IOWrite(WORD pc, WORD addr, BYTE bWrite, BYTE d, ULONG n
// with the SAM data. The mute gets reset after the speaker code detects
// silence.
if (soundtype != SOUND_WAVE)
return MemReadFloatingBus(nExecutedCycles);
// use existing speaker code to bring timing up to date
BYTE res = SpkrToggle(pc, addr, bWrite, d, nExecutedCycles);
+92 -136
View File
@@ -73,7 +73,6 @@ static UINT g_nRemainderBufferSize; // Setup in SpkrInitialize()
static UINT g_nRemainderBufferIdx; // Setup in SpkrInitialize()
// Application-wide globals:
SoundType_e soundtype = SOUND_WAVE;
double g_fClksPerSpkrSample; // Setup in SetClksPerSpkrSample()
// Allow temporary quietening of speaker (8 bit DAC)
@@ -110,7 +109,7 @@ UINT Spkr_GetNumChannels(void)
//=============================================================================
static void DisplayBenchmarkResults ()
static void DisplayBenchmarkResults()
{
uint32_t totaltime = GetTickCount()-extbench;
GetFrame().VideoRedrawScreen();
@@ -216,38 +215,24 @@ static void InitRemainderBuffer()
//=============================================================================
void SpkrDestroy ()
void SpkrDestroy()
{
Spkr_DSUninit();
//
if(soundtype == SOUND_WAVE)
{
delete [] g_pSpeakerBuffer;
delete [] g_pRemainderBuffer;
delete [] g_pSpeakerBuffer;
delete [] g_pRemainderBuffer;
g_pSpeakerBuffer = NULL;
g_pRemainderBuffer = NULL;
}
g_pSpeakerBuffer = NULL;
g_pRemainderBuffer = NULL;
}
//=============================================================================
void SpkrInitialize ()
void SpkrInitialize()
{
if(g_fh)
{
fprintf(g_fh, "Spkr Config: soundtype = %d ", (int) soundtype);
switch(soundtype)
{
case SOUND_NONE: fprintf(g_fh, "(NONE)\n"); break;
case SOUND_WAVE: fprintf(g_fh, "(WAVE)\n"); break;
default: fprintf(g_fh, "(UNDEFINED!)\n"); break;
}
}
if(g_bDisableDirectSound)
if (g_bDisableDirectSound)
{
SpeakerVoice.bMute = true;
LogFileOutput("SpkrInitialize: g_bDisableDirectSound=1... SpeakerVoice.bMute=true\n");
@@ -272,23 +257,17 @@ void SpkrInitialize ()
//
if (soundtype == SOUND_WAVE)
{
InitRemainderBuffer();
InitRemainderBuffer();
g_pSpeakerBuffer = new short [SPKR_SAMPLE_RATE * g_nSPKR_NumChannels]; // Buffer can hold a max of 1 seconds worth of samples
}
g_pSpeakerBuffer = new short[SPKR_SAMPLE_RATE * g_nSPKR_NumChannels]; // Buffer can hold a max of 1 seconds worth of samples
}
//=============================================================================
// NB. Called when /g_fCurrentCLK6502/ changes
void SpkrReinitialize ()
void SpkrReinitialize()
{
if (soundtype == SOUND_WAVE)
{
InitRemainderBuffer();
}
InitRemainderBuffer();
}
//=============================================================================
@@ -307,17 +286,6 @@ void SpkrReset()
//=============================================================================
void SpkrSetEmulationType (SoundType_e newtype)
{
SpkrDestroy(); // GH#295: Destroy for all types (even SOUND_NONE)
soundtype = newtype;
if (soundtype != SOUND_NONE)
SpkrInitialize();
}
//=============================================================================
static void ReinitRemainderBuffer(UINT nCyclesRemaining)
{
if(nCyclesRemaining == 0)
@@ -368,35 +336,35 @@ static void UpdateRemainderBuffer(ULONG* pnCycleDiff)
static void UpdateSpkr()
{
if(!g_bFullSpeed || SoundCore_GetTimerState())
{
ULONG nCycleDiff = (ULONG) (g_nCumulativeCycles - g_nSpkrLastCycle);
if (!g_bFullSpeed || SoundCore_GetTimerState())
{
ULONG nCycleDiff = (ULONG)(g_nCumulativeCycles - g_nSpkrLastCycle);
UpdateRemainderBuffer(&nCycleDiff);
UpdateRemainderBuffer(&nCycleDiff);
ULONG nNumSamples = (ULONG) ((double)nCycleDiff / g_fClksPerSpkrSample);
ULONG nNumSamples = (ULONG)((double)nCycleDiff / g_fClksPerSpkrSample);
ULONG nCyclesRemaining = (ULONG) ((double)nCycleDiff - (double)nNumSamples * g_fClksPerSpkrSample);
ULONG nCyclesRemaining = (ULONG)((double)nCycleDiff - (double)nNumSamples * g_fClksPerSpkrSample);
while ((nNumSamples--) && (g_nBufferIdx < SPKR_SAMPLE_RATE - 1))
{
if (g_nSPKR_NumChannels == 1)
{
g_pSpeakerBuffer[g_nBufferIdx] = DCFilter(g_nSpeakerData);
}
else
{
const short sample = DCFilter(g_nSpeakerData);
g_pSpeakerBuffer[g_nBufferIdx * 2 + 0] = sample;
g_pSpeakerBuffer[g_nBufferIdx * 2 + 1] = sample;
}
g_nBufferIdx++;
}
while ((nNumSamples--) && (g_nBufferIdx < SPKR_SAMPLE_RATE - 1))
{
if (g_nSPKR_NumChannels == 1)
{
g_pSpeakerBuffer[g_nBufferIdx] = DCFilter(g_nSpeakerData);
}
else
{
const short sample = DCFilter(g_nSpeakerData);
g_pSpeakerBuffer[g_nBufferIdx * 2 + 0] = sample;
g_pSpeakerBuffer[g_nBufferIdx * 2 + 1] = sample;
}
g_nBufferIdx++;
}
ReinitRemainderBuffer(nCyclesRemaining); // Partially fill 1Mhz sample buffer
}
ReinitRemainderBuffer(nCyclesRemaining); // Partially fill 1Mhz sample buffer
}
g_nSpkrLastCycle = g_nCumulativeCycles;
g_nSpkrLastCycle = g_nCumulativeCycles;
}
//=============================================================================
@@ -404,106 +372,94 @@ static void UpdateSpkr()
// Called by emulation code when Speaker I/O reg is accessed
//
BYTE __stdcall SpkrToggle (WORD, WORD, BYTE, BYTE, ULONG nExecutedCycles)
BYTE __stdcall SpkrToggle(WORD, WORD, BYTE, BYTE, ULONG nExecutedCycles)
{
g_bSpkrToggleFlag = true;
g_bSpkrToggleFlag = true;
if(!g_bFullSpeed)
Spkr_SetActive(true);
if (!g_bFullSpeed)
Spkr_SetActive(true);
//
if (extbench)
{
DisplayBenchmarkResults();
extbench = 0;
}
CpuCalcCycles(nExecutedCycles);
if (extbench)
{
DisplayBenchmarkResults();
extbench = 0;
}
UpdateSpkr();
if (soundtype == SOUND_WAVE)
{
CpuCalcCycles(nExecutedCycles);
short speakerDriveLevel = SPKR_DATA_INIT;
if (g_bQuieterSpeaker) // quieten the speaker if 8 bit DAC in use
speakerDriveLevel /= 4; // NB. Don't shift -ve number right: undefined behaviour (MSDN says: implementation-dependent)
UpdateSpkr();
// When full-speed: Don't ResetDCFilter(), otherwise get occasional clicks when speaker toggled
if (!g_bFullSpeed)
ResetDCFilter();
short speakerDriveLevel = SPKR_DATA_INIT;
if (g_bQuieterSpeaker) // quieten the speaker if 8 bit DAC in use
speakerDriveLevel /= 4; // NB. Don't shift -ve number right: undefined behaviour (MSDN says: implementation-dependent)
if (g_nSpeakerData == speakerDriveLevel)
g_nSpeakerData = ~speakerDriveLevel;
else
g_nSpeakerData = speakerDriveLevel;
// When full-speed: Don't ResetDCFilter(), otherwise get occasional clicks when speaker toggled
if (!g_bFullSpeed)
ResetDCFilter();
if (g_nSpeakerData == speakerDriveLevel)
g_nSpeakerData = ~speakerDriveLevel;
else
g_nSpeakerData = speakerDriveLevel;
}
return MemReadFloatingBus(nExecutedCycles);
return MemReadFloatingBus(nExecutedCycles);
}
//=============================================================================
// Called by ContinueExecution()
void SpkrUpdate (uint32_t totalcycles)
void SpkrUpdate(uint32_t totalcycles)
{
#ifdef LOG_PERF_TIMINGS
extern UINT64 g_timeSpeaker;
PerfMarker perfMarker(g_timeSpeaker);
#endif
if(!g_bSpkrToggleFlag)
{
if(!g_nSpkrQuietCycleCount)
{
g_nSpkrQuietCycleCount = g_nCumulativeCycles;
}
else if(g_nCumulativeCycles - g_nSpkrQuietCycleCount > (unsigned __int64)g_fCurrentCLK6502/5)
{
// After 0.2 sec of Apple time, deactivate spkr voice
// . This allows emulator to auto-switch to full-speed g_nAppMode for fast disk access
Spkr_SetActive(false);
}
}
else
{
g_nSpkrQuietCycleCount = 0;
g_bSpkrToggleFlag = false;
}
if (!g_bSpkrToggleFlag)
{
if (!g_nSpkrQuietCycleCount)
{
g_nSpkrQuietCycleCount = g_nCumulativeCycles;
}
else if (g_nCumulativeCycles - g_nSpkrQuietCycleCount > (unsigned __int64)g_fCurrentCLK6502 / 5)
{
// After 0.2 sec of Apple time, deactivate spkr voice
// . This allows emulator to auto-switch to full-speed g_nAppMode for fast disk access
Spkr_SetActive(false);
}
}
else
{
g_nSpkrQuietCycleCount = 0;
g_bSpkrToggleFlag = false;
}
//
//
if (soundtype == SOUND_WAVE)
{
UpdateSpkr();
ULONG nSamplesUsed;
UpdateSpkr();
ULONG nSamplesUsed;
if(g_bFullSpeed)
nSamplesUsed = Spkr_SubmitWaveBuffer_FullSpeed(g_pSpeakerBuffer, g_nBufferIdx);
else
nSamplesUsed = Spkr_SubmitWaveBuffer(g_pSpeakerBuffer, g_nBufferIdx);
if (g_bFullSpeed)
nSamplesUsed = Spkr_SubmitWaveBuffer_FullSpeed(g_pSpeakerBuffer, g_nBufferIdx);
else
nSamplesUsed = Spkr_SubmitWaveBuffer(g_pSpeakerBuffer, g_nBufferIdx);
_ASSERT(nSamplesUsed <= g_nBufferIdx);
memmove(g_pSpeakerBuffer, &g_pSpeakerBuffer[nSamplesUsed], (g_nBufferIdx - nSamplesUsed) * sizeof(short) * g_nSPKR_NumChannels);
g_nBufferIdx -= nSamplesUsed;
}
_ASSERT(nSamplesUsed <= g_nBufferIdx);
memmove(g_pSpeakerBuffer, &g_pSpeakerBuffer[nSamplesUsed], (g_nBufferIdx - nSamplesUsed) * sizeof(short) * g_nSPKR_NumChannels);
g_nBufferIdx -= nSamplesUsed;
}
// Called from SoundCore_TimerFunc() for FADE_OUT
void SpkrUpdate_Timer()
{
if (soundtype == SOUND_WAVE)
{
UpdateSpkr();
ULONG nSamplesUsed;
UpdateSpkr();
ULONG nSamplesUsed;
nSamplesUsed = Spkr_SubmitWaveBuffer_FullSpeed(g_pSpeakerBuffer, g_nBufferIdx);
nSamplesUsed = Spkr_SubmitWaveBuffer_FullSpeed(g_pSpeakerBuffer, g_nBufferIdx);
_ASSERT(nSamplesUsed <= g_nBufferIdx);
memmove(g_pSpeakerBuffer, &g_pSpeakerBuffer[nSamplesUsed], (g_nBufferIdx - nSamplesUsed) * sizeof(short) * g_nSPKR_NumChannels);
g_nBufferIdx -= nSamplesUsed;
}
_ASSERT(nSamplesUsed <= g_nBufferIdx);
memmove(g_pSpeakerBuffer, &g_pSpeakerBuffer[nSamplesUsed], (g_nBufferIdx - nSamplesUsed) * sizeof(short) * g_nSPKR_NumChannels);
g_nBufferIdx -= nSamplesUsed;
}
//=============================================================================
-14
View File
@@ -1,18 +1,5 @@
#pragma once
// Registry soundtype:
#define REG_SOUNDTYPE_NONE 0
#define REG_SOUNDTYPE_DIRECT 1 // Not supported from 1.26
#define REG_SOUNDTYPE_SMART 2 // Not supported from 1.26
#define REG_SOUNDTYPE_WAVE 3
enum SoundType_e
{
SOUND_NONE = 0,
SOUND_WAVE
};
extern SoundType_e soundtype;
extern double g_fClksPerSpkrSample;
extern bool g_bQuieterSpeaker;
extern short g_nSpeakerData;
@@ -21,7 +8,6 @@ void SpkrDestroy ();
void SpkrInitialize ();
void SpkrReinitialize ();
void SpkrReset();
void SpkrSetEmulationType (SoundType_e newSoundType);
void SpkrUpdate (uint32_t);
void SpkrUpdate_Timer();
uint32_t SpkrGetVolume();
+4 -18
View File
@@ -171,21 +171,6 @@ void LoadConfiguration(bool loadImages)
else
SetCopyProtectionDongleType(DT_EMPTY);
uint32_t dwSoundType;
REGLOAD_DEFAULT(REGVALUE_SOUND_EMULATION, &dwSoundType, REG_SOUNDTYPE_WAVE);
switch (dwSoundType)
{
case REG_SOUNDTYPE_NONE:
case REG_SOUNDTYPE_DIRECT: // Not supported from 1.26
case REG_SOUNDTYPE_SMART: // Not supported from 1.26
default:
soundtype = SOUND_NONE;
break;
case REG_SOUNDTYPE_WAVE:
soundtype = SOUND_WAVE;
break;
}
REGLOAD_DEFAULT(REGVALUE_EMULATION_SPEED, &g_dwSpeed, SPEED_NORMAL);
GetVideo().Config_Load_Video();
SetCurrentCLK6502(); // Pre: g_dwSpeed && Config_Load_Video()->SetVideoRefreshRate()
@@ -294,11 +279,12 @@ void LoadConfiguration(bool loadImages)
}
}
if(REGLOAD(REGVALUE_SPKR_VOLUME, &dwTmp))
if (REGLOAD(REGVALUE_MASTER_VOLUME, &dwTmp) || // Try MASTER_VOLUME
REGLOAD(REGVALUE_SPKR_VOLUME, &dwTmp)) // ...else try older SPKR_VOLUME
{
SpkrSetVolume(dwTmp, GetPropertySheet().GetVolumeMax());
if(REGLOAD(REGVALUE_MB_VOLUME, &dwTmp))
GetCardMgr().GetMockingboardCardMgr().SetVolume(dwTmp, GetPropertySheet().GetVolumeMax());
}
// Load save-state pathname *before* inserting any harddisk/disk images (for both init & reinit cases)
// NB. inserting harddisk/disk can change snapshot pathname