mirror of
https://github.com/AppleWin/AppleWin.git
synced 2026-04-20 15:17:50 +00:00
Config PSP: add 'Master Volume' control; Speaker.cpp: remove 'soundtype' var; Registry remove 'Sound Emulation'
This commit is contained in:
@@ -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
@@ -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
@@ -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
|
||||
|
||||
@@ -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())
|
||||
{
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
|
||||
|
||||
@@ -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[];
|
||||
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
@@ -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;
|
||||
}
|
||||
|
||||
//=============================================================================
|
||||
|
||||
@@ -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
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user