Audio codepaths now always enabled

- Supported platforms:
        - Mac/iOS (OpenAL)
        - Desktop Linux/POSIX (OpenAL)
        - Android (OpenSLES)
    - TODO : for POSIX builds we should provide our own "null" audio backend if OpenAL/OpenSL not found by build script
This commit is contained in:
Aaron Culliney 2016-07-23 11:44:49 -07:00
parent 06f8015959
commit cc9a164bec
7 changed files with 18 additions and 90 deletions

View File

@ -40,7 +40,7 @@ APPLE2_MAIN_SRC = \
jnihooks.c androidkeys.c jnihooks.c androidkeys.c
APPLE2_OPTIM_CFLAGS := -Os APPLE2_OPTIM_CFLAGS := -Os
APPLE2_BASE_CFLAGS := -DAPPLE2IX=1 -DINTERFACE_TOUCH=1 -DMOBILE_DEVICE=1 -DVIDEO_OPENGL=1 -DDEBUGGER=1 -DAUDIO_ENABLED=1 -std=gnu11 -fPIC $(APPLE2_OPTIM_CFLAGS) -I$(APPLE2_SRC_PATH) APPLE2_BASE_CFLAGS := -DAPPLE2IX=1 -DINTERFACE_TOUCH=1 -DMOBILE_DEVICE=1 -DVIDEO_OPENGL=1 -DDEBUGGER=1 -std=gnu11 -fPIC $(APPLE2_OPTIM_CFLAGS) -I$(APPLE2_SRC_PATH)
APPLE2_BASE_LDLIBS := -Wl,-z,text -Wl,-z,noexecstack -llog -landroid -lGLESv2 -lz -lOpenSLES -latomic APPLE2_BASE_LDLIBS := -Wl,-z,text -Wl,-z,noexecstack -llog -landroid -lGLESv2 -lz -lOpenSLES -latomic
LOCAL_WHOLE_STATIC_LIBRARIES += cpufeatures LOCAL_WHOLE_STATIC_LIBRARIES += cpufeatures

View File

@ -2777,7 +2777,6 @@
"TESTING=1", "TESTING=1",
"TEST_CPU=1", "TEST_CPU=1",
"VIDEO_OPENGL=1", "VIDEO_OPENGL=1",
"AUDIO_ENABLED=1",
); );
INFOPLIST_FILE = "$(SRCROOT)/Apple2MacTests/Apple2iOSTestCPU-Info.plist"; INFOPLIST_FILE = "$(SRCROOT)/Apple2MacTests/Apple2iOSTestCPU-Info.plist";
IPHONEOS_DEPLOYMENT_TARGET = 8.0; IPHONEOS_DEPLOYMENT_TARGET = 8.0;
@ -2815,7 +2814,6 @@
"TESTING=1", "TESTING=1",
"TEST_CPU=1", "TEST_CPU=1",
"VIDEO_OPENGL=1", "VIDEO_OPENGL=1",
"AUDIO_ENABLED=1",
"NDEBUG=1", "NDEBUG=1",
); );
INFOPLIST_FILE = "$(SRCROOT)/Apple2MacTests/Apple2iOSTestCPU-Info.plist"; INFOPLIST_FILE = "$(SRCROOT)/Apple2MacTests/Apple2iOSTestCPU-Info.plist";
@ -2856,7 +2854,6 @@
"TESTING=1", "TESTING=1",
"TEST_VM=1", "TEST_VM=1",
"VIDEO_OPENGL=1", "VIDEO_OPENGL=1",
"AUDIO_ENABLED=1",
); );
INFOPLIST_FILE = "$(SRCROOT)/Apple2MacTests/Apple2iOSTestVM-Info.plist"; INFOPLIST_FILE = "$(SRCROOT)/Apple2MacTests/Apple2iOSTestVM-Info.plist";
IPHONEOS_DEPLOYMENT_TARGET = 8.0; IPHONEOS_DEPLOYMENT_TARGET = 8.0;
@ -2894,7 +2891,6 @@
"TESTING=1", "TESTING=1",
"TEST_VM=1", "TEST_VM=1",
"VIDEO_OPENGL=1", "VIDEO_OPENGL=1",
"AUDIO_ENABLED=1",
"NDEBUG=1", "NDEBUG=1",
); );
INFOPLIST_FILE = "$(SRCROOT)/Apple2MacTests/Apple2iOSTestVM-Info.plist"; INFOPLIST_FILE = "$(SRCROOT)/Apple2MacTests/Apple2iOSTestVM-Info.plist";
@ -2938,7 +2934,6 @@
"DISK_TRACING=1", "DISK_TRACING=1",
"VM_TRACING=1", "VM_TRACING=1",
"VIDEO_OPENGL=1", "VIDEO_OPENGL=1",
"AUDIO_ENABLED=1",
); );
INFOPLIST_FILE = "$(SRCROOT)/Apple2MacTests/Apple2iOSTestDisk-Info.plist"; INFOPLIST_FILE = "$(SRCROOT)/Apple2MacTests/Apple2iOSTestDisk-Info.plist";
IPHONEOS_DEPLOYMENT_TARGET = 8.0; IPHONEOS_DEPLOYMENT_TARGET = 8.0;
@ -2979,7 +2974,6 @@
"DISK_TRACING=1", "DISK_TRACING=1",
"VM_TRACING=1", "VM_TRACING=1",
"VIDEO_OPENGL=1", "VIDEO_OPENGL=1",
"AUDIO_ENABLED=1",
"NDEBUG=1", "NDEBUG=1",
); );
INFOPLIST_FILE = "$(SRCROOT)/Apple2MacTests/Apple2iOSTestDisk-Info.plist"; INFOPLIST_FILE = "$(SRCROOT)/Apple2MacTests/Apple2iOSTestDisk-Info.plist";
@ -3020,7 +3014,6 @@
"TESTING=1", "TESTING=1",
"TEST_DISPLAY=1", "TEST_DISPLAY=1",
"VIDEO_OPENGL=1", "VIDEO_OPENGL=1",
"AUDIO_ENABLED=1",
); );
INFOPLIST_FILE = "$(SRCROOT)/Apple2MacTests/Apple2iOSTestDisplay-Info.plist"; INFOPLIST_FILE = "$(SRCROOT)/Apple2MacTests/Apple2iOSTestDisplay-Info.plist";
IPHONEOS_DEPLOYMENT_TARGET = 8.0; IPHONEOS_DEPLOYMENT_TARGET = 8.0;
@ -3058,7 +3051,6 @@
"TESTING=1", "TESTING=1",
"TEST_DISPLAY=1", "TEST_DISPLAY=1",
"VIDEO_OPENGL=1", "VIDEO_OPENGL=1",
"AUDIO_ENABLED=1",
"NDEBUG=1", "NDEBUG=1",
); );
INFOPLIST_FILE = "$(SRCROOT)/Apple2MacTests/Apple2iOSTestDisplay-Info.plist"; INFOPLIST_FILE = "$(SRCROOT)/Apple2MacTests/Apple2iOSTestDisplay-Info.plist";
@ -3096,7 +3088,6 @@
"DISK_TRACING=1", "DISK_TRACING=1",
"VM_TRACING=1", "VM_TRACING=1",
"VIDEO_OPENGL=1", "VIDEO_OPENGL=1",
"AUDIO_ENABLED=1",
); );
HEADER_SEARCH_PATHS = ( HEADER_SEARCH_PATHS = (
"$(inherited)", "$(inherited)",
@ -3129,7 +3120,6 @@
"DISK_TRACING=1", "DISK_TRACING=1",
"VM_TRACING=1", "VM_TRACING=1",
"VIDEO_OPENGL=1", "VIDEO_OPENGL=1",
"AUDIO_ENABLED=1",
"NDEBUG=1", "NDEBUG=1",
); );
HEADER_SEARCH_PATHS = ( HEADER_SEARCH_PATHS = (
@ -3160,7 +3150,6 @@
"TEST_VM=1", "TEST_VM=1",
"TESTING=1", "TESTING=1",
"VIDEO_OPENGL=1", "VIDEO_OPENGL=1",
"AUDIO_ENABLED=1",
); );
HEADER_SEARCH_PATHS = ( HEADER_SEARCH_PATHS = (
"$(inherited)", "$(inherited)",
@ -3190,7 +3179,6 @@
"TEST_VM=1", "TEST_VM=1",
"TESTING=1", "TESTING=1",
"VIDEO_OPENGL=1", "VIDEO_OPENGL=1",
"AUDIO_ENABLED=1",
"NDEBUG=1", "NDEBUG=1",
); );
HEADER_SEARCH_PATHS = ( HEADER_SEARCH_PATHS = (
@ -3330,7 +3318,6 @@
"APPLE2IX=1", "APPLE2IX=1",
"DEBUGGER=1", "DEBUGGER=1",
"KEYPAD_JOYSTICK=1", "KEYPAD_JOYSTICK=1",
"AUDIO_ENABLED=1",
"VIDEO_OPENGL=1", "VIDEO_OPENGL=1",
); );
HEADER_SEARCH_PATHS = ( HEADER_SEARCH_PATHS = (
@ -3360,7 +3347,6 @@
"APPLE2IX=1", "APPLE2IX=1",
"DEBUGGER=1", "DEBUGGER=1",
"KEYPAD_JOYSTICK=1", "KEYPAD_JOYSTICK=1",
"AUDIO_ENABLED=1",
"VIDEO_OPENGL=1", "VIDEO_OPENGL=1",
"NDEBUG=1", "NDEBUG=1",
); );
@ -3394,7 +3380,6 @@
"TEST_CPU=1", "TEST_CPU=1",
"TESTING=1", "TESTING=1",
"VIDEO_OPENGL=1", "VIDEO_OPENGL=1",
"AUDIO_ENABLED=1",
); );
HEADER_SEARCH_PATHS = ( HEADER_SEARCH_PATHS = (
"$(inherited)", "$(inherited)",
@ -3424,7 +3409,6 @@
"TEST_CPU=1", "TEST_CPU=1",
"TESTING=1", "TESTING=1",
"VIDEO_OPENGL=1", "VIDEO_OPENGL=1",
"AUDIO_ENABLED=1",
"NDEBUG=1", "NDEBUG=1",
); );
HEADER_SEARCH_PATHS = ( HEADER_SEARCH_PATHS = (
@ -3455,7 +3439,6 @@
"TESTING=1", "TESTING=1",
"TEST_DISPLAY=1", "TEST_DISPLAY=1",
"VIDEO_OPENGL=1", "VIDEO_OPENGL=1",
"AUDIO_ENABLED=1",
); );
HEADER_SEARCH_PATHS = ( HEADER_SEARCH_PATHS = (
"$(inherited)", "$(inherited)",
@ -3485,7 +3468,6 @@
"TESTING=1", "TESTING=1",
"TEST_DISPLAY=1", "TEST_DISPLAY=1",
"VIDEO_OPENGL=1", "VIDEO_OPENGL=1",
"AUDIO_ENABLED=1",
"NDEBUG=1", "NDEBUG=1",
); );
HEADER_SEARCH_PATHS = ( HEADER_SEARCH_PATHS = (
@ -3520,7 +3502,6 @@
"MOBILE_DEVICE=1", "MOBILE_DEVICE=1",
"DEBUGGER=1", "DEBUGGER=1",
"VIDEO_OPENGL=1", "VIDEO_OPENGL=1",
"AUDIO_ENABLED=1",
); );
INFOPLIST_FILE = "$(SRCROOT)/Apple2iOS/Apple2iOS-Info.plist"; INFOPLIST_FILE = "$(SRCROOT)/Apple2iOS/Apple2iOS-Info.plist";
IPHONEOS_DEPLOYMENT_TARGET = 8.0; IPHONEOS_DEPLOYMENT_TARGET = 8.0;
@ -3556,7 +3537,6 @@
"MOBILE_DEVICE=1", "MOBILE_DEVICE=1",
"DEBUGGER=1", "DEBUGGER=1",
"VIDEO_OPENGL=1", "VIDEO_OPENGL=1",
"AUDIO_ENABLED=1",
"NDEBUG=1", "NDEBUG=1",
); );
INFOPLIST_FILE = "$(SRCROOT)/Apple2iOS/Apple2iOS-Info.plist"; INFOPLIST_FILE = "$(SRCROOT)/Apple2iOS/Apple2iOS-Info.plist";

View File

@ -256,7 +256,6 @@ AC_ARG_ENABLE([audio], AS_HELP_STRING([--disable-audio], [Disable emulator audio
AC_SEARCH_LIBS(alcOpenDevice, openal, [ AC_SEARCH_LIBS(alcOpenDevice, openal, [
dnl found OpenAL ... dnl found OpenAL ...
openal_supported='yes' openal_supported='yes'
AC_DEFINE(AUDIO_ENABLED, 1, [Enable sound module])
AUDIO_GLUE_C="src/audio/speaker.c src/audio/mockingboard.c src/audio/playqueue.c" AUDIO_GLUE_C="src/audio/speaker.c src/audio/mockingboard.c src/audio/playqueue.c"
AUDIO_O="src/audio/soundcore.o src/audio/soundcore-openal.o src/audio/speaker.o src/audio/playqueue.o src/audio/alhelpers.o src/audio/mockingboard.o src/audio/AY8910.o" AUDIO_O="src/audio/soundcore.o src/audio/soundcore-openal.o src/audio/speaker.o src/audio/playqueue.o src/audio/alhelpers.o src/audio/mockingboard.o src/audio/AY8910.o"
dnl HACK there's gotta be a better way ... without this verbosity, CFLAGS are not correct (lacking -DTESTING=1 , etc) if we don't specify specific obj files for test binaries dnl HACK there's gotta be a better way ... without this verbosity, CFLAGS are not correct (lacking -DTESTING=1 , etc) if we don't specify specific obj files for test binaries
@ -267,19 +266,19 @@ AC_ARG_ENABLE([audio], AS_HELP_STRING([--disable-audio], [Disable emulator audio
testtrace_AUDIO_O="src/audio/testtrace-soundcore.o src/audio/testtrace-soundcore-openal.o src/audio/testtrace-speaker.o src/audio/testtrace-playqueue.o src/audio/testtrace-alhelpers.o src/audio/testtrace-mockingboard.o src/audio/testtrace-AY8910.o" testtrace_AUDIO_O="src/audio/testtrace-soundcore.o src/audio/testtrace-soundcore-openal.o src/audio/testtrace-speaker.o src/audio/testtrace-playqueue.o src/audio/testtrace-alhelpers.o src/audio/testtrace-mockingboard.o src/audio/testtrace-AY8910.o"
testvm_AUDIO_O="src/audio/testvm-soundcore.o src/audio/testvm-soundcore-openal.o src/audio/testvm-speaker.o src/audio/testvm-playqueue.o src/audio/testvm-alhelpers.o src/audio/testvm-mockingboard.o src/audio/testvm-AY8910.o" testvm_AUDIO_O="src/audio/testvm-soundcore.o src/audio/testvm-soundcore-openal.o src/audio/testvm-speaker.o src/audio/testvm-playqueue.o src/audio/testvm-alhelpers.o src/audio/testvm-mockingboard.o src/audio/testvm-AY8910.o"
], [ ], [
AC_MSG_WARN([Could not find OpenAL libraries, sound will be disabled]) AC_MSG_ERROR([Could not find OpenAL libraries ... todo fixme ... implement a null sound backend])
], []) ], [])
], [ ], [
AC_MSG_WARN([Could not find OpenAL headers, sound will be disabled]) AC_MSG_ERROR([Could not find OpenAL headers ... todo fixme ... implement a null sound backend])
], [ ], [
#include <AL/al.h> #include <AL/al.h>
#include <AL/alc.h> #include <AL/alc.h>
]) ])
], [ ], [
AC_MSG_WARN([Could not find OpenAL headers, sound will be disabled]) AC_MSG_ERROR([Could not find OpenAL headers ... todo fixme ... implement a null sound backend])
]) ])
], [ ], [
AC_MSG_WARN([Could not find OpenAL headers, sound will be disabled]) AC_MSG_ERROR([Could not find OpenAL headers ... todo fixme ... implement a null sound backend])
]) ])
]) ])
AC_SUBST(AUDIO_GLUE_C) AC_SUBST(AUDIO_GLUE_C)

View File

@ -104,15 +104,11 @@ static inline GLenum safeGLGetError(void) {
#define glGetError() 0 #define glGetError() 0
#endif #endif
#ifdef DEBUGGER
#include "meta/debug.h" #include "meta/debug.h"
#endif
#ifdef AUDIO_ENABLED
#include "audio/soundcore.h" #include "audio/soundcore.h"
#include "audio/speaker.h" #include "audio/speaker.h"
#include "audio/mockingboard.h" #include "audio/mockingboard.h"
#endif
#ifdef ANDROID #ifdef ANDROID
# include "../Android/jni/android_globals.h" # include "../Android/jni/android_globals.h"

View File

@ -71,11 +71,9 @@ bool alt_speed_enabled = false;
// misc // misc
volatile uint8_t emul_reinitialize = 1; volatile uint8_t emul_reinitialize = 1;
#ifdef AUDIO_ENABLED
static bool emul_reinitialize_audio = false; static bool emul_reinitialize_audio = false;
static bool emul_pause_audio = false; static bool emul_pause_audio = false;
static bool emul_resume_audio = false; static bool emul_resume_audio = false;
#endif
static bool cpu_shutting_down = false; static bool cpu_shutting_down = false;
pthread_t cpu_thread_id = 0; pthread_t cpu_thread_id = 0;
pthread_mutex_t interface_mutex = PTHREAD_MUTEX_INITIALIZER; pthread_mutex_t interface_mutex = PTHREAD_MUTEX_INITIALIZER;
@ -136,10 +134,8 @@ static void _timing_initialize(double scale) {
if (!is_fullspeed) { if (!is_fullspeed) {
cycles_persec_target = CLK_6502 * scale; cycles_persec_target = CLK_6502 * scale;
} }
#ifdef AUDIO_ENABLED
speaker_reset(); speaker_reset();
//TIMING_LOG("ClockRate:%0.2lf ClockCyclesPerSpeakerSample:%0.2lf", cycles_persec_target, speaker_cyclesPerSample()); //TIMING_LOG("ClockRate:%0.2lf ClockCyclesPerSpeakerSample:%0.2lf", cycles_persec_target, speaker_cyclesPerSample());
#endif
} }
#if !TESTING #if !TESTING
@ -162,9 +158,7 @@ void reinitialize(void) {
timing_initialize(); timing_initialize();
#ifdef AUDIO_ENABLED
MB_Reset(); MB_Reset();
#endif
} }
void timing_initialize(void) { void timing_initialize(void) {
@ -184,8 +178,7 @@ void timing_toggleCPUSpeed(void) {
timing_initialize(); timing_initialize();
} }
#ifdef AUDIO_ENABLED static void timing_reinitializeAudio(void) {
void timing_reinitializeAudio(void) {
SPINLOCK_ACQUIRE(&_pause_spinLock); SPINLOCK_ACQUIRE(&_pause_spinLock);
assert(pthread_self() != cpu_thread_id); assert(pthread_self() != cpu_thread_id);
#if !TESTING #if !TESTING
@ -196,7 +189,6 @@ void timing_reinitializeAudio(void) {
emul_resume_audio = false; emul_resume_audio = false;
SPINLOCK_RELINQUISH(&_pause_spinLock); SPINLOCK_RELINQUISH(&_pause_spinLock);
} }
#endif
void cpu_pause(void) { void cpu_pause(void) {
assert(pthread_self() != cpu_thread_id); assert(pthread_self() != cpu_thread_id);
@ -209,11 +201,9 @@ void cpu_pause(void) {
// CPU thread will be paused when it next tries to acquire interface_mutex // CPU thread will be paused when it next tries to acquire interface_mutex
LOG("PAUSING CPU..."); LOG("PAUSING CPU...");
#ifdef AUDIO_ENABLED
if (!emul_reinitialize_audio) { if (!emul_reinitialize_audio) {
emul_pause_audio = true; emul_pause_audio = true;
} }
#endif
pthread_mutex_lock(&interface_mutex); pthread_mutex_lock(&interface_mutex);
is_paused = true; is_paused = true;
} while (0); } while (0);
@ -230,11 +220,9 @@ void cpu_resume(void) {
} }
// CPU thread will be unblocked to acquire interface_mutex // CPU thread will be unblocked to acquire interface_mutex
#ifdef AUDIO_ENABLED
if (!emul_reinitialize_audio) { if (!emul_reinitialize_audio) {
emul_resume_audio = true; emul_resume_audio = true;
} }
#endif
LOG("RESUMING CPU..."); LOG("RESUMING CPU...");
pthread_mutex_unlock(&interface_mutex); pthread_mutex_unlock(&interface_mutex);
is_paused = false; is_paused = false;
@ -279,15 +267,12 @@ static void *cpu_thread(void *dummyptr) {
unsigned long dbg_cycles_executed = 0; unsigned long dbg_cycles_executed = 0;
#endif #endif
#ifdef AUDIO_ENABLED
audio_init(); audio_init();
speaker_init(); speaker_init();
MB_Initialize(); MB_Initialize();
#endif
do do
{ {
#ifdef AUDIO_ENABLED
LOG("CPUTHREAD %lu LOCKING FOR MAYBE INITIALIZING AUDIO ...", cpu_thread_id); LOG("CPUTHREAD %lu LOCKING FOR MAYBE INITIALIZING AUDIO ...", cpu_thread_id);
pthread_mutex_lock(&interface_mutex); pthread_mutex_lock(&interface_mutex);
if (emul_reinitialize_audio) { if (emul_reinitialize_audio) {
@ -305,7 +290,6 @@ static void *cpu_thread(void *dummyptr) {
} }
pthread_mutex_unlock(&interface_mutex); pthread_mutex_unlock(&interface_mutex);
LOG("UNLOCKING FOR MAYBE INITIALIZING AUDIO ..."); LOG("UNLOCKING FOR MAYBE INITIALIZING AUDIO ...");
#endif
if (emul_reinitialize) { if (emul_reinitialize) {
reinitialize(); reinitialize();
@ -323,19 +307,15 @@ static void *cpu_thread(void *dummyptr) {
do { do {
SCOPE_TRACE_CPU("CPU mainloop"); SCOPE_TRACE_CPU("CPU mainloop");
// -LOCK----------------------------------------------------------------------------------------- SAMPLE ti // -LOCK----------------------------------------------------------------------------------------- SAMPLE ti
#ifdef AUDIO_ENABLED
if (UNLIKELY(emul_pause_audio)) { if (UNLIKELY(emul_pause_audio)) {
emul_pause_audio = false; emul_pause_audio = false;
audio_pause(); audio_pause();
} }
#endif
pthread_mutex_lock(&interface_mutex); pthread_mutex_lock(&interface_mutex);
#ifdef AUDIO_ENABLED
if (UNLIKELY(emul_resume_audio)) { if (UNLIKELY(emul_resume_audio)) {
emul_resume_audio = false; emul_resume_audio = false;
audio_resume(); audio_resume();
} }
#endif
clock_gettime(CLOCK_MONOTONIC, &ti); clock_gettime(CLOCK_MONOTONIC, &ti);
deltat = timespec_diff(t0, ti, &negative); deltat = timespec_diff(t0, ti, &negative);
@ -360,9 +340,7 @@ static void *cpu_thread(void *dummyptr) {
cpu65_cycles_to_execute = 0; cpu65_cycles_to_execute = 0;
} }
#ifdef AUDIO_ENABLED
MB_StartOfCpuExecute(); MB_StartOfCpuExecute();
#endif
if (is_debugging) { if (is_debugging) {
debugging_cycles0 = cpu65_cycles_to_execute; debugging_cycles0 = cpu65_cycles_to_execute;
debugging_cycles = cpu65_cycles_to_execute; debugging_cycles = cpu65_cycles_to_execute;
@ -402,21 +380,15 @@ static void *cpu_thread(void *dummyptr) {
#endif #endif
g_dwCyclesThisFrame += cpu65_cycle_count; g_dwCyclesThisFrame += cpu65_cycle_count;
#ifdef AUDIO_ENABLED
MB_UpdateCycles(); // update 6522s (NOTE: do this before updating cycles_count_total) MB_UpdateCycles(); // update 6522s (NOTE: do this before updating cycles_count_total)
#endif
timing_checkpoint_cycles(); timing_checkpoint_cycles();
#ifdef AUDIO_ENABLED
speaker_flush(); // play audio speaker_flush(); // play audio
#endif
if (g_dwCyclesThisFrame >= dwClksPerFrame) { if (g_dwCyclesThisFrame >= dwClksPerFrame) {
g_dwCyclesThisFrame -= dwClksPerFrame; g_dwCyclesThisFrame -= dwClksPerFrame;
#ifdef AUDIO_ENABLED
MB_EndOfVideoFrame(); MB_EndOfVideoFrame();
#endif
} }
clock_gettime(CLOCK_MONOTONIC, &tj); clock_gettime(CLOCK_MONOTONIC, &tj);
@ -428,9 +400,7 @@ static void *cpu_thread(void *dummyptr) {
disk_motor_time = timespec_diff(disk6.motor_time, tj, &negative); disk_motor_time = timespec_diff(disk6.motor_time, tj, &negative);
assert(!negative); assert(!negative);
if (!is_fullspeed && if (!is_fullspeed &&
#ifdef AUDIO_ENABLED
!speaker_isActive() && !speaker_isActive() &&
#endif
!video_isDirty(A2_DIRTY_FLAG) && (!disk6.motor_off && (disk_motor_time.tv_sec || disk_motor_time.tv_nsec > DISK_MOTOR_QUIET_NSECS)) ) !video_isDirty(A2_DIRTY_FLAG) && (!disk6.motor_off && (disk_motor_time.tv_sec || disk_motor_time.tv_nsec > DISK_MOTOR_QUIET_NSECS)) )
{ {
TIMING_LOG("auto switching to full speed"); TIMING_LOG("auto switching to full speed");
@ -503,9 +473,7 @@ static void *cpu_thread(void *dummyptr) {
#if !MOBILE_DEVICE #if !MOBILE_DEVICE
if (timing_shouldAutoAdjustSpeed()) { if (timing_shouldAutoAdjustSpeed()) {
if (is_fullspeed && ( if (is_fullspeed && (
#ifdef AUDIO_ENABLED
speaker_isActive() || speaker_isActive() ||
#endif
video_isDirty(A2_DIRTY_FLAG) || (disk6.motor_off && (disk_motor_time.tv_sec || disk_motor_time.tv_nsec > DISK_MOTOR_QUIET_NSECS))) ) video_isDirty(A2_DIRTY_FLAG) || (disk6.motor_off && (disk_motor_time.tv_sec || disk_motor_time.tv_nsec > DISK_MOTOR_QUIET_NSECS))) )
{ {
double speed = alt_speed_enabled ? cpu_altscale_factor : cpu_scale_factor; double speed = alt_speed_enabled ? cpu_altscale_factor : cpu_scale_factor;
@ -521,11 +489,9 @@ static void *cpu_thread(void *dummyptr) {
break; break;
} }
#ifdef AUDIO_ENABLED
if (UNLIKELY(emul_reinitialize_audio)) { if (UNLIKELY(emul_reinitialize_audio)) {
break; break;
} }
#endif
if (UNLIKELY(cpu_shutting_down)) { if (UNLIKELY(cpu_shutting_down)) {
break; break;
@ -537,11 +503,9 @@ static void *cpu_thread(void *dummyptr) {
} }
} while (1); } while (1);
#ifdef AUDIO_ENABLED
speaker_destroy(); speaker_destroy();
MB_Destroy(); MB_Destroy();
audio_shutdown(); audio_shutdown();
#endif
return NULL; return NULL;
} }
@ -613,7 +577,6 @@ static void vm_prefsChanged(const char *domain) {
if (cpu_altscale_factor > CPU_SCALE_FASTEST_PIVOT) { if (cpu_altscale_factor > CPU_SCALE_FASTEST_PIVOT) {
cpu_altscale_factor = CPU_SCALE_FASTEST; cpu_altscale_factor = CPU_SCALE_FASTEST;
} }
#ifdef AUDIO_ENABLED
static float audioLatency = 0.f; static float audioLatency = 0.f;
float latency = prefs_parseFloatValue(PREF_DOMAIN_AUDIO, PREF_AUDIO_LATENCY, &fVal) ? fVal : 0.25f; float latency = prefs_parseFloatValue(PREF_DOMAIN_AUDIO, PREF_AUDIO_LATENCY, &fVal) ? fVal : 0.25f;
@ -632,7 +595,6 @@ static void vm_prefsChanged(const char *domain) {
MB_SetEnabled(enabled); MB_SetEnabled(enabled);
timing_reinitializeAudio(); timing_reinitializeAudio();
} }
#endif
} }
static __attribute__((constructor)) void _init_vm(void) { static __attribute__((constructor)) void _init_vm(void) {

View File

@ -95,13 +95,6 @@ bool timing_shouldAutoAdjustSpeed(void);
*/ */
void timing_initialize(void); void timing_initialize(void);
#ifdef AUDIO_ENABLED
/*
* force audio reinitialization
*/
void timing_reinitializeAudio(void);
#endif
/* /*
* Pause timing/CPU thread. * Pause timing/CPU thread.
* *

View File

@ -872,14 +872,15 @@ GLUE_C_READ(iie_cxrom_peripheral)
{ {
softswitches &= ~SS_CXROM; softswitches &= ~SS_CXROM;
base_cxrom = apple_ii_64k[0]; base_cxrom = apple_ii_64k[0];
#ifdef AUDIO_ENABLED // FIXME TODO : implement pluggable peripheral API
//if (mockingboard_inserted) {
extern VMFunc MB_Read; extern VMFunc MB_Read;
base_c4rom = (void*)MB_Read; base_c4rom = (void*)MB_Read;
base_c5rom = (void*)MB_Read; base_c5rom = (void*)MB_Read;
#else //} else {
base_c4rom = (void*)ram_nop; base_c4rom = (void*)ram_nop;
base_c5rom = (void*)ram_nop; base_c5rom = (void*)ram_nop;
#endif //}
if (!(softswitches & SS_C3ROM)) { if (!(softswitches & SS_C3ROM)) {
base_c3rom = apple_ii_64k[0]; base_c3rom = apple_ii_64k[0];
} }
@ -1194,9 +1195,10 @@ static void _initialize_tables(void) {
// HACK TODO FIXME : this needs to be tied to the UI/configuration system (once we have more/conflicting options) // HACK TODO FIXME : this needs to be tied to the UI/configuration system (once we have more/conflicting options)
#ifdef AUDIO_ENABLED // FIXME TODO : implement pluggable peripheral API
//if (mockingboard_inserted) {
mb_io_initialize(4, 5); /* Mockingboard(s) and/or Phasor in slots 4 & 5 */ mb_io_initialize(4, 5); /* Mockingboard(s) and/or Phasor in slots 4 & 5 */
#endif //}
} }
// ---------------------------------------------------------------------------- // ----------------------------------------------------------------------------
@ -1213,12 +1215,7 @@ void vm_initialize(void) {
void vm_reinitializeAudio(void) { void vm_reinitializeAudio(void) {
for (unsigned int i = 0xC030; i < 0xC040; i++) { for (unsigned int i = 0xC030; i < 0xC040; i++) {
cpu65_vmem_r[i] = cpu65_vmem_w[i] = cpu65_vmem_r[i] = cpu65_vmem_w[i] = speaker_toggle;
#ifdef AUDIO_ENABLED
speaker_toggle;
#else
ram_nop;
#endif
} }
#warning TODO FIXME ... should unset MB/Phasor hooks if volume is zero ... #warning TODO FIXME ... should unset MB/Phasor hooks if volume is zero ...
} }
@ -1492,14 +1489,15 @@ bool vm_loadState(StateHelper_s *helper) {
LOG("LOAD base_cxrom = %d", state); LOG("LOAD base_cxrom = %d", state);
if (state == 0) { if (state == 0) {
base_cxrom = apple_ii_64k[0]; base_cxrom = apple_ii_64k[0];
#ifdef AUDIO_ENABLED // FIXME TODO : implement pluggable peripheral API
//if (mockingboard_inserted) {
extern VMFunc MB_Read; extern VMFunc MB_Read;
base_c4rom = (void *)MB_Read; base_c4rom = (void *)MB_Read;
base_c5rom = (void *)MB_Read; base_c5rom = (void *)MB_Read;
#else //} else {
base_c4rom = (void *)ram_nop; base_c4rom = (void *)ram_nop;
base_c5rom = (void *)ram_nop; base_c5rom = (void *)ram_nop;
#endif //}
} else { } else {
base_cxrom = apple_ii_64k[1]; base_cxrom = apple_ii_64k[1];
base_c4rom = apple_ii_64k[1]; base_c4rom = apple_ii_64k[1];